インターフェイスの自動化、パケット キャプチャ、プロキシ アーティファクト - Mitmproxy プロキシ構成の詳細なチュートリアル

Mitmproxy プロキシ構成とインターフェイスの暗号化と復号化の詳細なチュートリアル

ここに画像の説明を挿入します

公式サイト:イベントフックと API (mitmproxy.org)

このセクションのカタログには以下が表示されます。

クライアントのダウンロード

方法 1

https://mitmproxy.org/downloads/

方法 2

mitmproxy をインストールする

pip install mitmproxy

mitmproxy異なる起動モードを持つ 3 つのコマンドが提供されています。

mitmproxyコマンド ライン インターフェイスを提供します (このコマンドは Windows をサポートしません)。
mitmdump単純な端末出力を提供します。
mitmwebブラウザインターフェイスを提供します。

mitmproxy -p 指定的端口号
mitmdump -p 指定的端口号
mitmweb -p 指定的端口号

共通パラメータ

-h 帮助信息
-p 修改监听端口
-s 加载 python 脚本

証明書のインストール

注: インストールする前に、まずプロキシ接続を有効にする必要があります。

インストール用にプロキシを構成するか、mitmproxy のインストール ディレクトリに直接移動してインストール用の証明書を取得する必要があります。

ここに画像の説明を挿入します

mitmproxy に接続した後、電話またはデバイスはプロキシを設定する必要があります。http://mitm.it/ と入力して証明書をインストールしてください。

http://mitm.it/

mitmproxy プロキシ iOS デバイス

サービスを開始する

ポート8899を指定してサービスを開始します

mitmdump -p 8899

ここに画像の説明を挿入します

iOSデバイス構成エージェント

コンピューターと iOS デバイスが同じ LAN に接続されていることを確認してください。

1. コンピュータのIPを取得する

  • ipconfig (Windows)
    ifconfig (Mac/Linux)
    

2. iOS デバイスでエージェントを構成し、iOS デバイスで設定アプリケーションを開きます。

3. [Wi-Fi] をクリックし、接続している Wi-Fi ネットワークを見つけます。ネットワーク名の横にある「i」アイコンをクリックすると、ネットワークの詳細が表示されます。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

4. ネットワークの詳細ページで、下にスクロールして「HTTP プロキシ」オプションを見つけます。「手動」を選択します。

5. [サーバー] フィールドに mitmproxy が実行されているコンピュータの IP アドレスを入力し、[ポート] フィールドに mitmproxy のリスニング ポートを入力します (デフォルトは 8080)。

ここに画像の説明を挿入します

6. 設定を保存し、設定アプリケーションを閉じます。

7. ブラウザに入力してhttp://mitm.it/証明書をインストールします。

ここに画像の説明を挿入します

8. 証明書の信頼設定に移動します: [設定] -> [一般] -> [VPN とデバイス管理] -> [mitmproxy] をクリックしてインストールします。

ここに画像の説明を挿入します

9. インストール成功

ここに画像の説明を挿入します

10. 証明書を信頼します。[一般] -> [このマシンについて] -> [証明書の信頼設定] にプルダウンし、[mitmproxy] を見つけてクリックして信頼を切り替えます。

ここに画像の説明を挿入します

これで、iOS デバイスは mitmproxy を通過し、すべてのネットワーク要求と応答は mitmproxy 上で傍受および変更できるようになります。これらの要求と応答は、mitmproxy のインターフェイスで表示および操作できます。

Android は通常、セキュリティ - 暗号化と資格情報 - ユーザーに証明書をインストールしますが、場合によってはさらに多くの WLAN 設定をインストールします。

ここに画像の説明を挿入します

エラーを報告する

クライアントの TLS ハンドシェイクが失敗しました。クライアントと mitmproxy は、使用する TLS バージョンについて合意できません。mitmproxy の tls_version_client_min オプションを調整する必要がある場合があります。

次のコマンドを使用してください。無視してください。今のところ影響はありません。

mitmdump -p 8899  --set tls_version_client_min=SSL3

Webスクレイピングを使用する

mitmweb -p 8899

ここに画像の説明を挿入します

コードフィルタリング

コードのリスト mitmproxt_demo01.py

# -*- coding: utf-8 -*-
'''
@Time : 2023/8/7 18:16
@Email : [email protected]
@公众号 : 梦无矶的测试开发之路
@File : mitmproxy示列.py
'''
__author__ = "梦无矶小仔"

import mitmproxy
from mitmproxy import ctx,http



class Counter:
    def __init__(self):
        pass

    # 所有发出的请求数据包都会被这个方法所处理
    def request(self, flow: mitmproxy.http.HTTPFlow):
        # 获取请求对象
        request = flow.request
        # 实例化输出类
        info = ctx.log.info
        # 打印请求的url
        info(request.url)
        # 打印请求方法
        info(request.method)
        # 打印host头
        info(request.host)
        # 打印请求端口
        info(str(request.port))
        # 打印所有请求头部
        info(str(request.headers))
        # 打印cookie头
        info(str(request.cookies))
        print("请求的参数data----------------------")
        info(str(request.data))
        print("请求的参数data----------------------")

    # 所有服务器响应的数据包都会被这个方法处理
    def response(self, flow: mitmproxy.http.HTTPFlow):
        # 获取响应对象
        response = flow.response
        # 实例化输出类
        info = ctx.log.info
        # 打印响应码
        info(str(response.status_code))
        # 打印所有头部
        info(str(response.headers))
        # 打印cookie头部
        info(str(response.cookies))
        # 打印响应报文内容
        info(str(response.text))


addons = [
    Counter()
]

スクリプト経由で開始

 mitmweb -p 8899 -s .\mitmproxy_demo01.py

暗号化と復号化

Python Windowsで AES を使用する場合は、pycryptodome モジュールをインストールする必要があります

pip install pycryptodome 

Python Linuxで AES を使用する場合は、pycrypto モジュールをインストールする必要があります

pip install pycrypto 

文字置換

aaa = '151691566822749_NEW_RDA_LOADOKaRgN'

ここに画像の説明を挿入します

これはSOHACCIC コード 1 に対応します。

# 所以可以这样进行替换
repl_aaa = aaa.replace(chr(1), " ")

ここに画像の説明を挿入します

文字列をバイナリに変換する

string = "Hello World"
binary = " ".join(format(ord(char), '08b') for char in string)
print(binary)

このコードを実行すると、01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100「Hello World」のバイナリ表現である が出力されます。

この例では、format(ord(char), '08b')各文字が 8 ビットのバイナリ文字列に変換され、join()関数を使用して各文字のバイナリ表現がスペースで区切られ、文字列全体のバイナリ表現を含む文字列が生成されます。

文字列からバイトへ

Python では、stringencode()メソッドを使用して、文字列をバイト (バイト) 型のデータに変換できます。文字エンコーディングを指定して、バイト表現で文字をエンコードする方法を決定できます。

以下は、文字列をバイトに変換する方法を示すサンプル コードです。

string = "Hello World"
bytes_data = string.encode('utf-8')
print(bytes_data)

このコードを実行するとb'Hello World'、文字列「Hello World」のバイト表現である が出力されます。

この例では、encode()メソッドは UTF-8 エンコーディングを使用して文字列をバイトに変換します。デフォルトでは、Python は文字エンコーディングとして UTF-8 を使用します。特定のニーズに応じて、「utf-16」、「latin-1」などの他の文字エンコード方法を選択できます。

なお、バイト型データはbで始まる文字列で表され、通常の文字列ではなくバイトデータであることを示しています。

実践的なデモンストレーション

aaa = '151691566822749_NEW_RDA_LOADOKaRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg0bbecb50d88e230df396fb6a53532280;'

binary = aaa.encode('utf-8')

print(binary)

出力

b'1\x015\x011691566822749\x01_NEW_RDA_LOADOK\x01aRgNxBJEpvYo1FdZQu9d85ExmqB97SpGUPvMmSYZXIauvSu9IgrpJSK5PAs4DMMNONB2daybYwrdCjCWKUOPUb1KTPyiHYfo9EVg5jMXkDMT7xebOYk0x0loFWsSEKguYmVe5U2jAc5EDPn8nIBLTxGXSeL/S6ZbXJhEszrI1FJ/CYxjZfQKVQhMENxsN8O/yhK2AgXQe4CDQT3+sxlLCFw5XcG4IGoD8kyyHbpulwjOQW98orOf2DBZkHjxFqjFo6G/7SVZ3wr0ER05uAopJpc8XBJSTfhNAzKT2JwatMG7beFxUzrBeuNJp7MHKJUUYjfUNeqhGF1dKaya1HdOxfUoWuCMUV0XMroNItipbLj0ZX5ZfftN/eskoZjDvYDvU0Oyt6xC7RZVIOLbyOlmWQ8Pl7NHzqFeVUqViVyGIaA8HsivAw+lStBo+W6qDCbkgAAg6Z+8fsiSjgDSgpLJSwBqO75HzRUDRHhHc9/Wqqdeq2pE6PnlrJ6XWrXooBwg\x01\x010bbecb50d88e230df396fb6a53532280\x01;'

一見何のことはないように見えますが、実際の暗号化・復号化ではこの方法で一連の操作を行う必要があり、この工程が基本操作と言えます。

復号化コード

これには関連する秘密が含まれるため、表示できません。このインターフェイスが暗号化されている場合は、対応する秘密キーが存在します。

インターフェイスの作成後にこの部分を復号化する必要がある場合は、対応する開発者を見つけて秘密キーを提供してください。

この秘密キーは、django settings.py ファイルの SECRET_KEY フィールドに似ています。

おすすめ

転載: blog.csdn.net/qq_46158060/article/details/132430380