自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

mitmproxy——中間人攻擊的神器

安全 數(shù)據(jù)安全
http proxy在web滲透上占據(jù)著非常重要的地位,這方面的工具也非常多,像burp suite, Fiddler,Charles簡直每個搞web的必備神器,還有歷史比較久遠的paros,webscarab等,實際上每個web漏洞掃描器都有http代理的功能。今天要介紹的mitmproxy代理工具,非常棒,特別是對https數(shù)據(jù)的截獲,及可擴展性,bra bra……

一、前言

http proxy在web滲透上占據(jù)著非常重要的地位,這方面的工具也非常多,像burp suite, Fiddler,Charles簡直每個搞web的必備神器,還有歷史比較久遠的paros,webscarab等,實際上每個web漏洞掃描器都有http代理的功能。

而今天要介紹的mitmproxy代理工具,非常棒,特別是對https數(shù)據(jù)的截獲,及可擴展性,bra bra……

之所以選擇這款工具,是為了做移動APP的通信分析。我們知道使用http代理的基本條件就是網(wǎng)絡(luò)要互通,而很多情況下,公司的移動網(wǎng)絡(luò)與辦公網(wǎng)絡(luò)是隔離的,當然你可以用網(wǎng)絡(luò)共享(或者買個小度wifi或360wifi)的方法來解決隔離。(記得幾年前做移動通信分析時就遇到了網(wǎng)絡(luò)隔離且沒有無線網(wǎng)卡的尷尬情況。)

我的選擇是在vps上搭建一個http代理(剛買了vps,正可著勁的折騰呢),這時候就需要命令行的工具了,于是選擇了mitmproxy(其實我也用nginx搭建了代理,目前以查看通信為主,待熟練了,或許能用nginx-lua模塊寫個截獲重寫的模塊,悲催的是nginx不支持https,扯遠了)。

二、mitmproxy原理

mitmproxy就是代理,有篡改功能的代理。它支持兩種模式,正向代理,與透明代理,支持http通信與https通信。

(正向代理,反向代理,透明代理的科普可以看http://z00w00.blog.51cto.com/515114/1031287這篇文章,很容易懂)

mitmproxy官網(wǎng)上也有介紹原理,這里附上好心人的翻譯http://www.oschina.net/translate/how-mitmproxy-works

對代理很了解的同學(xué),看看下面四幅圖,就能知道是咋回事了。

1. http正向代理

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

2. https正向代理

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

3. http透明代理

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

4. https透明代理

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

三、mitmproxy安裝

接下來我要在vps上安裝mitmproxy了,該工具使用python編寫,現(xiàn)在非常多的工具都是python編寫的,都有專門的python黑客培訓(xùn)機構(gòu)了,話說不會python的程序員不是好程序員。

python是跨平臺的,因此mitmproxy也是跨平臺的。

接下來以linux(debian 7)上安裝為例,其他平臺非常類似(mac上安裝包用homebrew就好)

1. 首先安裝python環(huán)境,了解python的可以不用看

#python及python依賴包apt-get install build-essential python-dev python-setuptools#安裝pip,很好的python包管理器,類似于aptitude,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 nose pathod countershape

3. 安裝mitmproxy

sudo pip install mitmproxy

安裝成功后會在生成兩個工具/usr/local/bin/mitmproxy與/usr/local/bin/mitmdump

本人是個開源工具殺手,總會遇到問題

安裝問題解決:

如果使用pip安裝時,出現(xiàn)pkg_resources.DistributionNotFound:(剛升級了os x Mavericks版本就出現(xiàn)了這個問題),可以先更新pip

sudo easy_install --upgrade distributesudo easy_install --upgrade pip

四、CA證書的安裝

要捕獲https證書,就得解決證書認證的問題,因此需要在通信發(fā)生的客戶端安裝證書,并且設(shè)置為受信任的根證書頒布機構(gòu)。下面介紹6種客戶端的安裝方法。

當我們初次運行mitmproxy或mitmdump時,

會在當前目錄下生成 ~/.mitmproxy文件夾,其中該文件下包含4個文件,這就是我們要的證書了。

mitmproxy-ca.pem 私鑰

mitmproxy-ca-cert.pem 非windows平臺使用

mitmproxy-ca-cert.p12 windows上使用

mitmproxy-ca-cert.cer 與mitmproxy-ca-cert.pem相同,android上使用

1. Firefox上安裝

preferences-Advanced-Encryption-View Certificates-Import (mitmproxy-ca-cert.pem)-trust this CA to identify web sites

2. chrome上安裝

設(shè)置-高級設(shè)置-HTTPS/SSL-管理證書-受信任的根證書頒發(fā)機構(gòu)-導(dǎo)入mitmproxy-ca-cert.pem

2. osx上安裝

雙擊mitmproxy-ca-cert.pem - always trust

3.windows7上安裝

雙擊mitmproxy-ca-cert.p12-next-next-將所有的證書放入下列存儲-受信任的根證書發(fā)布機構(gòu)

4.iOS上安裝

將mitmproxy-ca-cert.pem發(fā)送到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/mitmproxy-ca-cert.pem

subject= CN = mitmproxy, O = mitmproxyImport certificate to iPhone/iPad simulator v5.1 [y/N] yImporting to /Users/danqingdani/Library/Application Support/iPhone Simulator/5.1/Library/Keychains/TrustStore.sqlite3 Certificate added

實際上上面的操作就是給 ~/Library/Application\ Support/iPhone\ Simulator/5.1/Library/Keychains/TrustStore.sqlite3 數(shù)據(jù)庫中表tsettings表中插入證書數(shù)據(jù)

6.Android上安裝

將mitmproxy-ca-cert.cer 放到sdcard根目錄下

選擇設(shè)置-安全和隱私-從存儲設(shè)備安裝證書

五、工具使用

在vps上裝好了mitmproxy代理,在客戶端也裝好了CA證書,接下來就可以使用了。

第一步:在vps上啟動mitmproxy

mitmproxy -b xxx.xxx.xxx(指定監(jiān)聽的接口) -p xxx(指定端口)

果然我是開源工具殺手,運行時又報錯了。

運行錯誤問題解決:

當運行mitmproxy報錯:

Error: mitmproxy requires a UTF console environment.

Set your LANG enviroment variable to something like en_US.UTF-8

你可以先運行l(wèi)ocale查看當前的語言環(huán)境,我的vps就是POSIX環(huán)境

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=

現(xiàn)在我們需要的是把其修改為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. locale-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

現(xiàn)在再運行l(wèi)ocale,可以看到語言修改過來了

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代理

第三步:使用客戶端訪問,現(xiàn)在就可以操作通信數(shù)據(jù)了

六、常見操作

1. mitmproxy

就介紹最常用到的修改請求,并回放請求的方法吧

(1)方向鍵定位請求

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

(2)當黃色箭頭>>定位到指定請求時,按回車enter進入請求中

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

(3)按e進入編輯狀態(tài),然后按對應(yīng)的藍色字體來選擇修改的部分

 

mitmproxy——中間人攻擊的神器 - 碳基體 - 碳基體

 

可以修改query,查詢字符串;path,路徑;url ;header 請求頭;form 表單;raw body 請求正文;method 請求方法。

(4)a 增加一行,tab鍵切換編輯字段,回車enter開始編輯,esc保存,q返回上一級

(5)修改完后,按r就可以重放請求,然后查看修改結(jié)果了

2. mitmdump

別忘了,mitmproxy還有個內(nèi)向的雙胞胎叫mitmdump(很像tcpdump),它是不交互版的mitmproxy。可以非實時的處理通信包。

我們可以在mitmproxy中按w,將通信數(shù)據(jù)保存到指定文件中后,然后用mitmdump來操作。接下來簡單介紹一個例子,從mitmproxy中捕獲到的數(shù)據(jù)包中,篩選出來自微博的數(shù)據(jù)包,然后重放這個數(shù)據(jù)包(其實也可以修改后再重放)

-n 表示不啟用代理, -r表示從文件中讀取數(shù)據(jù)包, -w表示將數(shù)據(jù)包存儲到文件中,-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<< 200 OK 32B

3. mitmproxy API

開源精神最贊的是,可以像小時候玩積木一樣,用大牛們提供的各種精巧工具,搭建自己合適的武器。

mitmproxy提供了libmproxy以供調(diào)用擴展。

我們可以查看一下libmproxy的詳細說明,了解主要的API接口調(diào)用

pydoc libmproxy

官網(wǎng)給了一個自己編寫腳本,來操縱數(shù)據(jù)包的例子,很簡單,人人都能看懂

如下所示,就是在響應(yīng)包中增加一個自定義頭

def response(context, flow): flow.response.headers["newheader"] = ["foo"]

我們可以在mitmdump 中使用這個腳本

-s表示從讀取自定義腳本來處理數(shù)據(jù)包

mitmdump -ns examples/add_header.py -r infile -w outfile

好了,就介紹到這了。

七、希望交流

我在運行mitmdump重放http響應(yīng)功能時候

mitmdump -S outfile

卡死了,到目前還沒有找到原因,希望知道的大牛告之,萬分感謝

責(zé)任編輯:藍雨淚 來源: 網(wǎng)易博客
相關(guān)推薦

2014-03-20 10:26:58

2019-01-28 08:59:59

2020-05-07 15:24:22

中間人攻擊MITM

2017-02-16 08:53:42

2014-03-17 09:16:08

2014-05-15 10:20:07

2015-12-29 10:41:16

2015-01-05 13:29:37

2009-08-14 11:25:38

2012-11-20 13:06:57

2016-09-27 22:45:47

2014-11-21 11:46:55

2010-09-25 14:50:34

2010-06-13 12:06:41

2014-06-06 14:12:40

2014-06-03 16:30:53

2014-10-21 13:17:05

2021-07-26 05:22:47

中間人攻擊加密網(wǎng)絡(luò)安全

2010-03-04 14:21:17

2013-03-21 18:54:23

點贊
收藏

51CTO技術(shù)棧公眾號