使用python重写metasploit的exploit

  • A+
所属分类:Python

序言

有时你可能想要一个独立的exploit,但唯一的选择是Metasploit模块。当然你可以随时启动Metasploit并使用它。但是除了解在Metasploit下面使用exploit以外,我们还可以很方便地了解如何处理自己的漏洞利用,并在将来甚至编写自己的Metasploit模块,并为这个美好的的项目做出贡献。

要求

备注
ftp 服务器的下载地址如下:

目标

我们将调整位于/usr/share/metasploit-framework/modules/exploits/windows/tftp/attftp_long_filename.rb的attftp_long_filename.rb模块,并将其更改为我们自己独立的Python exploit。我绝对不是一个经验丰富的开发者,所以我只能想到这样的方式来实现这一个简单的功能,可能会有更多的最佳方法来做到这一步。
模块是attftp_long_filename.rb

关键点

让我们来看看模块的一些关键点,然后尝试一下,了解一下。我们只针对漏洞利用产生影响的部分进行检查。

默认退出选项

如上所述,默认退出函数是’process’。这是shellcode在运行后退出的方法,通常会在我们发送我们的漏洞后对攻击程序的稳定性产生影响。当我们改变shellcode以适应我们的特殊情况时,应该注意这个值。

有效载荷

有效载荷是我们需要检查的关键方面之一。这表示我们有210字节的空间用于我们的有效载荷驻留。任何较大的,我们可能会遇到各种截断我们的漏洞利用的问题。坏字符表示可能影响我们漏洞利用的字节。我们需要确保这些字符都不在我们的shellcode中,在这种情况下,它几乎是普遍不好的空字符’0x00’。有关坏字符的更多信息,请搜索本网站以编写基本缓冲区溢出。最后我们看到一些叫做堆栈调整的东西。基本上是因为我们在使用中受到限制,我们需要使用一种称为分段有效载荷的东西。我们正在做的只是发送一个小的第一条指令,其设计用于连接到我们并获得主要有效载荷。

目标系统

Metasploit对于许多漏洞利用具有广泛的目标,对于每个操作系统来说,这些目标主要是各种适用的返回地址。因为他们经常使用系统DLL,这些地址不会从计算机更改为计算机,并确保漏洞兼容性。在我们的例子中,我们希望使用c0re,Windows XP SP3提供的返回地址。

漏洞利用

所有其他的主要部分,一直是导致利用本身的。让我们一起去认真看看,以确保我们了解它。

这意味着漏洞将通过UDP数据包发送。此线路连接将目标值设置为Metasploit中的值,如RHOST和RPORT。

漏洞利用两个十六进制值“0x00”和“0x02”开始,后跟一系列NOP。根据LAN IP的长度,nops组件的长度可变,但总共总共为25。作为示例,“192.168.1.2”的LHOST值的长度为11,而IP地址为“192.168.100.123”的长度为15.如果要使用此功能弹出IRB(Interactive Ruby Shell)并分配一个变量,如LHOST =’192.168.1.50’。然后命令LHOST.length会告诉你长度值 - 或者只是计算包含句点的字符数。

该行编码Metasploit中指定的有效载荷,并以所需格式进行编码。Metasploit将根据可用空间和目标操作系统在内部确定哪些有效负载是合适的,并且可以使用“显示有效载荷”命令查看它们。当我们说“必需格式”时,这意味着它将在漏洞中提前排除指定的不能使用的。

此命令将目标返回地址附加到exploit字符串中。由于在Metasploit中您可以提名不同的操作系统,因此在此可以显示为变量,但为了我们的目的,它只是Windows XP SP3的返回地址。包“V”命令表示需要以小的字节格式打包,这对x86处理器是必需的。

翻译成命令,这是指示esp寄存器添加40个字节并返回。有必要对我们的漏洞进行正确的定位。

我们的漏洞利用的最后一个字符串,它以AT-TFTP期待的格式终止数据流。

这指示Metasploit通过UDP发送漏洞。

断开链接,但这表示它已经完成了UDP套接字请求。

对应操作系统

我们总结一下我们在自己的漏洞中所需要实现的工作,以便在上述突出的领域得到工作。

关于这些具有挑战性的唯一的一步是这个堆栈调整业务,但是真的像所有的事情一样容易得多。

我们从一个非常简单的UDP框架开始,将信息发送到目标。

现在从这里开始,很多信息都将是从这里开始研究的。这包括创建适当大小的NOP和返回地址,以及我们将会发送的信息来设置漏洞本身。我们将其纳入我们的框架

现在我们已经知道我们需要采取下一步的因素,并考虑到我们的有效载荷的堆栈调整。

堆栈调整

首先,我们需要将我们的有效负载转储到一个原始的十六进制文件中以进一步操作。在这种情况下,我们的有效负载将是更小 reverse_nonx_tcp模块,因为它特别小的代码占用。我们使用命令,

如果我们希望确认已成功输出到该文件,我们可以使用该命令

当将文件与编码调整版本进行比较时,这也将派上用场。接下来,我们需要找出我们实际需要使用什么命令调整堆栈-3500字节。这可以使用Metasploit工具nasm_shell.rb,位于这里/usr/share/metasploit-framework/tools/nasm_shell.rb。装入命令将给你该命令的hex机器指令。由于我们要从堆栈指针中减去3500(十六进制0xDAC),所以我们执行以下操作,

这告诉我们,我们需要使用命令81EC AC0D 0000来实现将堆栈调整为3500.我们将其输出为原始十六进制文件。你可以这样做,如使用十六进制编辑器,但是perl可以很简单的输出,一行示例如下,

为了确认我们现在有了正确格式的文件,我们再次使用hexdump进行检查,并将其与之前的转储进行比较。

它与我们以前的有效载荷完全相同,但堆栈调整已经在开发阶段发生。我们现在已经完成了,但是我们有一个最后一步我们需要做的shellcode。

编码Shellcode

在我们的堆栈调整命令和有效负载本身都有空字符,我们需要删除。Msfencode再次来到我们的救援中,我们可以重新编码有效载荷,无空值。

我们现在可以将这个shellcode剪切并粘贴到我们的python exploit中。最后的漏洞看起来如下。

最终利用

我们来看看我们的Windows XP受害者。在链接中安装AT-TFTP v1.9的要求。确保您解除阻止任何防火墙提示以允许访问。因为这是一个分期的有效载荷,我们需要设置Metasploit来捕获传入的shell。然后它会发送第二个更大的缓冲区(769536字节),我们永远不会适合我们的漏洞利用本身。依次运行命令,

现在有趣的东西,我们运行命令,

不用说你应该把自己的IP值,但它应该保持格式python

一切顺利,这是结果…

使用python重写metasploit的exploit

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: