zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    codechef Taxi Driver
    BZOJ2190 SDOI2008 仪仗队
    BZOJ 1070: [SCOI2007]修车
    BZOJ 1066 [SCOI2007]蜥蜴
    最大流模板
    表达式计算
    codechef Polo the Penguin and the Tree
    LCA 求 树中两个点的距离
    Baby Step Giant Step model
    POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
  • 原文地址:https://www.cnblogs.com/alert123/p/4916517.html
Copyright © 2011-2022 走看看