走过路过,不要错过这个公众号哦!

目 的

1

Sulley是一个使用PYTHON编写的模糊测试框架。与其他FUZZING测试软件相比,Sulley兼顾网络抓包,崩溃信息报告生成以及自动化VMWARE管理功能。

本次我们将部署Sulley,并且使用该框架对war-ftpd进行FUZZING测试,使学生快速体验到Sulley的强大之处。

 知识

2

1、 Sulley的安装教程

1. 安装winpcap-4.12.exe。(用于抓取数据包)

2. 安装pcapy-0.10.5.win32-py2.7-winpcap4.1.2.exe(用于为抓包提供python接口)

3. 安装impacket-0.9.11.win32.msi(用于对数据包进行解码和构建)

4. 将sulley-master文件夹下的sulley,utils和requests文件夹放到c:\python27\lib\site-packages\目录下。(sulley核心文件)

5. 将pydbg_master资料中的四个文件夹放到c:\python27\lib\site-packages\目录下。其中utils文件夹和sulley的文件夹会重复,选择合并即可。(sulley使用部分pydbg模块)

6、测试。执行sulley文件夹下的network_monitor.py和process_monitor.py,如果不报错,则安装成功。

2、本次使用两台PC,均需要安装Sulley框架。被测试主机 IP 192.168.85.141, 测试主机  IP 192.168.85.151

具体步骤

3

war-ftpd这款ftp服务器在验证用户登陆时存在缓冲区溢出漏洞,本文我们将带小伙伴们使用Sulley这款Fuzzing测试框架来验证该漏洞的存在。具体思路如下:

1、 创建ftp fuzzing数据表示。

2、 创建网络监视器代理,进程监视器代理,测试。

3、 使用WEB访问监控,查看异常详情信息。

3.1 创建ftp fuzzing数据表示。

从步骤描述中提取到用户信息,ftp登陆漏洞。ftp登陆使用的是USER xxxx PASS xxxx模式来登陆。我们需要构造到的就是关于xxxx的畸形数据,并测试是否能够造成war-ftpd.exe异常。

Sulley中提供了多种数据表示。对于在测试中不需要变换的字符串,使用s_static函数即可。对于一般的需要变换的字符串,则使用s_string。对于像test@test.com这样的字符串,也可以进行细小化分割,可自定义分隔符,比如@符号和.符号,这时候使用的函数为s_delim()。对于分隔符的畸形数据包括重复,替换和删除。

举例来说,如果使用s_string(“hettian”),那么产生的数据包括了诸如”heetianAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA”等畸形数据。

用户在使用的过程中,不需要定义畸形行为,使用系统提供的畸形变换机制已经可以满足正常需求。

为了完成本次测试,我们需要对登陆过程中的账户名和密码进行FUZZING变换。编写ftp.py,内容如下。

首先我们初始化了两个变量user和pass(s_initialize),以供将来sulley框架调用。对于不变的数据使用了s_static,而对于需要变化的数据,则使用了s_string。这样,我们的数据将来可能是 USER hacker-fuzzing PASS hacker-fuzzing.(hacker-fuzzing 表示对应产生的fuzzing数据)。

编写完成后,将ftp.py放置到测试程序(ip 151)c:\python27\lib\site-packages\requests目录下以供将来测试使用。

3.2 创建网络监视器代理,进程监视器代理。

这一部分是Sulley测试框架的核心。测试主机并没有直接对被测试程序进行访问,而是通过中间代理来间接测试。通过进程监视代理可以查看进程的运行情况,网络监视代理又可以记录fuzzing测试过程中产生的流量。网络监视代理被硬编码为端口号26001,进程监视代理被硬编码为端口号26002.

下一步骤在被测试主机上设置(IP141)

1、 查看进程监视代理模块。切换到sulley_tools目录,执行process_monitor.py

-c参数:当目标测试程序发生异常时,所有现场信息都会记录到指定的文件中,等到测试结束之后我们可以从该文件中提取处所有的异常报告。

-p参数:进程代理需要指定目标测试程序的进程名,这样,进程代理通过进程名就可以找到该进程的PID值,从而起到监控的作用。

-port参数 指定进程代理监听端口。该端口是测试程序与进程代理的通信端口。默认设置26002,一般情况下我们无须修改。

进程监视模块运行在与目标测试程序war-ftpd.exe相同的系统下。根据我们的需要,若将异常文件定义为c:\war-ftpd.crash.那么在被测试系统上,则此脚本填充的参数如下图所示:

执行完成之后,下方列出了参数详情列表。可以看出,通过此项设置,远程测试程序可以与进程监控代理通信,而代理又通过程序名可以找到目标测试程序。这样间接的,就可以实现远程测试程序对目标程序的测试,而且还能记录下来所有的异常信息。当程序执行完毕之后,默认会打开26002端口进行监听。

输入 netstat –ano |find “26002”,可获得执行监听的程序PID。通过使用tasklist /fi “pid eq 1980”即可找到对应的进程名。(1980为对应的PID名,实验中可能不一样)

可以看到,运行着process_monitor.py的python.exe打开了26002端口进行监听。

2、 查看网络监控模块。切换到sulley目录,执行network_monitor.py

网络监控模块也是一个中间代理。测试程序发过来的数据包被监听到该模块用于记录。

-d参数:因为网络监控模块是对数据包的捕获,因此需要提供一个网络设备。

网络设备可以从最下方的Network Device List中获得。我们需要的是前方的索引号。在本例中,索引为0的网卡ip地址为192.168.85.141。

-f参数:定义了需要过滤的数据包类型,和wireshark的抓包过滤一致,使用的是BPF语法。通过定义该项,可以只记录感兴趣的数据包,以便后期分析整理。

-P参数:定义了将接收到的测试数据包存放在哪里。后面的路径在测试前必须存在。

网络监控模块默认监听端口为26001,这里我们不需要设置。

本次测试是针对ftp,因此应该将抓包过滤语法定义为“src or dst port 21”。在测试前,笔者创建了目录c:\war_ftp_pcaps。用于存放截取到的网络数据包。整条命令如下图所示:network_monitor.py –d 0 –f  “src or dst port 21” –P c:\war_ftp_pcaps

这时候,网络监听模块开始等待请求。系统的26001端口也已经被打开。

3、 测试程序的编写,本步骤在测试主机(IP151上运行)

在两个监控程序都已经启动的情况下,我们来完成测试程序的编写,程序命名为ftp_session.py。

Ftp模块是我们在任务一中编写的ftp测试数据表示,它指明了我们将要怎样生成fuzzing数据。所以使用 from requests import ftp导出。

ftp在接入的时候ftp服务器会通过socket发送欢迎信息,我们需要对此进行接收处理,这就是receive_ftp_banner函数要做的是事情。

Session会话是指当程序出现异常并处理后,可以保证接着下一个测试用例进程测试。因此需要有文件记录,本实验中我们把它记录在audits目录下(实验前目录必须存在),文件名为

war2ftpd.session.

Target需要注册的信息有:

目标IP和端口,通过session.target添加

Target.netmon即对应的网络监控代理,通过pedrpc.client添加

Target.procmon即对应的进程监控代理,同样通过pedrpc.client添加。

Target.procmon_options中定义了目标程序名,通过{“proc_name”:”aim_name”}

此时target注册完毕。

在session部分,首先将receive_ftp_banner和属性pre_send绑定起来,这样在发送fuzzing数据之前就可以收到ftp欢迎信息。

通过s_get获得对应在ftp中命名的fuzzing变量以产生畸形字符串。

sess.connect()用于组合命令集。我们首先对user账户认证做了单独组合,又将账户和密码混合起来做了一次组合。

在最后使用sess.fuzz()即可开始fuzzing测试。

4、 部署测试环境。

首先在目标主机141上启动:network_monitor.py,process_monitor.py和war-ftpd.exe。

War-ftpd打开之后,点击闪电,打开服务,呈online状态。

接着在测试机151上需要启动:ftp_session.py即可。此时可以看到测试过程:

另一方面,在被测试主机141上,我们可以看到network.py记录了捕获到的数据包。

而process_monitor.py也开启了监控模式。

一小会之后,程序报错。在测试主机151上可以看到下列情况:

同时在141被测试主机上可以看到:

这时候war-ftpd.exe已经退出了。如果想要继续,那么重新打开war-ftpd.exe,开启ftp服务即可接着继续测试。

在实验过程中,如果出现长时间的异常,请关闭所有程序并重新执行操作。由于Sulley提供会话机制,所以整个测试会从上次断掉的地方重新开始。

3.3使用WEB访问监控,查看异常详情信息。

1、 一旦测试开始,测试主机(IP151)上会开启一个端口为26000的web服务。输入http://127.0.0.1:26000,可访问该页面。

友好的界面显示了测试过程。Total进度表示总进度,从图中可以看出我们在针对user进行fuzzing测试。两侧的pause按钮和resume按钮可以暂停和继续整个测试过程。

2、 点击testcase序号,进入详情。

可以看到,堆栈被A给填充以至于溢出了。Sulley使用的是pydbg框架,这里的测试报告和我们在pydbg教程中提到的一样。

3、 等到测试结束,或者不再想深入测试的时候,我们需要对现场信息整理。

我们可以看到,这些异常基本上都是同一种类型的异常。也没有必要再多测试几次了。

这时候,回到我们的测试主机(141)上来。网络监听代理已经将所有监听到的数据包都记录在了这里。并且这些数据包的编号和测试编号的大小一致。

如果测试用例比较多怎么办,如何筛选出来造成异常的数据包来重现攻击。Sulley为我们提供了一个工具叫做pcap_cleaner.py。

可以看到参数为 crash文件名和存放数据包的路径名。

我们记录的异常文件名为c:\war-ftpd.crash, 存放的数据包路径为c:\war_ftp_pcaps.

执行之后,我们来看下数据包目录。

可以看到,剩余的都是有效数据包,这些数据包的载荷能够使war-ftpd程序崩溃。

双击任意一个文件,wireshark会载入。我们以2为例。

右键跟随TCP流,查看会话。

可以看到,正是这段恶意填充的畸形数据A导致了缓冲区溢出。

4、 当测试结束之后,web界面无法打开,如果我们需要查看异常信息,可以使用命令行。Sulley提供给我们一个脚本 crashbin_explorer.py.

必选参数:异常文件名,可选参数 –t 异常序号,则显示该异常的详细信息。

输入crashbin_explorer.py c:\war-ftpd.crash.

效果和在web上一致。如果要查看2号的详细信息,后面再添加-t 2即可。由于文件较大,在命令行后加上 >a.txt,即可转存到a.txt中,方便我们查看(crashbin_explorer.py c:\war-ftpd.crash –t 2 >a.txt)

总结

4

本次我们使用Sulley这款Fuzzing测试框架验证了war-ftpd的ftp服务器在验证用户登陆时存在缓冲区溢出漏洞,其实Sulley还有其他的程序,读者可以自己查询下功能。希望本文能给大家带来一些启发,提高自身的实战动手能力。读者切记不要使用这些技术做违法的事情。如读者因此做出危害网络安全的行为后果自负,与合天智汇及本人无关,特此声明。

www.heetian.com

4006-123-731

长按图片,据说只有颜值高的才能识别哦~

PYTHON SULLEY HACKING War-ftpd相关推荐

  1. OSINT + Python = Custom Hacking

    工具 #1 目标: 在LinkedIn上使用Google Custom Search API搜索 ANTPJI成员. 使用的库: Google API 客户端,Requests 库. # File: ...

  2. war包部署到tomcat的疑问

    2019独角兽企业重金招聘Python工程师标准>>> war包具体是怎样部署到tomcat里面的,这里就不做详细说明了,很多高手都有自己的"独到"教程,哈哈. ...

  3. python编程入门书-关于 Python 的经典入门书籍有哪些?

    /> 这个问题是四年前提出的,想必题主现在应该也是个 Python 熟手了,所以在本篇回答中除了分享 Python 的入门书籍外,也会补充一些适合编程熟手的学习资源. 对于其中一些资源,我们也附 ...

  4. 部分算法与对应代码整理(R、Python)

    目录 1. 图像.人脸.OCR.语音相关算法整理 2. 机器学习与深度学习相关的R与Python库 (1)R General-Purpose Machine Learning Data Manipul ...

  5. python飞机大战功能模块图_基于Python的飞机大战游戏设计

    第 2 3 卷 第 1 期 2019年 3 月 扬 州 职 业 大 学 学 报 Journal of Yangzhou Polytechnic College Vol .23 No . 1 Mar . ...

  6. BlackArch-Tools

    BlackArch-Tools 简介安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 B ...

  7. 红队 入门_我穿越网络安全红队的硕士证书的旅程

    红队 入门 August 26 BY Kaavyaa.A 8月26日,Kaavyaa.A This is my personal experience with the one-of-a-kind p ...

  8. python怎么部署到tomcat_使用python将war部署到tomcat

    我正在尝试使用 python(2.4.2)将战争部署到Apache Tomcat服务器(Build 6.0.24),作为构建过程的一部分. 我正在使用以下代码 import urllib2 impor ...

  9. 转贴一篇不错的Python入门教程 - Instant Hacking[译文]

    为什么80%的码农都做不了架构师?>>>    原文 http://www.hetland.org/python/instant-hacking.php Instant Hackin ...

最新文章

  1. map 小模板~~~ 写的不好 继续添加
  2. hello python jpush api_jpush python服务器端
  3. 深度学习-Tensorflow2.2-Tensorboard可视化{5}-可视化基础-17
  4. [转]tesseract OCR Engine overview字符识别学习
  5. 构造函数的执行序列(读书笔记)
  6. 8bit黑白图像的灰度值范围是_浅谈工业CT图像灰度值
  7. 基于物品的协同过滤ItemCF的mapreduce实现
  8. [转] DevExpress 第三方控件汉化的全部代码和使用方法
  9. c语言运算符ppt,C语言知识学习运算符.ppt
  10. 【Arduino】使用C#实现Arduino与电脑进行串行通讯
  11. Supervisor管理springboot应用进程
  12. 3. PowerShell --基本操作,Alias,输出
  13. Java源码混淆,jar包加密,禁止反编译jar包
  14. 品高云入围央采软件协议供货名单
  15. spring boot高性能实现二维码扫码登录(下)——订阅与发布机制版
  16. OpenCV-图像处理(15、自定义线性滤波)
  17. html5 sha1,JavaScript 实现的base64加密、md5加密、sha1加密及AES加密
  18. u盘如何修复 新萝卜U盘官方网站原创
  19. 0基础学SQL(二)
  20. 【信息收集】渗透测试信息收集的种类及方法(待拆分细化)

热门文章

  1. H5视频自动播放和循环播放
  2. 链表的两种创建方法——头插法与尾插法
  3. 华为AR路由器无法上网解决办法
  4. Iphone保存html网页,在iPhone上保存网页的最优方式
  5. 计算机组装方案及分析,计算机组装与维护
  6. html制作唐诗三百首,《唐诗三百首》
  7. 如何在浏览器打开pdf文件头部隐藏菜单栏?
  8. 从事SQL相关工作者可以成为数据科学家吗
  9. icc校色文件使用教程_Win7系统色彩管理显示器ICC设置的操作方法
  10. x^a=b(mod c)求解x在[0,c-1]上解的个数模板+原根求法