首页
课程
问答
CTF
社区
招聘
峰会
发现
排行榜
知识库
工具下载
看雪20年
看雪商城
证书查询
登录
注册
首页
社区
课程
招聘
发现
问答
CTF
排行榜
知识库
工具下载
峰会
看雪商城
证书查询
社区
二进制漏洞
发新帖
9
8
[分享][原创]FTPServer的Fuzzing
发表于: 2021-4-12 13:27
12221
[分享][原创]FTPServer的Fuzzing
令狐50
2021-4-12 13:27
12221
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作为命令行。
2 Pit编写
2.1 DataModel
需要编写“发送用户名——发送密码——发送执行命令”,而且ftp是交互式的,但对于服务端的回答,本测试中无需考虑。
2.2 StateModel
FTP是一个连贯的交互过程,所以是output和input的交替。
2.3 Agent
同样规定好监视器路径和命令行即可。
2.4 Test
最后是测试环节,这里有一个不同,为了使我们的xml具有通用性,这里的Host和Port并不是固定的,而是以参数形式提供。同时变异策略采用Sequential,及peach将按顺序对每个元素使用其所有可用的mutators进行变异。
3 运行测试ftpserver.exe
使用命令“peach -DHOST=192.168.18.144 -DPORT=21 ./samples/ftp1.xml Test”
可以在log文件夹下找到测试出的较多触发漏洞情形:
选取其中一个打开,查看记录,发现eip被覆盖了,确实有漏洞
再去查看此时对应的输入
可以猜测是输入过长导致覆盖了EIP,导致的漏洞点。
4 编写POC
利用pwntools编写脚本尝试攻击
在win7中打开ftpserver.exe,在kali中攻击
在win7中显示ftpserver.exe停止工作,确认确实触发了漏洞。
用ollydbg分析也可以发现确实有漏洞点
5 漏洞点分析
进行调试:
单步调试时,在这一句之前EIP显示正常,而此句命令为ADD ESP,100,然后RETN
但显然此时栈里全是A,ESP+100后到达AAAA区域
此时再retn,会返回到AAAA中,报错
在这个大函数外面是00402DE0函数(因为到这里都没有报错)
用ida查看更清楚
V8只有0xfc即252,测试一下这个填充长度是否正确
再进行一步即到“abcd”处,可知长度正确。
6 编写EXP
可以看到他会覆盖后续栈帧,如果可以让函数执行栈顶,则可以让他执行我们的函数,所以找到JMP ESP的位置,用这个命令位置作为跳板,在ftpserver.exe板块中没有此操作,可以使用操作ALT+E来搜索其余板块,最终在ntdll模块中找到适配指令,用作jmpesp,地址是77A23B61,如果使用pwntool的p32可以自动调整大小端,如果直接输入,要小端输入。
单步执行调试,发现确实可以让其跳转到JMP上:
跳到了JMP上:
只要让栈顶是我的指令即可,以防万一,使用一些NOP雪橇,下方红框为指令区,使用的是弹框指令来测试漏洞效果。
要找到这个弹框函数,可以右击“查找->所有模块中名称”,就可以找到弹框函数MessageBoxA的地址,用来作为shellcode的编写地址。
弹框内容作为参数压栈:
所以EXP如下:
测试效果如下:
如果要看细节弹框位置,可以单步调试如下:
参考网站:
https://blog.csdn.net/u012763794/article/details/53291788
https://baijiahao.baidu.com/s?id=1664388740959677598&wfr=spider&for=pc
登录后可查看完整内容
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于
2022-2-3 11:19 被kanxue编辑 ,原因:
#Windows
#Fuzz
收藏
・
9
免费
・
8
支持
分享
分享到微信
分享到QQ
分享到微博
赞赏记录
参与人
雪币
留言
时间
gal2xy
你的分享对大家帮助很大,非常感谢!
2024-11-30 15:27
QinBeast
感谢你的贡献,论坛因你而更加精彩!
2024-9-26 03:50
心游尘世外
看雪因你而更加精彩!
2024-9-3 03:49
墨迹sky
为你点赞~
2024-1-29 14:51
一笑人间万事
为你点赞~
2023-1-13 14:24
梨子
为你点赞~
2021-4-12 16:25
有毒
为你点赞~
2021-4-12 14:13
pureGavin
为你点赞~
2021-4-12 13:57
查看更多
赞赏
×
1 雪花
5 雪花
10 雪花
20 雪花
50 雪花
80 雪花
100 雪花
150 雪花
200 雪花
支付方式:
微信支付
赞赏留言:
快捷留言
感谢分享~
精品文章~
原创内容~
精彩转帖~
助人为乐~
感谢分享~
最新回复
(
5
)
pureGavin
雪 币:
14653
活跃值:
(17749)
能力值:
( LV12,RANK:290 )
在线值:
发帖
85
回帖
1422
粉丝
272
关注
私信
pureGavin
3
2
楼
感谢分享
2021-4-12 13:57
0
有毒
雪 币:
15565
活跃值:
(16922)
能力值:
(RANK:730 )
在线值:
发帖
56
回帖
529
粉丝
331
关注
私信
有毒
10
3
楼
师傅方便的话修改一下文章标题吧,《FTPServer的Fuzzing》这种。只是Fuzzing,有些些迷惑
2021-4-22 17:06
0
狐臭
雪 币:
733
活跃值:
(1395)
能力值:
( LV2,RANK:15 )
在线值:
发帖
10
回帖
47
粉丝
10
关注
私信
狐臭
4
楼
preach这种fuzzer已经生存不下去了,afl有个peach改过去的扩展项目可以试一试
2021-4-23 16:37
0
光刃
雪 币:
612
活跃值:
(3904)
能力值:
( LV12,RANK:200 )
在线值:
发帖
70
回帖
219
粉丝
48
关注
私信
光刃
3
5
楼
狐臭
preach这种fuzzer已经生存不下去了,afl有个peach改过去的扩展项目可以试一试
peach完全可以生存下去。
并且peach不依赖代码分析,可以生存的更好。
我认为peach比afl适用面要广的多。
2023-12-23 19:51
0
秋狝
雪 币:
3573
活跃值:
(31026)
能力值:
( LV2,RANK:10 )
在线值:
发帖
0
回帖
1569
粉丝
38
关注
私信
秋狝
6
楼
感谢分享
2023-12-23 22:49
1
游客
登录
|
注册
方可回帖
回帖
表情
雪币赚取及消费
高级回复
返回
令狐50
1
发帖
6
回帖
10
RANK
关注
私信
他的文章
[分享][原创]FTPServer的Fuzzing
12222
关于我们
联系我们
企业服务
看雪公众号
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
看原图
赞赏
×
雪币:
+
留言:
快捷留言
为你点赞!
返回
顶部