Freefloat FTP Server 1.0 溢出漏洞分析

时间:2023-01-11 04:00:36

其实这是一个非常简单的漏洞,就是栈溢出

当时来源于一个特殊的面试,问我分析过二进制漏洞没有,我说没有,叫我去分析一个,那我就在exploit db搜寻栈溢出,终于找到一个简单的了,就是这个


漏洞软件请到这里下载吧:

http://www.52pojie.cn/thread-557521-1-1.html

环境

 xp sp3 英文版(就是metasploit魔鬼训练营的xp环境)

攻击环境:kali 2.0

工具及插件:

IDA

ImmunityDebugger

https://github.com/corelan/mona

pwntools

漏洞软件:freefloatftpserver1.0


一个新手学着分析的过程

下载漏洞程序打开,可以看到已经监听21端口,程序看着也应该简单

 Freefloat FTP Server 1.0 溢出漏洞分析

玩一下ftpfuzz

Freefloat FTP Server 1.0 溢出漏洞分析

确实可以溢出,挖洞还是fuzzing牛啊

 Freefloat FTP Server 1.0 溢出漏洞分析

利用mona插件查看modules信息,XP还没有搞ASLR吧

(ASLR 在 XP 时代已经提出来了,但 XP 上的ASLR 功能有限,只是对 PEB 和 TEB 进行简单的随机化处理。直到 Windows Vista 出现之后 ASLR 才真正发挥作用。)

Freefloat FTP Server 1.0 溢出漏洞分析

DEP默认只针对windows自带的程序和服务(第一次还是简单点比较好)

Freefloat FTP Server 1.0 溢出漏洞分析

查找jmp esp(因为知道要用,所以先查找了Freefloat FTP Server 1.0 溢出漏洞分析

Freefloat FTP Server 1.0 溢出漏洞分析

选 kernel32的吧

7C86467B  FFE4             JMP ESP

利用pwntools编写脚本尝试攻击(其实那个ftp命令只要是无关紧要,随便搞个命令都可以溢出,不过返回地址有差异而已)

Freefloat FTP Server 1.0 溢出漏洞分析

成功溢出

 Freefloat FTP Server 1.0 溢出漏洞分析

通过栈上的一些返回地址(这就是栈回溯吧),找到了ftp给客户端返回欢迎信息的地方,这是nmap等扫描器指纹识别的字符串

Freefloat FTP Server 1.0 溢出漏洞分析

下断点。运行,发payload,断下来单步,跟着又弹异常

Freefloat FTP Server 1.0 溢出漏洞分析

继续在这个函数下断,重来一遍,f7跟进,继续单步,看到接受我们输入的recv函数

Freefloat FTP Server 1.0 溢出漏洞分析

继续,看到判断用户传的命令是否有回车的代码(跟0d,0a比较)

Freefloat FTP Server 1.0 溢出漏洞分析

继续下断点,重复上面步骤

Freefloat FTP Server 1.0 溢出漏洞分析

调试发现,不断去跟ftp的各种命令去比较

Freefloat FTP Server 1.0 溢出漏洞分析

查看ida的话也印证了这一点

 Freefloat FTP Server 1.0 溢出漏洞分析

跟着比较完都不匹配,就会返回ftp服务器不明白这个命令

Freefloat FTP Server 1.0 溢出漏洞分析

继续,又出现了

Freefloat FTP Server 1.0 溢出漏洞分析

最终发现就是00402de这个函数有问题,查看此时的堆栈信息,我们的输入传进去了

Freefloat FTP Server 1.0 溢出漏洞分析

跟进去里面有个strcpy的代码--à rep movsd

 Freefloat FTP Server 1.0 溢出漏洞分析

Ida查看更清晰,这个跟基础的pwn题一样………

Freefloat FTP Server 1.0 溢出漏洞分析

看看变量地址

Freefloat FTP Server 1.0 溢出漏洞分析

那么填充字符数量是252,因为这里没用ebp来索引 ,所以不用加上ebp

Freefloat FTP Server 1.0 溢出漏洞分析

修改下代码,‘FEAT加个空格已经6个字符,所以我们补246个A就行了


当然不用计算也是可以的,mona生成一些测试样例,用于定位返回地址的

Freefloat FTP Server 1.0 溢出漏洞分析.

Freefloat FTP Server 1.0 溢出漏洞分析Freefloat FTP Server 1.0 溢出漏洞分析

跟我们计算的一样的

Freefloat FTP Server 1.0 溢出漏洞分析

搞个abcd看看对不对

Freefloat FTP Server 1.0 溢出漏洞分析

实验可以知道计算没错

Freefloat FTP Server 1.0 溢出漏洞分析

那我们尝试发送一个弹窗的shellcode过去看看

Freefloat FTP Server 1.0 溢出漏洞分析

 直接看结果吧

返回jmp esp的地址

Freefloat FTP Server 1.0 溢出漏洞分析

至少要高8个垃圾字节啊

Freefloat FTP Server 1.0 溢出漏洞分析

实验成功

Freefloat FTP Server 1.0 溢出漏洞分析

总结

漏洞原因是,ftp服务器会将用户的输入复制到一个缓冲区,目的是拼接上一些用户提示信息返回给用户,使用了strcpy函数,没对长度进行检查,导致缓冲区溢出。

参考资料:

Exploit db有好几个洞实质都是一样的,不知道为啥搞了这么多上去

Freefloat FTP Server 1.0 溢出漏洞分析

https://www.exploit-db.com/exploits/17550/

https://www.exploit-db.com/exploits/22351/

https://www.exploit-db.com/exploits/23243/

http://hacksys.vfreaks.com/research/freefloat-ftp-server-buffer-overflow.html