• 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

  • 相关阅读:
    jeecg错误集锦之hql查询问题 java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.IdentNode
    jeecg错误集锦之hql查询问题 org.hibernate.hql.internal.ast.QuerySyntaxException: order_pay is not mapped [SELECT PayChannel as className ,count(PayChannel) FROM order_pay group by PayChannel]
    es6--解构赋值-对象
    es6--解构赋值
    es6--let和const命令
    es6--let和const命令
    vue双向绑定时添加.sync不起作用的原因
    构建父子组件时注意的问题
    小程序scroll-view组件补充
    css自定义属性
  • 原文地址:https://www.cnblogs.com/alert123/p/4916517.html
Copyright © 2020-2023  润新知