# 任务目标
使用 proxychain 代理主机 A 中的二进制程序 binary.exe 所有流量,并将其转发到中间人服务器 B,在 B 中使用透明代理模式,截获 binary.exe 实际与远程服务器通信的所有流量数据。
# 使用 proxychain 代理流量
- 
找到目前运行的相关进程 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16# 查找相关用户,并进行切换 
 cat /etc/passwd
 sudo -i -u username
 # 列出所有进程
 ps aux
 # 列出特定用户的进程
 ps -u username
 # 列出指定pid的具体命令
 ps -p <PID> -o cmd ww
 # htop也可以辅助查看进程信息
 sudo apt-get install htop
 htop找到 userA 运行的进程 binary.exe 1 74887 userA /var/lib/xxx/binary.exe 
- 
使用 socks5 代理 SOCKS5 代理是一个通用代理协议,它可以处理任何类型的流量,包括 TCP 和 UDP。因此,SOCKS5 可以代理 HTTP、HTTPS、FTP、SMTP 等各种协议。 其工作在会话层(OSI 模型第 5 层) 使用 A、B 两台机器进行代理转发,其中 A 为本地主机,ip 为 1.1.1.1,B 为中间人服务器,ip 为 2.2.2.2 机器 A: - 
下载 proxychains 1 
 2sudo apt update 
 sudo apt install proxychains4
- 
配置 proxychains 的 socks5 代理,编辑 /etc/proxychains4.conf文件1 
 2# 最后一行添加代理 
 socks5 2.2.2.2 8080proxychain 将代理 socks5 协议,并将所有的 socks5 流量转发到 2.2.2.2:8080。 
- 
复制 B 中的 mitm 自签名证书(下载 mitmproxy 后,自签名证书存储在~/.mitmproxy/ 中),更新到系统证书库 1 
 2
 3
 4
 5scp B:/xxx/.mitmproxy/mitmproxy-ca-cert.pem ./mitmproxy-ca-cert.pem 
 # 添加到系统证书中,ubuntu中需要更改后缀为.crt
 sudo cp ./mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt
 # 更新证书
 sudo update-ca-certificates
- 
开启 proxychain 代理,监控相关程序 1 sudo -u [username] proxychains4 yourcmd 监控程序的流量会被转发到 2.2.2.2:8080 端口 
 机器 B: - 
下载 mitmproxy 1 pip install mitmproxy 下载成功会得到三个工具 mitmproxy、mitmweb、mitmdump
- 
使用 mitmdump 开启 MITM 透明代理,并记录流量 1 mitmdump -p 8080 --mode socks5 -w ./data.mdump --set block_global=false -p指定监听的端口号--mode指定代理模式,这里选 socks5-w监听流量存储位置--set block_global=false监听来自其他主机转发的流量,所以这里设置为 false,允许处理非本地流量
 
- 
# 同一台机器中进行流量代理
- 
安装修改 proxychain 1 
 2
 3sudo apt-get install proxychains4 
 vi /etc/proxychains.conf在文件最后一行添加 socks5 代理 1 socks5 127.0.0.1 7888 
- 
启动 mitmproxy 透明代理 1 mitmdump -p 7888 --mode socks5 -w ./data.mdump 
- 
启动 proxychain 代理转发 1 proxychains4 cmd 
# 监控结果查看
- 
使用 mitmweb 查看 1 
 2打开中间人工具的网页UI,导入指定文件查看 
 mitmweb
- 
编写解析脚本 python 解析脚本 parse-mitm.py示例1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20from mitmproxy.io import FlowReader 
 from mitmproxy import http
 from mitmproxy import ctx
 import sys
 def parse_dump(file_path):
 with open(file_path, "rb") as f:
 reader = FlowReader(f)
 for flow in reader.stream():
 if isinstance(flow, http.HTTPFlow):
 print(f"Request URL: {flow.request.pretty_url}")
 print(f"Request Headers: {flow.request.headers}")
 print(f"Request Body: {flow.request.text}")
 print(f"Response Status Code: {flow.response.status_code}")
 print(f"Response Headers: {flow.response.headers}")
 print(f"Response Body: {flow.response.text}")
 print("-" * 50)
 file = sys.argv[1]
 parse_dump(file)执行脚本 1 python3 parse-mitm.py data.py 
Mostly I just kill time," he said, "and it dies hard."
——Raymond Chandler 《The Long Goodbye》
我大抵只是消磨时间,时间却过的很慢。
——钱德勒《漫长的告别》
