zoukankan      html  css  js  c++  java
  • Freefloat FTP Server 1.0 溢出漏洞分析

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

    当时来源于一个特殊的面试,问我分析过二进制漏洞没有,我说没有,叫我去分析一个,那我就在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
    :其他基本数据类型存储空间大小
    10:Hello, World!的大小
    09:整型与布尔型的转换
    08:打印字符
    07:打印ASCII码
    06:浮点数向零舍入
    05:填空:类型转换2
    04:填空:类型转换1
    03:其他基本数据类型存储空间大小
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286521.html
Copyright © 2011-2022 走看看