FreeFloat FTP1.0 溢出漏洞分析

FreeFloat FTP1.0 溢出漏洞分析

最近在研究逆向,跟着国外文章在入门,以下我的笔记,内部分享,大神勿喷。

环境准备:

xp sp3FreeFloat FTP 1.0kaliollydbgImmunity DebuggerMona.py

当发生溢出时,我们正在清楚两点; (1)我们的缓冲区需要覆盖EIP(当前指令指针)和(2)其中一个CPU寄存器需要包含我们的缓冲区。您可以看到下面的x86 CPU寄存器列表及其各自的功能。我们需要记住的是这些寄存器中的任何一个都可以存储我们的缓冲区(和shellcode)。

漏洞数据库:https://www.exploit-db.com/exploits/40711/(下图去除了一些注释,该网址完整版可以自己上去看)

通常我们需要做坏字符分析,我们在exploit-db上预先存在的metasploit模块中查看出坏字符。列出的字符是\x00\x0A\x0D。我们需要记住这些字符以备后用(后面生成shellcode需要用到)。

第一步: 让FreeFloat FTP1.0 出现崩溃

首先我们需要创建一个POC来使FTP服务器崩溃。我在exploit-db上找到的“FreeFloat FTP”的漏洞进行了攻击。我们将使用FTP服务器配置的预先存在的“匿名”用户帐户(漏洞应该与任何有效的登录凭据一起使用)。这一步的主要目的是为了确定那个寄存器存在可以存放恶意shellcode的缓冲区。

然后我们先把FTP服务器扔进行启动好的,然后我在kali上运行POC,发现程序崩溃了。你可以看到EIP被覆盖,两个寄存器(ESP和EDI)包含我们的缓冲区的一部分。在分析寄存器转储之后,ESP存在可以利用的地方,因为它包含了我们缓冲区的一大块。

第二步:覆盖EIP

接下来,我们需要分析我们的崩溃,为此我们需要用metasploit模式下pattern_create.rb进行生成替换我们之前设置的A,并重新发送缓冲区。注意,由于变化的缓冲区长度可能会改变程序崩溃,所以我们这里必须保持原始缓冲区的长度是1000。

当程序再次崩溃时,我们可以看到以下内容,只是EIP(和两个寄存器)现在被部分metasploit模式覆盖了。我们可以用“mona”来分析程序崩溃。你可以在下面的截图中看到分析的结果。

!mona findmsp

从分析中我们可以看到,EIP被我们缓冲区的最初247个字节之后的4个字节覆盖。就像我之前说过的,我们也可以看到,ESP包含了一大块缓冲区,所以它是我们攻击的一个更合适的候选者。使用这些信息,我们可以重新组织上面的POC中的恶意缓冲区,看起来像这样:

evil = "A"*247 + "B"4 + "C"749

当我们重新发送修改后的缓冲区时,我们可以EIP被我们的四个B覆盖。

这意味着我们可以用一个将执行流重定向到ESP的指针来替换这些B。我们要清楚的是我们的指针不能包含坏字符。要找到这个指针,我们可以用下面的命令使用“mona”。如图所示:

!mona jmp -r esp

然后我们再打开jmp.txt查看进栈的地址:

看来,这些指针中的任何一个都可以,它们属于操作系统的DLL,所以它们将特定存在于“WinXP PRO SP3”,但这不是我们主要关心的问题。我们可以使用列表中的第一个指针。请住,由于CPU的Little Endian架构,我们需要反转字节顺序。

所以我这里最后成型的POC:

然后让我们在Immunity Debugger重新启动程序,并在我们的指针上放置一个断点,以便在调试器到达时暂停。正如我们在下面的屏幕截图中看到的,EIP被我们的指针覆盖,我们触发了我们的断点,它应该把我们带到位于ESP的缓冲区。

第三步:构造恶意shellcode

我们需要

(1)修改我们的POC,为我们的shellcode添加一个变量

(2)插入payload。让我们从POC开始,我们将把我们的有效载荷插入到现在由C组成的缓冲区中。理想情况下,我们希望动态修改缓冲区长度,所以如果我们插入一个不同大小的负载(但是我们的总缓冲区长度应该保持1000字节),我们不需要重新计算。我们还应该在我们的有效载荷之前插入一些NOP作为填充。你可以看到下面的结果。我们在shellcode变量中插入的任何shellcode都会被缓冲区溢出执行。

然后我们使用msfvenom生成恶意shellcode 。

所以最好成型代码如下:

最后我们重启启动FTP服务器,然后启动我们的POC,然后使用nc进行连接。

红日安全成员 -- 阿雨

文章推荐

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G0UY3900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券