<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    原文地址:http://drops.wooyun.org/tips/2943

                    0x00 簡介


                    Mitmproxy是一個基于python的中間人代理的框架。做過滲透測試的肯定很熟悉工具burpsuite或Fiddler,這些工具能夠攔截并修改http或https的數據包,對于分析數據包交互的應用來說是非常有用的。但是這些工具都是整套給我們做好了。比如如果想自己定制一套這樣的工具,添加一些自己需要的功能的話,那么我想,mitmproxy將是一個比較好的選擇,因為它提供了一個可供用戶調用的庫libmproxy(注意該庫目前只支持linux系統)。

                    用過kali系統的,對于mitmproxy應該不會陌生,因為這個工具已經內嵌到了kali系統里面了。如果你是在普通的linux系統,那么就需要自己手動安裝這個工具。

                    Mitmproxy項目主頁:http://mitmproxy.org/(需要翻墻)

                    Github:https://github.com/mitmproxy/mitmproxy

                    安裝以及簡單使用:http://sec.chinabyte.com/412/12771912.shtml

                    0x01 libmproxy介紹


                    一旦用戶安裝上了mitmproxy,那么,在python的dist-packages目錄下就會有一個libmproxy的目錄。點擊進去,如下圖所示。

                    2014090322432418732.jpg

                    有很多文件,里面最關鍵的一個文件就是flow.py。里面有從客戶端請求的類Request,也有從服務器返回的可以操作的類Response。并且都實現了一些方法可以調用請求或回復的數據,包括請求url,header,body,content等。具體如下:

                    Request的一些方法:

                    get_query():得到請求的url的參數,被存放成了字典。
                    set_query(odict):設置請求的url參數,參數是字典。
                    get_url():請求的url。
                    set_url(url):設置url的域。
                    get_cookies():得到請求的cookie。
                    headers:請求的header的字典。
                    content:請求的內容,如果請求時post,那么content就是指代post的參數。
                    Response的一些方法如下:
                    Headers:返回的header的字典。
                    Code:返回數據包的狀態,比如200,301之類的狀態。
                    Httpversion:http版本。
                    

                    有了上面這些簡單的方法,只要我們會python,就可以寫一些簡單的程序,比如過濾一些數據,只是提取一些有特定格式的數據包等。

                    0x02 一個簡單的實例


                    下面就來寫一個這樣的程序:抓取含有password或passwd這樣字段的數據包,將這個數據包打印出來。

                    那么分析一下,可能出現passwd或password的位置,第一,是url參數,這個我們可以通過get_url()這個方法獲取,第二個就是content,如果請求數據報文是通過post提交,那么就需要在content里面找到。好了,分析好了,那么就剩下寫代碼了。Mitmproxy官網有一個小程序,我們可以借鑒,下面是一個借鑒mitmproxy官網的代碼的簡易的實現。

                    #!python
                    #!/usr/bin/env python
                    #coding=utf-8
                    """
                    author:jaffer
                    time:2014-9-3 19:33
                    """
                    from libmproxy import controller, proxy
                    import os
                    import pdb
                    class StickyMaster(controller.Master):
                        def __init__(self, server):
                            controller.Master.__init__(self, server)
                        def run(self):
                            try:
                                return controller.Master.run(self)
                            except KeyboardInterrupt:
                                self.shutdown()
                    
                        def findword(self,msg):
                            stringword1 = 'passwd'
                            stringword2 = 'password'
                            content = msg.content
                            querystring = msg.get_query()
                            #在url參數中查找
                            for eachp in querystring:
                                if eachp[1].find(stringword1) != -1 or eachp[1].find(stringword2) != -1:
                                    return 1
                            #在content中尋找
                            if content.find(stringword1) != -1 or content.find(stringword2) != -1:
                                return 1
                            return 0
                    
                        def handle_request(self, msg):
                            flag = self.findword(msg)
                            if flag == 1:
                                str = msg.get_query()
                                con = msg.content
                                url = msg.get_url()
                                m = msg.method
                                print 'method:' + m
                                print '\n'
                                print 'query:\n'
                                for eachp in str:
                                    print eachp[0] + '=' + eachp[1]
                                    print '\n'
                                print '\n'
                                print 'url:' + url
                                print '\n'
                                print 'content:' + con
                                print '------------------\n'
                            msg.reply()        
                    
                        def handle_response(self, msg):
                            msg.reply()
                    
                    config = proxy.ProxyConfig(
                        cacert = os.path.expanduser("~/.mitmproxy/mitmproxy-ca.pem")
                    )
                    server = proxy.ProxyServer(config, 8000)
                    m = StickyMaster(server)
                    m.run()
                    

                    我使用手機端瀏覽器,登錄人人網,使用上述代碼截獲數據包如圖:

                    2014090322444687124.jpg

                    0x04 后記


                    Mitmproxy提供的libmproxy很是強大方便,對于自己需要自己定制的程序代碼有幫助,當然上面只是一個簡單的實現,還有更多的功能需要更多的挖掘,libmproxy下面的那些內容可以繼續學習。

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频