MAGAZINE
ルーターマガジン
mitmproxyによるHTTP通信情報収集時に、リクエスト情報で対象の通信を判別する方法
こんにちは。学生アルバイトの橋本です。今回は, 以前の記事でご紹介した, mitmproxyで通信内容を自動取得する方法の発展として, request時のpostパラメータなどを用いる方法をご紹介します。
本編
mitmproxyのインストールや端末側の設定方法は以前の記事をご覧ください。
今回は, postパラメータをmitmproxyで確認してmitmdumpでそれらを取り出すために, 例としてログインページでの通信を見ていきます。これは以前のmechanize入門記事のために作成されたログインとログアウトだけを行うページです。このページをAndroid端末で開き, IDのテキストボックスにsample_id、パスワードのテキストボックスにsample_passを入力してログインボタンを押した時の通信をmitmproxyで確認すると次の画像のようになっています。 この画像の最上部にはリクエストラインが記載され, リクエスト形式(getかpostか)とリクエスト先のurlが確認できます。その下でrequestのタブを選ぶと,リクエストヘッダが表示され, User-Agentやcookieが確認できます。その下にはリクエストボディとしてpostしたパラメータが記載されています。
では、これらの情報をインラインスクリプトでmitmdumpを使って取得してみましょう。実行したコードとその結果を載せます。
#実行コマンド
#mitmdump -s get_request_params.py
def response(flow):
if 'login' in flow.request.url:
print('---------------------------------------------')
print('リクエストurlは' + flow.request.url)
print('User-Agentは' + flow.request.headers.get('User-Agent', ''))
body = flow.request.urlencoded_form
print(body)
print('ログインIDは' + body.pop('id'))
print('ログインpassは' + body.pop('pass'))
print('---------------------------------------------')
#レスポンスをファイルとして保存する場合
file_contents = flow.response.content
with open('response.txt',"wb") as f:
f.write(file_contents)
終わりに
今回はmitmproxyで実際に取得する通信を見分けるのに役立つリクエスト情報を取得しました。これを使えば, 例えば, Content-Typeを見て画像を受け取っている通信を見分けて画像を保存したり, アカウントログインが必要なページで、ログイン時のpostパラメータから特定のアカウントが行う通信だけを取得するといったことができます。 さらに詳細な使い方を知りたくなった方はmitmproxyの公式サイトを参照してください!https://mitmproxy.org/
CONTACT
お問い合わせ・ご依頼はこちらから