Freefloat FTP Server 1.0 溢出漏洞分析

来源:互联网 发布:淘宝店铺音乐要钱吗 编辑:程序博客网 时间:2024/06/08 20:16

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

当时来源于一个特殊的面试,问我分析过二进制漏洞没有,我说没有,叫我去分析一个,那我就在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端口,程序看着也应该简单

 

玩一下ftpfuzz


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

 

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

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


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


查找jmp esp(因为知道要用,所以先查找了微笑


选 kernel32的吧

7C86467B  FFE4             JMP ESP

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

成功溢出

 

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

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


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


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


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


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


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

 

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


继续,又出现了


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

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

 

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


看看变量地址


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


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


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

.


跟我们计算的一样的


搞个abcd看看对不对


实验可以知道计算没错


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

 直接看结果吧

返回jmp esp的地址

至少要高8个垃圾字节啊

实验成功


总结

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

参考资料:

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


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


1 0