1. はじめに
HTTP プロキシは、Web 侵入において非常に重要な位置を占めています。この分野には、burp suite、Fiddler、重要なアーティファクト、および長い歴史を持つパロ、Webscarab など、実際には、すべての Web 脆弱性スキャナーには http プロキシの機能があります。
今日紹介するmitmproxyプロキシツールは非常に優れており、特にhttpsデータの傍受とそのスケーラビリティ、ブラブラ...
このツールを選んだ理由は、モバイルAPPの通信分析を行うためです。 http プロキシを使用するための基本的な条件は、多くの場合、会社のモバイル ネットワークがオフィス ネットワークから分離されている必要があることです。もちろん、ネットワーク共有を使用することもできます (あるいは、Xiaodu WiFi または 360 WiFi を購入することもできます)。 ) 孤立を解決します。 (数年前にモバイル通信の分析をしていたときに、ネットワークが分離され、ワイヤレス ネットワーク カードがないという恥ずかしい状況に遭遇したことを思い出します。)
私の選択は、vps 上に http プロキシを構築することです (vps を購入したばかりなので、 )、コマンドラインツールが必要なので、mitmproxyを選択しました(実際、プロキシの構築にもnginxを使用しました。現在は主に通信の確認に重点を置いています。熟練したら、 nginx-lua モジュールを使用してインターセプトを作成し、モジュールを書き換えることができるかもしれませんが、残念ながら nginx は https をサポートしていません。やりすぎです)。
2. mitmproxyの原理
mitmproxyはプロキシ、改ざん機能を持ったプロキシです。フォワードプロキシとトランスペアレントプロキシの2つのモードをサポートし、http通信とhttps通信をサポートします。
(フォワードプロキシ、リバースプロキシ、透過プロキシに関するポピュラーサイエンスの記事 http://z00w00.blog.51cto.com/515114/1031287 を読むことができます。とても分かりやすいです)
原理も紹介されていますmitmproxy 公式ウェブサイト、こちら 親切な人からの翻訳を添付します http://www.oschina.net/translate/how-mitmproxy-works
プロキシについてよく知っている学生は、これを見れば何が起こっているかを理解できます下の4枚の写真。
1. http フォワードプロキシ
2. https フォワードプロキシ
3. http 透過プロキシ
4. https 透過プロキシ
3. Mitmproxy のインストール
次に、このツールは Python で書かれており、たくさんあります。現在、すべてのツールは Python で書かれており、Python を知らないプログラマーは優れたプログラマーではありません。
Pythonはクロスプラットフォームなので、mitmproxyもクロスプラットフォームです。
次に、Linux (debian 7) でのインストールを例に挙げます。他のプラットフォームも非常に似ています (Mac にパッケージをインストールするには homebrew を使用するだけです)
1. Python を知っている場合は、まず Python 環境をインストールします。読む必要はありません
#python と python 依存関係パッケージ apt-get install build-essential python-dev python-setuptools#aptitude に似た優れた Python パッケージ マネージャーである pip をインストールします、apt-getwget https:// pypi.python.org/packages/source/p/ pip/pip-1.4.1.tar.gzpython setup.py install
2. mitmproxy依存パッケージをインストール
sudo pip install netlib pyopenssl pyasn1 urwid pil lxml flask#以下はオプションです(デコード用) sudo pip install pyamf protobuf #以下はオプションです(テスト用) sudo pip install names pathod countershape
3. mitmproxy をインストールします
sudo pip install mitmproxy
インストールが成功すると、/usr/local/bin/mitmproxy と /usr/local/bin/mitmdump という 2 つのツールが生成されます
私はオープンソースツールキラーなので、常に問題に遭遇します
インストール問題の解決策:
pip がインストールされている場合、pkg_resources.DistributionNotFound: が表示されます (この問題は、osx Mavericks のバージョンをアップグレードした直後に発生しました)。最初に pip を更新できます
sudo easy_install --upgrade distributionsudo easy_install --upgrade pip
IV. CA のインストール。証明書
https 証明書を取得するには、証明書認証の問題を解決する必要があるため、通信が行われるクライアントに証明書をインストールし、信頼されたルート証明書発行局として設定する必要があります。以下に 6 つのクライアントのインストール方法を説明します。
mitmproxy または mitmdump を初めて実行すると、
現在のディレクトリに ~/.mitmproxy フォルダーが生成されます。これが必要な証明書です。
mitmproxy-ca.pem 秘密鍵
mitmproxy-ca-cert.pem は Windows 以外のプラットフォームで使用されます
mitmproxy-ca-cert.p12 は Windows で使用されます
mitmproxy-ca-cert.cer と mitmproxy- ca-cert.pemは同じです、androidで使用します
1.Firefoxにインストール
設定-Advanced-Encryption-証明書の表示-インポート(mitmproxy-ca-cert.pem)-Webサイトを識別するためにこのCAを信頼します
2.chromeにインストール
設定-詳細設定-HTTPS/SSL-証明書の管理-信頼されたルート証明機関-mitmproxy-ca-cert.pemをインポート
2.osxにインストール
mitmproxy-ca-cert.pem をダブルクリックします - 常に信頼します
3. Windows 7 にインストールします
mitmproxy-ca-cert.p12-next-next-すべての証明書を次のストアに入れます-信頼されたルート証明書をダブルクリックします発行局
4.iOSにインストール
mitmproxy-ca-cert.pemをiPhoneのメールボックスに送信し、ブラウザ/メールの添付ファイルからアクセス
ダウンロード用にvpsに証明書を置きました
http://tanjiti .com/crt/mitmproxy-ca-cert.pem mitmproxy iOS
http://tanjiti.com/crt/mitmproxy-ca-cert.cer mitmproxy android
http://tanjiti.com/crt/mitmproxy-ca -cert.p12 windows
http://tanjiti.com/crt/PortSwigger.cer BurpSuite (burpsuite証明書、添付してください)
5. iOSシミュレータにインストール
git clone https://github.com / AdvTools/advtrustStore.gitcd AdvtrustStore/
Dani-Lee-2: AdvtrustStore Danqingdani $ Python ioscerttrustManager.py -a ~/iostools/ Subject = cn = mitmproxy, o = mitmproxyimport が iPhone /iPadsimulator v5.1 に認定されました [y/N] yImporting to /Users/danqingdani/Library/Application Support/iPhone Simulator/5.1/Library/Keychains/TrustStore.sqlite3 Certificate added
実際、上記の操作は ~/Library/Application の tsettings テーブルに証明書データを挿入します。 Support/iPhone Simulator/5.1/Library/Keychains/TrustStore.sqlite3 データベース
6. Android にインストール
sdcard のルート ディレクトリに mitmproxy-ca-cert.cer を置きます
設定 - セキュリティとプライバシー - ストレージから証明書をインストールを選択します
5.ツールの使い方
vpsにmitmproxyプロキシをインストールし、クライアントにもCA証明書をインストールして利用することができます。
ステップ1: vpsでmitmproxyを起動します
mitmproxy -b xxx.xxx.xxx (listenインターフェースを指定) -p xxx (ポートを指定)
案の定、私はオープンソースツールキラーで、エラーが発生します。走行中に報告されました。
実行中のエラー問題の解決策:
mitmproxy の実行時にエラーが報告されました:
エラー: mitmproxy には UTF コンソール環境が必要です。
LANG 環境変数を en_US.UTF-8 のようなものに設定します
最初に locale を実行して、現在のロケールを表示します。私の vps は POSIX 環境です
root@www:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE ="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
ここで必要なのは、en_US.UTF-8に変更することです
方法http://jrs-s.net/2010/11/18/setting-locale-to-utf-8-in-debian/
vim /etc/default/localeLANG=en_US.UTF-8 を参照してください。 gen #/etc/profile および /etc/bash.bashrc を編集し、export LANG=en_US.UTF-8echo "export LANG=en_US.UTF-8" >/etc/profileecho "export LANG=en_US.UTF-8" を追加します。 > /etc/bash.bashrc source /etc/profilesource /etc/bash.bashrc
ここでロケールを実行すると、言語が変更されていることがわかります
root@www:/# locale
LANG=en_US.UTF- 8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_ MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US .UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
その後、正常に実行できます!
第二ステップ: 選択します携帯電話、PC、ブラウザで http プロキシを使用するには
ステップ 3: クライアント アクセスを使用して、通信データを操作できるようになります
6. 一般的な操作
1. mitmproxy
最もよく使用されるものを紹介しましょう 変更リクエストを入力してリクエストを再生します
(1) 方向キーでリクエストを見つけます
(2) 黄色の矢印 >> で指定したリクエストを見つけたら、Enter を押してリクエストを入力します
(3 ) e を押してリクエストを入力します編集状態に入り、対応する青色のフォントを押して変更した部分を選択します。 クエリ、クエリ文字列、リクエスト ヘッダー、リクエスト メソッド、
(4)a 行を追加し、Tab キーで編集フィールドを切り替え、Enter キーを押して編集を開始し、esc で保存し、q で前のレベルに戻ります
(5) 変更後、r を押してリクエストを再生します。そして、変更結果を表示します
2. mitmdump
忘れないでください。mitmproxy には、mitmproxy の非対話型バージョンである mitmdump (tcpdump によく似ています) と呼ばれる内向的なツインもあります。通信パケットは非リアルタイムで処理できます。
mitmproxyでwを押すと通信データを指定したファイルに保存し、mitmdumpで操作できます。次に、mitmproxy でキャプチャしたデータパケットから、Weibo からのデータパケットをフィルタリングして、データパケットを再生する例を簡単に紹介します (実際には、データパケットを変更して再生することもできます)
-n は、しないという意味です。プロキシを有効にする、-r はファイルからデータ パケットを読み取ることを意味し、-w はデータ パケットをファイルに保存することを意味し、-c はクライアント要求パケットを再生することを意味します
mitmdump -nr all.data -w weibo.data "~u weibo"
mitmdump -nc weibo.data[replay] POST http://api.weibo.cn/2/client/addlog_batch?s=2edc0cfa7&gsid=4ubed3V0QehBa8KoNp4AA75J&c=android&wm=20005_0002&ua=Xiaomi-MI+2S__weibo__4。 0.1 __android__android4.1.1 &oldwm= 9975_0001&from=1040195010&skin=default&i=8764056d2&isgzip=&lang=zh_CN
3. mitmproxy API
オープンソース精神の最も優れている点は、専門家が提供するさまざまな優れたツールを使用して構築できることです。子供の頃に積み木で遊んだように、自分にぴったりの武器。
mitmproxy は、拡張機能を呼び出すための libmproxy を提供します。
libmproxy の詳細な説明を確認して、主要な API インターフェイス呼び出しを理解できます
pydoc libmproxy
公式 Web サイトでは、データ パケットを操作するためのスクリプトを自分で作成する例が示されています。非常に簡単で、誰でも理解できます
。以下の通り レスポンスパッケージにカスタムヘッダーを追加することです
def response(context, flow): flow.response.headers["newheader"] = ["foo"]
このスクリプトが使えますin mitmdump
-s は、データパケットを処理するためにカスタムスクリプトを読み取ることを意味します
mitmdump -ns example/add_header.py -r infile -w outfile
わかりました、それだけです。
7. 通信を希望します
http 応答関数
mitmdump -S outfile を実行するときに行き詰まりました。原因がまだわかりません。知っている人が教えてくれると幸いです。ありがとうございます
http://www.bkjia.com/PHPjc/1124518.html