我正在为安全课程研究漏洞。目标是在 Linux 虚拟机中获取 root shell。到目前为止,我可以写入 /etc/passwd 并将 root 的密码更改为任意字符串。
现在,我想使用 su 来获取 root shell。由于我的漏洞利用必须自动化,因此它无法提示输入密码,并且虚拟机没有安装 expect。有人知道我如何将密码传递给 su 命令吗?或者有更好的方法吗?
答案1
自动化此类输入的最佳方式是使用expect
或更好的pexpect
。大多数服务器都带有 python,至少带有现代发行版。
首先,您说您的虚拟机尚未expect
安装?我不确定这有什么关系。您无法在本地帐户下安装/执行某些操作,这有什么原因吗?
下一个考虑因素是,为什么你甚至必须使用passwd
??? 你也可以通过替换 中指定的哈希来更改密码/etc/shadow
。显然,你需要先正确地预生成哈希,但只要你使用受支持的哈希,它就应该可以按预期工作。现在你将如何编写这样的操作脚本,这是你需要解决的练习。
我还想提一下,passwd
它不会从 STDIN 读取输入。如果我没记错的话,它是从 tty 读取的。因此,没有花哨的组合echo
可以sleep
工作。但是,使用 HEREDOC 是可能的,但假设系统响应足够快。您可能能够将其拆分并sleep
放在各个部分之间。我刚刚测试过,它在我的 Ubuntu 工作站上运行良好。
#!/bin/bash
passwd root <<'EOF'
newpassword
newpassword
EOF
答案2
您的漏洞还可以写入组文件,并使当前用户成为“wheel”组的一部分(或任何可以使用sudo
密码运行命令的组)。然后您(或任何其他用户)就可以使用sudo su root
密码运行命令。
运行visudo
应该会给你提供一些关于机器上‘轮子’组设置的指导。
需要澄清的是:一旦用户成为 wheel 组的一部分,他们就可以运行 sudo 命令而不需要密码。