sqli-lab全解析(Less26-Less51)(下)
字数 1459 2025-08-26 22:11:51

SQL注入进阶:sqli-lab全解析(Less26-Less51)

目录

  1. Less26-空格过滤绕过
  2. Less27-双写绕过
  3. Less28-组合过滤绕过
  4. Less29-报错注入
  5. Less32-36-宽字节注入
  6. Less37-登录框宽字节注入
  7. Less38-39-堆叠注入
  8. Less40-41-盲注
  9. Less42-45-登录框注入
  10. Less46-49-Order By注入
  11. Less50-51-报错注入

Less26-空格过滤绕过

过滤内容:空格、--+、#注释符

绕过方法

  1. 使用%0a、%0b、%0c、%0d、%09等空白字符代替空格(但都被过滤)
  2. 使用or '1'='1闭合语句
  3. 双写or绕过:orOorR
  4. 使用%a0绕过(Mac环境下有效)
  5. 时间盲注示例:
    ?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、--+、#

绕过方法

  1. 双写关键字:unionununionionselectselselectect
  2. 使用%0a代替空格
  3. 使用or '1'='1闭合语句

Less28-组合过滤绕过

过滤内容:union select组合、空格

绕过方法

  1. 双写组合:union union select select
  2. 使用%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)绕过

方法

  1. 在'前加上%df:%df'
  2. 使用--+闭合
  3. 联合查询获取数据

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:单引号闭合的时间盲注

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报错

总结技巧

  1. 空格绕过:%a0、%0a、%0b、%0c、%0d、%09
  2. 关键字过滤:双写、大小写混合
  3. 注释符过滤:使用or '1'='1闭合
  4. 宽字节注入:%df'
  5. 堆叠注入:多条语句执行
  6. 盲注:基于时间/布尔,逐步猜测
  7. Order By注入:通过排序参数注入
  8. 报错注入:updatexml等函数触发错误

注意:不同环境可能有差异,如%a0在Mac有效但其他环境可能无效。

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环境下有效) 时间盲注示例: sqlmap使用 : 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' 会报错 解决方法 : Less32-36-宽字节注入 原理 :使用addslashes函数转义单引号,通过宽字节(%df)绕过 方法 : 在'前加上%df: %df' 使用--+闭合 联合查询获取数据 Less34 :POST请求宽字节注入,需BP抓包手工测试 Less35 :数字型注入,无需构造,直接联合查询 Less37-登录框宽字节注入 特点 :登录框形式的宽字节注入 Less38-39-堆叠注入 特点 :可执行多条SQL语句 示例 : Less39 :数字型,无需闭合 Less40-41-盲注 特点 : 错误时不报出具体信息 需要猜测闭合方式 Less42-45-登录框注入 注入点 : 密码字段无过滤 不同闭合方式: Less42:无闭合 Less43: ` )闭合 Less44:无报错回显的盲注 Less45: ` )闭合的盲注 Less46-49-Order By注入 特点 : 通过sort参数注入 不同闭合方式: Less46:数字型 Less47:单引号闭合 Less48:数字型盲注(基于时间/布尔) Less49:单引号闭合的时间盲注 sqlmap问题 : 可能无法正确识别数据库名 Less50-51-报错注入 方法 : Less50:数字型,使用updatexml报错 Less51:单引号闭合,使用updatexml报错 总结技巧 空格绕过 :%a0、%0a、%0b、%0c、%0d、%09 关键字过滤 :双写、大小写混合 注释符过滤 :使用 or '1'='1 闭合 宽字节注入 :%df' 堆叠注入 :多条语句执行 盲注 :基于时间/布尔,逐步猜测 Order By注入 :通过排序参数注入 报错注入 :updatexml等函数触发错误 注意 :不同环境可能有差异,如%a0在Mac有效但其他环境可能无效。