如何改写msf的module为独立的exp?

本文详述如何将Metasploit Framework中的attftp_long_filename模块转化为独立的Python EXP脚本,涵盖关键点解析、payload生成、堆栈调整及UDP发送exploit的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何改写msf的module为独立的exp?
1
我们这次要用的模块名称为attftp_long_filename.rb,位于/usr/share/metasploit-framework/modules/exploits/windows/tftp/attftp_long_filename.rb,在接下来的时间中,我们要把它单独写成一个python脚本。
模块完整的代码:
在这里插入图片描述
1.1
关键点
我们接下来会解释代码中的一些关键部分,来帮助我们更好的理解。
1.1.1
Default Exit Options
在这里插入图片描述
如上所述,默认的退出函数是process。这是shellcode在运行后退出时的函数,通常会影响我们打exp后程序的稳定性。所以当我们修改用于适应特定情况的shellcode时,应该注意这个值。
1.1.2
Payload
在这里插入图片描述
payload是我们需要检查的关键方面之一。 space表明我们有足够的210个字节的空间用于我们的payload。任何更大的空间我们可能会遇到崩溃或截断问题。 badchars表示可能影响我们漏洞利用的字节。我们需要确保这些字符不在我们的shellcode中,一般都是空字符’0x00’。最后我们看到stackadjustment(堆栈调整),因为我们在space中受到限制,我们需要利用staged payload。我们正在做的只是发送轻量的第一条指令,该指令旨在反向连接到我们并获得payload的主体,这些指令一般不会恰好符合要求。因此,我们需要将堆栈指针调整回3500字节,这样它就有空间实际写入有效负载而不会覆盖自身。
1.1.3
Targets
在这里插入图片描述
Metasploit针对许多漏洞利用有各种各样的目标,实际上每个操作系统的返回地址都很多。 因为它们经常使用系统dll,所以这些地址不会在计算机之间更改,并确保兼容性。在我们的例子中,我们希望使用由c0re,Windows XP SP3返回的地址。
1.1.4
The Exploit
在这里插入图片描述
剩下的主要部分就是exploit本身,我们一行行分析。
在这里插入图片描述
这意味着攻击将通过UDP数据包发送。这一行连接将目标设置为Metasploit中的值,如RHOST和RPORT。
在这里插入图片描述
exploit以两个十六进制值’0x00’和’0x02’开始,然后是一系列NOP。 根据LAN IP的长度,nops的长度可变,但总共25个。例如,'192.168.1.2’的LHOST值的长度为11,而IP地址’192.168.100.123’的长度为15.
在这里插入图片描述
该行对Metasploit中指定的payload进行编码,并以所需格式对其进行编码。鉴于可用空间和目标操作系统,Metasploit将在内部确定哪些payload是合适的,并且可以使用’show payloads’命令查看它们。当我们说“必需的格式”时,它意味着它将在漏洞利用的早期过滤掉指定的坏字符。
在这里插入图片描述
此命令将目标返回地址附加到exploit字符串中。它在这里作为变量呈现,因为在Metasploit中你可以指定不同的操作系统,但就我们的目的而言,它只是Windows XP SP3的返回地址。 包’V’命令表示它需要以小端格式打包,这是x86处理器所必需的。
在这里插入图片描述
转换为命令,这是指示esp寄存器添加40个字节并返回。为了准确利用exploit,所以定位esp是必须的。
在这里插入图片描述
这是我们利用的最后一个字符串,它以AT-TFTP期望的格式终止数据流
在这里插入图片描述
这指示Metasploit通过UDP发送exploit
在这里插入图片描述
这表示它已完成UDP套接字

2
调整每一部分
让我们总结一下我们在自己的exploit中需要实现的目标,以便在上述部分的基础上开展工作。
1.根据LHOST的大小创建一个适当大小的NOP区域
2.指定返回地址并以小端格式打包
3.生成适合我们情况的shellcode(LHOST等)
4.对shellcode执行堆栈调整,以便我们的第二个stage可以正确编写
5.使用Python通过UDP发送exploit
2.1
让我们从一个非常简单的UDP框架开始,用于向目标发送信息。
在这里插入图片描述
从这里开始,很多内容都直接引用ruby。包括创建适当大小的NOP和返回地址,以及我们知道将用于设置exploit本身的信息。
在这里插入图片描述
现在我们已经获得了下一步所需的已知信息,并考虑了我们的staged payload的堆栈调整。
2.2
调整堆栈
首先,我们需要将payload转储到原始hex文件中以进行进一步操作。在这种情况下,我们的有效载荷将是meterpreter shell windows / meterpreter / reverse_nonx_tcp,因为它的代码占用空间特别小。 我们使用命令,
在这里插入图片描述
如果我们想确认已成功输出到文件,我们可以使用该命令
在这里插入图片描述
接下来我们需要找出我们实际需要使用什么命令来调整堆栈-3500字节。这可以使用位于/usr/share/metasploit-framework/tools/nasm_shell.rb的Metasploit工具nasm_shell.rb来完成。 输入汇编命令将提供该命令的十六进制机器指令。 由于我们要从堆栈指针中减去3500(十六进制0xDAC),我们执行以下操作,
在这里插入图片描述
这告诉我们需要使用81EC AC0D 0000命令来实现3500的调整。我们将其输出到原始的hex文件中。 我们可以使用十六进制编辑器,也可以使用perl的快速一行示例如下,
在这里插入图片描述
我们现在有两个原始文件stackadj和我们的payload。 我们希望将它们组合在一起,这是一个简单的cat命令,
在这里插入图片描述
为了确认我们现在有正确格式的文件,我们再次使用hexdump检查
在这里插入图片描述
它与我们之前的payload完全相同,但堆栈调整是在漏洞利用开始时进行的。我们现在差不多完成了,但我们需要对shellcode做最后一步的调整。
2.3
编码shellcode
在我们的堆栈调整命令和payload本身中都有我们需要删除的空字符。我们可以通过
msfencode重新编码payload而不会出现空值。
在这里插入图片描述
我们现在可以将这个shellcode剪切并粘贴到我们的python脚本中。最终的exp看起来如下所示。
在这里插入图片描述

3
运行脚本
让我们对我们的Windows XP靶机进行测试。确保关闭任何防火墙提示以允许访问 因为这是staged payload,我们需要设置Metasploit来捕获传入的shell,然后它将发送第二个更大的缓冲区(769536字节)。 顺序执行命令
在这里插入图片描述
现在有趣的事情来了,我们不使用msf,使用刚才写的python
在这里插入图片描述
结果如下
在这里插入图片描述

译者注:msfencode和msfpayload已经被msfvenom代替,如果小伙伴想动手实践的需要注意截图中涉及的相关命令和参数有一部分已经不再适用。
原文链接:https://netsec.ws/?p=262

可以使用Metasploit Framework (MSF) 来实现类似的功能。以下是一种可能的方法: 1. **使用 `traceroute` 模块**:Metasploit 提供了一个 `auxiliary/scanner/traceroute` 模块来执行 traceroute 操作。 2. **使用 `nmap` 进行端口扫描**:虽然 Metasploit 自带一些扫描模块,但你可以调用外部的 `nmap` 工具来进行端口扫描。 ### 示例 MSF 脚本 以下是一个示例 MSF 脚本,展示了如何结合 `traceroute` 和 `nmap` 来实现类似的功能: ```ruby require 'msf/core' require 'msf/core/auxiliary/report' class MetasploitModule < Msf::Auxiliary include Msf::Exploit::Remote::Tcp include Msf::Auxiliary::Report include Msf::Auxiliary::Scanner def initialize(info = {}) super(update_info(info, 'Name' => 'Traceroute and Port Filtering Detection', 'Description' => %q{ This module performs a traceroute to a target IP and checks for port filtering on each hop using nmap. }, 'Author' => ['Your Name'], 'License' => MSF_LICENSE )) register_options( [ OptString.new('TARGET_IP', [true, 'The target IP address or hostname']), OptString.new('TARGET_PORT', [true, 'The target port number to check']) ] ) end def run_host(ip) target_ip = datastore['TARGET_IP'] target_port = datastore['TARGET_PORT'] print_status("Performing traceroute to #{target_ip}") traceroute_results = client.core.use('auxiliary', 'scanner/traceroute').run_single('RHOSTS' => target_ip) unless traceroute_results.include?('Hosts') print_error("Failed to perform traceroute") return end hops = traceroute_results['Hosts'].map { |h| h['Address'] } hops.each_cons(2) do |hop1, hop2| print_status("Checking for filtering after hop #{hop1} to #{hop2}") nmap_command = "nmap -p #{target_port} #{hop2}" nmap_output = `#{nmap_command}` if nmap_output =~ /filtered/ print_good("Possible filtering detected between #{hop1} and #{hop2}") else print_status("No filtering detected between #{hop1} and #{hop2}") end end end end ``` ### 说明 1. **初始化模块**:定义模块的基本信息和所需选项。 2. **运行主函数**:执行 traceroute 并处理结果。 3. **检查每一对跳点**:使用 `nmap` 检查目标端口的状态,并判断是否存在过滤。 ### 使用方法 1. 将上述脚本保存为一个 `.rb` 文件,例如 `traceroute_filtering.rb`。 2. 将该文件放置在 Metasploit 的 `modules/auxiliary` 目录下。 3. 启动 Metasploit 控制台并加载模块: ```sh use auxiliary/traceroute_filtering set TARGET_IP www.baidu.com set TARGET_PORT 22 run ``` 这样就可以使用 Metasploit 实现类似的功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值