SULLEY安装与使用

0x00 原理

         Sulley适合于网络协议的fuzzing,通过分析网络协议的交互过程,编写python脚本,定制协议报文的格式,大量发送变异报文,对目标进行模糊测试。模糊测试的效率取决于对测试协议的了解与深入分析。

0x01 安装

         安装指导请参见https://github.com/OpenRCE/sulley/wiki/Windows-Installation#

         安装环境:win7 + python2.7.10

         安装指导中,大部分步骤都能顺利进行,这里对里面使用到的库及安装过程中遇到的一些问题进行说明,其他按指导中进行即可。

MinGW

Windows下对linux下工具的支持,这里主要对编译器gcc等

Git

Github工具,为了下载安装其他工具与库

Pydbg

Python写的调试器工具

Libdasm

反汇编库

Sulley

Sulley主程序

Pcapy

Python通过pcapy调用winpcap的接口

Winpcap dev kit

编译pcapy所需要的头文件与lib文件

Winpcap

Windows下的抓包工具,安装wireshark会默认安装

Impacket

提供访问网络数据包的类

        

依赖关系:sulley中有两个重要的监控程序process_monitor.py与network_monitor.py

process_monitor.py依赖于pydbg与libdasm

network_monitor.py依赖于pcapy与impacket、winpcap

libdasm与pcapy安装需要依赖于MinGW下的编译器。

         可能遇到的问题:

  1. Libdasm的编译

指定MinGW为编译器(可能会遇到版本问题)来解决

安装Microsoft Visual C++ Compiler Package for Python 2.7来解决

直接网上下载编译好的pydasm.pyd放到对应的目录中

从安装指导来看,最主要的就是site-packages下有pydasm.pyd文件,所以可以直接从网上下载该文件放到对应目录下。

2. Pcapy的编译

如果指定MinGW安装遇到编译问题,可以安装Microsoft Visual C++ Compiler Package for Python 2.7, 然后通过pip install pcapy进行安装。(pip 工具也需要安装的,网上搜索一下即可)。 找不到头文件需要指定Winpcap dev kit的include与lib路径,或者将里面的文件拷贝到python对应的文件夹下。

         验证:process_monitor.py与network_monitor.py能正常运行

0x02 编写测试脚本,开始fuzzing

编写测试脚本:

from sulley import *

def get_greeting_msg(sock):
    greet_message = sock.recv(10000)

#sessions.session.log("Greeting Message -->%s" % get_greeting_msg, 2)
def callback(sessions, node, edge, sock):
    #sessions.session.log("Data sent -->%s" % node.render(), 2)
    pass
#通过分析协议交互报文,编写报文格式
s_initialize("helo")
if s_block_start("helo"):
    s_static("helo")
    s_delim(" ")
    s_static("test.com")
    s_static("\r\n")
    s_block_end()

s_initialize("ehlo")
if s_block_start("ehlo"):
    s_static("ehlo")
    s_delim(" ")
    s_random("xxx.com", 5, 10)
    s_static("\r\n")
    s_block_end()

s_initialize("mail from")
if s_block_start("mail from"):
    s_static("mail from: ")
    s_delim("")
    s_delim("<")
    s_static("haha@ims.com")
    s_delim(">")
    s_static("\r\n")
    s_block_end()

s_initialize("rcpt to")
if s_block_start("rcpt to"):
    s_static("RCPT TO")
    s_delim(":")
    s_static("alice@test.com")
    s_static("\r\n")
    s_block_end()
    
s_initialize("pre_data")
if s_block_start("pre_data"):
    s_static("DATA\r\n")
    s_block_end()
    
s_initialize("data_content")
if s_block_start("data_content"):
    s_static("Receive:")
    s_string("Whatever")
    s_static("\r\n")
    s_static("Subject:")
    s_string("GOGOGOA"*2)
    s_static("\r\n")
    s_static("\r\n")
    s_string("haha")
    s_static("\r\n.\r\n")
    s_block_end()

#构建session,指定目标IP与端口,发送报文开始fuzzing
sess = sessions.session(log_level=100)
target = sessions.target("192.168.1.115",25)
sess.add_target(target)
sess.connect(sess.root, s_get("helo"), callback)
sess.connect(sess.root, s_get("ehlo"), callback)
sess.connect(s_get("helo"), s_get("mail from"), callback)
sess.connect(s_get("ehlo"), s_get("mail from"), callback)
sess.connect(s_get("mail from"), s_get("rcpt to"), callback)
sess.connect(s_get("rcpt to"), s_get("pre_data"), callback)
sess.connect(s_get("pre_data"), s_get("data_content"), callback)
sess.fuzz()

执行程序:

0x03 总结

         Sulley模糊测试的效率取决于对测试协议的了解程度,需要对测试协议有深入的了解,编写对应的报文格式。 sulley作者已经停止开发,有一些版本问题,网上的一些示例可能在调用方式上有一些改变,对python熟悉可以查看sulley的源代码调整函数的调用。

0x04 参考

http://blog.csdn.net/cogbee/article/details/34861451

http://blog.sina.com.cn/s/blog_714c124f01015391.html

posted @ 2015-10-28 10:21  alert123  阅读(2596)  评论(0编辑  收藏  举报