# 任务目标

使用 proxychain 代理主机 A 中的二进制程序 binary.exe 所有流量,并将其转发到中间人服务器 B,在 B 中使用透明代理模式,截获 binary.exe 实际与远程服务器通信的所有流量数据。

# 使用 proxychain 代理流量

  1. 找到目前运行的相关进程

    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
  2. 使用 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
      2
      sudo apt update
      sudo apt install proxychains4
    • 配置 proxychains 的 socks5 代理,编辑 /etc/proxychains4.conf 文件

      1
      2
      # 最后一行添加代理
      socks5 2.2.2.2 8080

      proxychain 将代理 socks5 协议,并将所有的 socks5 流量转发到 2.2.2.2:8080。

    • 复制 B 中的 mitm 自签名证书(下载 mitmproxy 后,自签名证书存储在~/.mitmproxy/ 中),更新到系统证书库

      1
      2
      3
      4
      5
      scp 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

      下载成功会得到三个工具 mitmproxymitmwebmitmdump

    • 使用 mitmdump 开启 MITM 透明代理,并记录流量

      1
      mitmdump -p 8080 --mode socks5 -w ./data.mdump --set block_global=false

      -p 指定监听的端口号

      --mode 指定代理模式,这里选 socks5

      -w 监听流量存储位置

      --set block_global=false 监听来自其他主机转发的流量,所以这里设置为 false,允许处理非本地流量

# 同一台机器中进行流量代理

  1. 安装修改 proxychain

    1
    2
    3
    sudo apt-get install proxychains4

    vi /etc/proxychains.conf

    在文件最后一行添加 socks5 代理

    1
    socks5 127.0.0.1 7888
  2. 启动 mitmproxy 透明代理

    1
    mitmdump -p 7888 --mode socks5 -w ./data.mdump
  3. 启动 proxychain 代理转发

    1
    proxychains4 cmd

# 监控结果查看

  1. 使用 mitmweb 查看

    1
    2
    # 打开中间人工具的网页UI,导入指定文件查看
    mitmweb
  2. 编写解析脚本

    python 解析脚本 parse-mitm.py 示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    from 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》

我大抵只是消磨时间,时间却过的很慢。

——钱德勒《漫长的告别》

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

chaihj15 微信支付

微信支付

chaihj15 支付宝

支付宝