FTPServer的Fuzzing
2021-05-03 18:59:00 Author: mp.weixin.qq.com(查看原文) 阅读量:124 收藏

本文为看雪论坛优秀文章
看雪论坛作者ID令狐50

ftpserver的fuzzing测试

一、格式解析

1.1 FTP协议简介
FTP采用双连接来进行文件的传输:控制连接用于服务器和客户端之间命令的交互以及响应,而数据连接则用于文件数据的传输。服务端打开用于FTP控制连接的TCP端口21(标准),等待FTP客户端的连接。当客户端需要登陆FTP服务器时,主动打开本地TCP端口21,与服务端建立连接(控制连接)。该连接始终等待客户和服务器之间的通信,将命令从客户端传递到服务器,并传回服务器的应答。每当需要文件传输时,就创建一个数据连接。
命令和应答在客户和服务器的控制连接上以ASCII码形式传送。以下为常用的FTP命令:

FTP应答是ASCII码的3位数字,并跟有报文选项:
125 数据连接已经打开;传输开始。
200 就绪命令。
214 帮助报文(面向用户)。
331 用户名就绪,要求输入口令。
425 不能打开数据连接。
452 错写文件。
500 语法错误(未认可的命令)。
501 语法错误(无效参数)。
502 未实现的MODE(方式命令)类型。
1.2 socketsniff抓包分析

启动ftpserver.exe后开启socketsnifff,并选定ftpserver进程,开启监听:
在主机上使用命令ftp 192.168.18.144连接ftpserver,在连接时,ftpserver会收到两个数据包,这个信息可用于构建连接数据包:
接下来发送命令,因为fuzzing操作时会反复发送命令,所以选取的命令不应对服务器或本机造成改动,pwd或dir属于较好命令。
发现dir命令发送后,服务端打开了新的数据连接端口用于传输列表内容,所以选取pwd最为方便,且在数据包中直接使用XPWD作为命令行。

二、Pit编写

2.1 DataModel

需要编写“发送用户名——发送密码——发送执行命令”,而且ftp是交互式的,但对于服务端的回答,本测试中无需考虑。
2.2 StateModel

FTP是一个连贯的交互过程,所以是output和input的交替。
2.3 Agent

同样规定好监视器路径和命令行即可。
2.4 Test

最后是测试环节,这里有一个不同,为了使我们的xml具有通用性,这里的Host和Port并不是
固定的,而是以参数形式提供。同时变异策略采用Sequential,及peach将按顺序对每个元素使用其所有可用的mutators进行变异。

三、运行测试ftpserver.exe


使用命令“peach -DHOST=192.168.18.144 -DPORT=21 ./samples/ftp1.xml Test”
可以在log文件夹下找到测试出的较多触发漏洞情形:
选取其中一个打开,查看记录,发现eip被覆盖了,确实有漏洞。
再去查看此时对应的输入。
可以猜测是输入过长导致覆盖了EIP,导致的漏洞点。

四、编写POC

利用pwntools编写脚本尝试攻击。
在win7中打开ftpserver.exe,在kali中攻击。
在win7中显示ftpserver.exe停止工作,确认确实触发了漏洞。

用ollydbg分析也可以发现确实有漏洞点。

五、漏洞点分析


进行调试:

单步调试时,在这一句之前EIP显示正常,而此句命令为ADD ESP,100,然后RETN。
但显然此时栈里全是A,ESP+100后到达AAAA区域。
此时再retn,会返回到AAAA中,报错。
在这个大函数外面是00402DE0函数。(因为到这里都没有报错)
用ida查看更清楚。
V8只有0xfc即252,测试一下这个填充长度是否正确。
再进行一步即到“abcd”处,可知长度正确。

六、编写EXP

可以看到他会覆盖后续栈帧,如果可以让函数执行栈顶,则可以让他执行我们的函数,所以找到JMP ESP的位置,用这个命令位置作为跳板,在ftpserver.exe板块中没有此操作,可以使用操作ALT+E来搜索其余板块,最终在ntdll模块中找到适配指令,用作jmpesp,地址是77A23B61,如果使用pwntool的p32可以自动调整大小端,如果直接输入,要小端输入。
单步执行调试,发现确实可以让其跳转到JMP上:
跳到了JMP上:
只要让栈顶是我的指令即可,以防万一,使用一些NOP雪橇,下方红框为指令区,使用的是弹框指令来测试漏洞效果。
要找到这个弹框函数,可以右击“查找->所有模块中名称”,就可以找到弹框函数MessageBoxA的地址,用来作为shellcode的编写地址。
弹框内容作为参数压栈:
所以EXP如下:
测试效果如下:
如果要看细节弹框位置,可以单步调试如下:
本文附件可点击左下方阅读原文自行下载!
- End -

看雪ID:令狐50

https://bbs.pediy.com/user-home-916710.htm

  *本文由看雪论坛 令狐50 原创,转载请注明来自看雪社区。

# 往期推荐

公众号ID:ikanxue
官方微博:看雪安全
商务合作:[email protected]

球分享

球点赞

球在看

点击“阅读原文”,了解更多!


文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458384557&idx=2&sn=a53bb480ef6ae6f0190a4345ea57ac54&chksm=b180c82786f741311f1c6e62ff5ba7e472154c9ad2cd0a85f696b02555e9a89c82b9c2f71c63#rd
如有侵权请联系:admin#unsafe.sh