<span id="7ztzv"></span>
<sub id="7ztzv"></sub>

<span id="7ztzv"></span><form id="7ztzv"></form>

<span id="7ztzv"></span>

        <address id="7ztzv"></address>

            原文地址: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 參考


            <span id="7ztzv"></span>
            <sub id="7ztzv"></sub>

            <span id="7ztzv"></span><form id="7ztzv"></form>

            <span id="7ztzv"></span>

                  <address id="7ztzv"></address>

                      亚洲欧美在线