<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/mobile/12466

                    分析某商城漏洞,在漏洞驗證時采用了兩種iOS上的hack工具:cycript和reveal,各有風情,均能攻城拔寨,實乃我輩日常居家、殺人越貨之利刃,現與諸君共享之。

                    0x00 漏洞緣起


                    該商城的iOS版app為用戶提供了找回密碼的功能,用戶需通過三個步驟找回密碼:

                    1. 輸入一個本地的圖形辨識驗證碼(多余?)
                    2. 提供用戶手機號,輸入一個短信驗證碼
                    3. 輸入新的密碼、確認密碼,然后Bingo

                    要找漏洞,先抓包看看,先易后難,實在不行再做逆向分析。burp架起先,開代理、關閉intercept、ssl協議算法全勾上(免得碰上奇葩ssl協商參數,以前遭過冤枉)。iPhone上在wifi選項中配置代理,指向burp。然后開app,burp報錯。

                    enter description here

                    難道客戶端對證書進行了pin?冷笑三聲,開啟我的ssl kill switch。再開程序,登錄,進商城,一切順利。ok,現在進入正題,找漏洞。進入找回密碼功能,按步驟進行提交,重設了密碼,然后到burp中查看抓到的數據包,下面是重置密碼第三步發出的post數據包。

                    enter description here

                    仔細分析這個數據包,發現除了一個簽名,其它跟第二步獲得的手機短信驗證碼沒有一毛錢的關系,難道這個“你媽是你媽”問題的驗證是在客戶端做的?那我們是不是改改電話號碼就能重置任意用戶密碼了?在burp中改包試了試,不行的,服務器返回錯誤。看來在Sign中有文章,看來需要從客戶端想辦法了。

                    丟到ida中跑,找到如下關鍵函數:

                    enter description here

                    然后再初略的溜了一下該函數涉及到的各種參數。

                    enter description here

                    好像沒有涉及到第二步中的短信驗證碼,應該只是把電話號碼、新口令作為簽名的可變輸入。不錯,省得逆向簽名算法了,人生苦短,可以節約一堆腦細胞了。基本思路出來了,就是正常執行前兩步,然后在第三步中將界面電話號碼(用戶賬號)改為其它被攻擊的賬號。

                    0x01 cycript大法


                    先介紹一下cycript,官方解釋:

                    Cycript allows developers to explore and modify running applications on either iOS or Mac OS X using a hybrid of Objective-C++ and JavaScript syntax through an interactive console that features syntax highlighting and tab completion.

                    簡而言之:插入進程,想改就改。不過這貨是命令行模式,混合了ObjectC和JS,官方幫助寫的精簡了點,還是稍微有點煩。不過自帶了tab鍵補全功能,略感欣慰。下面一步步來使用。

                    實現目標的先決條件是要找到找回密碼過程第三步界面對應的對象,然后對該對象中與注冊手機號碼相關的屬性進行操作。

                    先要將app運行到我們要攻擊的第三步,也就是輸入新口令和確認新口令的界面,我們的目標是使用hack方法修改不可編輯的注冊手機號。

                    enter description here

                    當然,我們也要先將app使用classdump將app的類信息獲取,發現了其中與口令重置相關的信息如下,可以輔助下一步的攻擊工作。

                    enter description here

                    使用ps命令獲得被注入的進程信息,然后使用如下命令啟動cycript,涂紅部分為進程名稱,當然,使用pid也可以。

                    enter description here

                    然后獲得當前app的UI句柄。

                    enter description here

                    獲得app的keyWindow。

                    enter description here

                    獲得keyWindow的rootViewController。

                    enter description here

                    獲得當前可視的ViewController。做界面hack,前幾步基本是一樣的,目的就是找到當前顯示界面對應的對象。

                    enter description here

                    各位看官發現沒的,這個FindPwdViewController正是我們使用classdump發現的密碼重置類,看來接近問題答案了。

                    enter description here

                    接下來可以直接根據classdump出的類信息敲入如下命令:

                    enter description here

                    看到text沒得,就是界面顯示的注冊手機號,改改改!

                    再看手機上,注冊手機號已經修改成了目標手機號。點擊完成,成功!

                    0x02 reveal大法


                    reveal工具其實應該被奉為界面hack的第一利器,無它,太好用了。各位可能還在糾結上面敲入的各種煩人命令,如果對ObjectC和面向對象思想以及各類砸殼、dump工具不熟的化,要完成cycript大法,還真不是一件容易活。但reveal不同,在安裝好后,就是輕輕的點點鼠標,敲個電話號碼的事。

                    不過還是有石頭要擋道,就是reveal在手機端的安裝。下面是筆者的安裝經驗:

                    reveal原本是作為xcode的輔助工具,為app開發者使用的,本不具備插入任意程序的功能,但在越獄的iphone上借助cydia substrate可以插入任意app,包括springboard,安裝方法參見參考1。筆者是在iOS9上裝的,一定要按這篇文章說得,把framework搞到手機端,另外,plist文件要用plisteditor等專用工具編寫,還有就是Filter一定要寫,要不然就是iPhone6S Plus也會慢的無法忍受!如果出現這種窘境,立即home+power硬關機,按音量+開機跳過substrate,重新進行Filter配置。最后提醒一句,reveal所在的主機和被調試手機要在同一局域網。

                    reveal安裝好之后,需要找到被注入程序的bundle id,就在app的ipa包的info.plist文件中,使用plisteditor等工具打開,搜CFBundleIdentifier就能找到,下面涂紅的部分即是。

                    enter description here

                    找到bundle id后將其填到Filter中即可。啟動程序,在reveal的connect目標中會發現目標app,直接connect,reveal中會出現手機端app的界面。借一張上面文章的圖,各位感受一下,各種界面元素一覽無余,而且可以3d顯示層級關系,酷。

                    enter description here

                    更酷的是,它可以直接修改界面元素的內容,不管在原手機端該元素是否可編輯,并且編輯后直接反應到手機端界面。

                    有了這種功能,要應付我們本漏洞驗證的目標就太容易了,啪啪啪走到第三步,刷新reveal段界面,在如下圖中直接編輯注冊手機號內容,回車,再在手機端點擊完成,ok。

                    enter description here

                    0x03 總結


                    cycript和reveal其實都根植于cydia substrate這棵大樹,不過風格迥異罷了。一個是玲瓏劍,需要舞者精心駕馭,一個是大砍刀,直接快意殺伐。不過爽的是我可以左手玲瓏劍,右手大砍刀,仰天長嘯,快意恩仇,不亦樂乎!

                    0x04 參考


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

                                      这里只有精品视频