在渗透测试中,通过漏洞利用或反弹 Shell 获取的初始会话,往往是功能有限的非交互式 Shell。为了提高操作效率和稳定性,我们通常需要将其升级为半交互式或全交互式 Shell。
国内很多打靶教程和文章往往没有详细介绍如何升级为完整的交互式 Shell,相关资料也相对较少。
本教程将详细介绍这三种 Shell 的特点,并提供升级 Shell 的具体操作方法。
三种 Shell 的区别对比
非交互式 Shell
- 功能受限:仅支持基础的命令执行。
- 无实时反馈:无法与终端实时交互,命令必须完整输入后执行。
- 无快捷键支持:
Tab
补全、Ctrl + C
等功能不可用。 - TTY 缺失:不具备伪终端支持,某些工具(如
sudo
、vim
、top
)无法运行。 - 交互工具不可用:需要交互的程序(如
passwd
)会运行失败或卡住。
半交互式 Shell
- 部分交互能力:支持光标移动、Tab 补全等基本功能。
- 较高的可靠性:命令执行更流畅,不容易因误操作终止会话。
- 快捷键支持有限:如
Ctrl + Z
挂起有效,但Ctrl + C
可能仍会导致会话中断。 - TTY 支持增强:可运行部分 TTY 依赖的工具,但完整支持有限。
全交互式 Shell
- 完全交互能力:类似于通过 SSH 连接的终端,支持所有快捷键操作(如
Ctrl + C
、Tab
)。 - 光标控制功能:允许上下翻阅历史命令,左右移动光标修改命令。
- 完整的 TTY 支持:可以运行所有依赖 TTY 的工具(如
vim
、sudo
、top
)。 - 颜色显示支持:能正确显示命令行颜色。
特性 | 非交互式 Shell | 半交互式 Shell | 全交互式 Shell |
---|---|---|---|
交互能力 | 无 | 部分支持 | 完全支持 |
快捷键支持 | 不支持 | 支持 Ctrl + Z | 支持所有快捷键 |
Tab 补全 | 不支持 | 支持 | 支持 |
TTY 支持 | 无 | 部分支持 | 完全支持 |
适用工具 | 基本命令执行 | 一些 TTY 依赖工具 | 所有 TTY 依赖工具 |
FULL TTY
在阅读了许多国外关于升级 Shell 的文章后,我发现,最终获得的全交互式 Shell 的规范表述是 “Full TTY”,这也是本章节标题的来源。
1. 获取半交互式Shell
方法1:最可靠的方式
使用/usr/bin/script
将Shell转化为半交互式:
script -qc /bin/bash /dev/null
- 优点:简单可靠,不依赖外部环境。
- 适用场景:靶机环境具备
script
命令。
方法2:利用Python
Python内置的pty
模块可以生成伪终端:
python -c 'import pty; pty.spawn("/bin/bash")'
# python3 -c 'import pty; pty.spawn("/bin/bash")'
- 优点:方便快捷,支持大多数系统。
- 适用场景:靶机已安装Python或Python3。
2. 升级为全交互式Shell
Step 1:获取半交互式Shell
通过python
或script
命令获取半交互式Shell。
Step 2:将Shell挂到后台
使用快捷键将当前Shell会话挂起:
Ctrl + Z
Step 3:获取终端大小(Rows和Columns)
在攻击者主机上运行以下命令,记录终端的行数和列数:
stty -a | head -n1 | cut -d ';' -f 2-3 | cut -b2- | sed 's/; /\n/'
Step 4:恢复前台Shell
运行以下命令配置伪终端的模式并恢复会话:
stty raw -echo; fg
Step 5:设置终端大小
用之前记录的Rows和Columns替换下面命令中的ROWS
和COLS
:
stty rows ROWS cols COLS
Step 6:增强终端体验
设置颜色支持:
export TERM=xterm-256color
重新加载Bash配置以生效:
exec /bin/bash
# 或者 source /etc/skel/.bashrc
番外:利用rlwrap增强 Shell 体验
最近看大神的文章时,偶然发现了rlwrap
这一工具,简单来说,rlwrap
是一种终端增强工具,能为反弹 Shell 提供以下功能:
- 支持 命令行编辑。
- 提供 Tab 补全 和 历史命令功能。
- 改善非交互式 Shell 的输入体验。
使用方法
在攻击者机器上运行以下命令启动监听:
rlwrap -cAr nc -lnvp 4444
- 说明:通过
rlwrap
为 Netcat 提供输入增强功能。 - 适用场景:攻击者主机安装了
rlwrap
。
rlwrap 的局限性
尽管 rlwrap
提升了非交互 Shell 的使用体验,但它并没有为 Shell 提供真正的伪终端(PTY),其增强仅在客户端生效,不改变服务器端的 Shell 本质。仍无法满足全交互 Shell 的完整特性(如伪终端支持)。
例如,其运行 sudo
、vim
等依赖TTY 的工具可能会报错:no tty present and no askpass program specified
。
总结
本文介绍了不同类型 Shell 的特点,以及如何在渗透测试中将初始的非交互式 Shell 逐步升级为全交互式 Shell。通过对国内外资料的对比,发现许多教程并未详细涉及完整交互式 Shell 的升级过程,而本教程正是为了弥补这一空白。感谢你读到这里,希望这篇文章对你有所帮助!
标签:TTY,Shell,rlwrap,支持,升级,终端,交互式 From: https://blog.csdn.net/2301_79518550/article/details/144730328