如何在Docker容器中使用主机的IP?

3

我在服务器上运行一个metasploitable2的docker容器。以下是创建该docker容器的docker命令:

docker run --name victumb-it tleemcjr/metasploitable2:latest sh -c "/bin/services.sh && bash" --security-opt apparmor=unconfined -privileged true --network host

我随后在一台不同的服务器上运行了一个利用程序,针对Docker镜像的Kali Linux容器,但是它失败了。

use exploit/unix/ftp/vsftpd_234_backdoor
msf5 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOST 134.122.105.88
RHOST => 134.122.105.88
msf5 exploit(unix/ftp/vsftpd_234_backdoor) > run

[-] 134.122.105.88:21 - Exploit failed [unreachable]: Rex::ConnectionTimeout The connection timed out (134.122.105.88:21).

我对这个漏洞为什么失败感到困惑。由于 --network host,我认为流量会被镜像到容器中。有没有办法修复这个网络错误,使得攻击成功?

这是我大概遵循的教程:https://medium.com/cyberdefendersprogram/kali-linux-metasploit-getting-started-with-pen-testing-89d28944097b

1个回答

2

因为选项 --network host 应该放在镜像之前

用法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

应该这样使用:

docker run --name victumb-it --network host --security-opt apparmor=unconfined --privileged tleemcjr/metasploitable2:latest sh -c "/bin/services.sh && bash"

这里的sh是命令,其后的所有内容都是传递给sh命令的参数。

docker run选项,如--network--security-opt--privileged,都放在镜像之前。


如果你运行docker inspect container_id,你会看到在Args键中传递给命令的参数。这意味着它们不是docker run的参数。


抱歉,您的解决方案出现错误: 无法在本地找到图像“true:latest” Docker:守护程序的错误响应:拒绝对资源的请求访问:拒绝:true的拉取访问被拒绝,存储库不存在或可能需要“docker login”。 - Lyra Orwell
那是因为--privileged标志不带任何参数,所以true被视为镜像名称。我会编辑,您只需要在--privileged之后删除true即可。 - Mickael B.
我再次尝试了您的解决方案,但攻击仍然无效。我认为问题在于攻击到达了服务器(主机)并失败了。它从未到达容器。 - Lyra Orwell
我不知道使用的图像是什么。但你问如何从容器连接到主机,这就是我的解决方案所做的。现在也许你想从主机连接到容器,在这种情况下,你可能想要使用 -p-P 标志暴露或发布容器端口。 - Mickael B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接