0
本文作者: 李勤 | 2017-03-24 22:25 |
Gr36_,男,阿里云云盾先知平臺白帽子貢獻(xiàn)排行榜排名第一的白帽子。
從 2016 年開始,Gr36_ 在先知平臺活躍,也在國內(nèi)其他眾測平臺“挖洞”。他對自己身份的定義是“眾測玩家”。雖然 Gr36_ 在先知平臺已經(jīng)累計拿到 285950 元的獎金,他表示,賺取額外收入只是他成為眾測玩家的原因之一,他在三年前接觸眾測,像玩游戲一樣,愛上了這項“勞動”,有樂趣,還能交到好朋友,一起提升技能。
Gr36_認(rèn)為,眾測多方共贏的模式可以改變很多人的生活。
《葵花寶典》傷身,挖洞秘籍有益。
3月24日,Gr36_ 在 2017 先知白帽大會上,就傳授了這種有益身心的挖洞寶典。以下為 Gr36_ 的秘籍實錄,雷鋒網(wǎng)在不修改原意的基礎(chǔ)上略有修訂和刪節(jié),PPT 截圖為 Gr36_ 授權(quán)雷鋒網(wǎng)發(fā)布。
[Gr36_ 在 2017 先知白帽大會上]
我們都知道打仗時搜集情報是重中之重,安全測試中前期的信息搜集工作也是關(guān)系著整個項目成敗的關(guān)鍵因素。
眾測時拿到一個給定的測試范圍,比如,一個主域名,獲取到的各種信息越多,拓展出去的測試范圍越廣,能挖到高危漏洞的概率也越大。有一些做常規(guī)信息搜集的手段,如,IP端口掃描、子域名的爆破。但是,我要介紹一些平常容易被忽略的信息。
時下,微信已經(jīng)成為全新的社交方式,大大小小的公司也開始運營自己微信公眾號,很多公司采用第三方微信公眾平臺,有的自己研發(fā)微商城、微官網(wǎng)這樣的系統(tǒng)。
這樣的系統(tǒng)往往存在問題,如果遇到的測試背景是第三方微信公眾平臺,需要多花一些精力,這樣會得到比較好的效果。通過微信公眾號的搜索功能,直接搜索到測試目標(biāo)微信公眾平臺的測試程序,我發(fā)現(xiàn)了很多安全漏洞。
公司系統(tǒng)經(jīng)過長久的測試與開發(fā),安全系數(shù)越來越高,我們挖到安全漏洞的難度也越來越大。相對而言,APP 作為最近幾年才興起的新鮮事物,很多公司在該領(lǐng)域的安全投入稍微欠缺,APP 也很容易成為測試過程中的突破口,因為可能用同樣的業(yè)務(wù)邏輯,APP 有可能也存在安全問題。
這是WEB系統(tǒng)的密碼找回最后一步的流程,整個流程在找回輸入注冊時候預(yù)留的郵箱,系統(tǒng)會將密碼找回的鏈接,輸入了密碼以后抓包,就可以來到這一步,正常而言,KEY 的參數(shù)應(yīng)該是隨機生成的,但當(dāng)時測試幾次后發(fā)現(xiàn)KEY是不變的,那么 KEY 會不會是和用戶身份相關(guān)的標(biāo)識呢?能夠從系統(tǒng)中找到用戶的ID和KEY的對應(yīng)關(guān)系,就可以重置任意一個用戶的密碼,但是我在整個系統(tǒng)中都沒有找到相關(guān)蹤跡,這時我把眼光投向了移動 APP ,果不其然,我在移動 APP 登錄請求發(fā)現(xiàn)了一些蛛絲馬跡,經(jīng)過比對和之前密碼找回的 KEY是一樣的,把這兩個請求組合起來就能做到——知道用戶名就可重置任意用戶的密碼了!
先看一個命令執(zhí)行漏洞的案例。這個漏洞的奇葩之處不在于漏洞本身的利用方式有多復(fù)雜,就是一個稀疏平常的,由于拼接 os 命令造成的命令執(zhí)行,關(guān)鍵的地方在于這個子域名是如何發(fā)現(xiàn)的。像這種多級子域名,光靠字典爆破是很難跑出來的,這里就是用 passive dns 數(shù)據(jù)獲取到子域名數(shù)據(jù)。
通俗而言,passive dns 就是 dns 解析記錄的歷史數(shù)據(jù)。國內(nèi)外都有提高 dns 解析歷史數(shù)據(jù)的網(wǎng)站,利用這些網(wǎng)站提供的查詢功能或 api ,可以獲取到很多利用暴力猜解沒辦法獲取到的子域名數(shù)據(jù)。
我有一個非常深刻的感受:漏洞從來不單獨出現(xiàn),某個系統(tǒng)出現(xiàn)了某種類型的漏洞,說明負(fù)責(zé)開發(fā)這個系統(tǒng)的程序員的安全意識不強,安全編碼不規(guī)范,有非常大的概率,在系統(tǒng)中還隱藏著沒有被我們找到的漏洞。最好的例子是,前段時間肆虐各大網(wǎng)站的 strusts 2 命令執(zhí)行漏洞,大家可以猜一下 st2 命令執(zhí)行漏洞的編號會達(dá)到多少?所以,歷史漏洞在眾測中可以給我們提供很多參考。通過漏洞平臺的歷史漏洞數(shù)據(jù),能得到很多的啟示和參考。
我認(rèn)為,挖洞是一項非常需要想象力的活動,在測試的過程中應(yīng)該多考慮一些特殊的情景,多開腦洞。
雙編碼注入和寬字節(jié)注入,這兩種在 PHP 源代碼審計中比較的常見,但是按照經(jīng)驗,眾測過程中,在黑盒時也可以碰到這種非常規(guī)注入,測試注入時如果只是用單引號、雙引號做測試,這兩種特殊的注入就跟你無緣了。
排序注入,為什么要把排序注入單獨拿出來說?對大多數(shù)的程序員而言,參數(shù)化查詢、預(yù)編譯處理可以解決絕大部分注入處理,但是,排序注入比較特殊,預(yù)編譯處理對它無效,這種注入特別容易成為漏網(wǎng)之魚。
在系統(tǒng)中只要輸入單引號系統(tǒng)就會返回一個空,這種情形應(yīng)該不存在注入,但是,這里是不是存在全局過濾機制?遇到單引號或者是其他的特殊字符系統(tǒng)就返回空?我把請求變成 POST 請求,經(jīng)過這樣的變換,發(fā)現(xiàn)這個系統(tǒng)是可以注入的,用這種方式可以繞過程序全局的過濾。
細(xì)節(jié)決定成敗,在測試過程中不僅要膽大而且要心細(xì),多注意一些細(xì)枝末節(jié),有時,會有一些比較意外的發(fā)現(xiàn)。我有個比較良好的習(xí)慣,喜歡察看網(wǎng)頁的源代碼。
上述案例中,我當(dāng)時是以普通用戶權(quán)限登錄到系統(tǒng)中,察看網(wǎng)頁源碼中發(fā)現(xiàn)有一堆注釋,注釋包含著一些鏈接,這些鏈接看上去是管理員功能的鏈接,最后這個鏈接普通用戶也可以訪問,這是屬于垂直權(quán)限的越權(quán)漏洞。
類似的 JS 源碼也是隱藏著一些看不到的信息,這些信息往往可以往往可以打開測試的局面,我當(dāng)時在測試過程中遇到后臺系統(tǒng),這個系統(tǒng)沒有帳號,經(jīng)過暴力破解也沒有成功進(jìn)入系統(tǒng)中,這時我去查閱系統(tǒng)加載的 JS 文件,其中一個文件中發(fā)現(xiàn)這樣一個函數(shù),看上去應(yīng)該是注冊函數(shù),根據(jù)里面的邏輯拼接成一個請求,最后發(fā)現(xiàn)利用這個請求確實能夠注冊一個后臺系統(tǒng)的帳號密碼,然后就可以進(jìn)一步登錄后臺系統(tǒng)進(jìn)行測試。
奇葩的支付漏洞,電商網(wǎng)站選購?fù)晟唐纷詈笠徊竭M(jìn)行結(jié)算支付,當(dāng)時選擇的支付方式是網(wǎng)銀在線,這個請求輸入一個訂單號,系統(tǒng)會返回一個表單,最終會拼接成網(wǎng)銀在線的最終支付鏈接,如果不仔細(xì)看可能就不會發(fā)現(xiàn)里面多了一點東西???KEY參數(shù),在一般支付寶或者是網(wǎng)銀支付鏈接里,肯定有一個參數(shù)校驗的過程,為了防止用戶篡改支付過程的金額和訂單號會做參數(shù)交驗, KEY 會不會就是參數(shù)交驗過程中遇到的密鑰?當(dāng)時我找到網(wǎng)銀在線的文檔,經(jīng)過仔細(xì)研究,猜想 KEY 可能是參數(shù)交驗所需要的密鑰,根據(jù)規(guī)則結(jié)合前面的 KEY ,自己手動構(gòu)造一個算參數(shù)交驗,自己算出來的數(shù)值和系統(tǒng)反饋回來的數(shù)值一樣,印證了我的猜想是正確的,我就可以結(jié)合這個規(guī)則和 KEY 構(gòu)造出任意金額的支付鏈接,而且可以保證支付鏈接完完全全合法有效,所以,這可以算是真真正正的任意金額支付漏洞。
測試過程中要有挖高危漏洞的心,如果是挖到低?;蛘呤侵形B┒匆惨敕皆O(shè)法把它變成高危的漏洞。
某次測試中找到某個系統(tǒng)存在 PHP 文件包含漏洞,經(jīng)過測試發(fā)現(xiàn)這個系統(tǒng)沒有任何上傳點,文件包含是本地文件包含,意味著無法通過上傳或者是遠(yuǎn)程文件包含拿到 web shell ,這時通過文件包含漏洞繼續(xù)讀系統(tǒng)源代碼,最后在某一個文件中發(fā)現(xiàn)了這么一行代碼,這行代碼意味著可以控制 session 變量,PHP的 session 保存服務(wù)器某個固定的路徑下,而且文件名是固定的前綴加上 session ID,路徑可以知道,session 的變量也可以控制,可以通過這個頁面往 session 文件里寫一句話,最終通過包含session文件的方式獲取到web shell。
論壇程序,在眾測的過程中遇到很多,對于這種程序大家都有自己的方法,有些是用社工管理員的帳號,或者是利用歷史漏洞去入手,自帶統(tǒng)一管理的程序。
如果仔細(xì)看過漏洞詳情,就會知道 UC 有很多的 API 設(shè)計非常不安全,利用 API 爆破 UC 創(chuàng)始人的密碼,這個爆破不受驗證碼請求次數(shù)的研制,爆破創(chuàng)始人密碼可以登錄 UC 的后臺,相當(dāng)于可以獲得論壇至高無上的權(quán)限,我在眾測過程中發(fā)現(xiàn)很多廠商對這里有一些加固,可能會做訪問的限制,比如,針對源 IP 的限制,出現(xiàn)這種情況可以回到這里,在拿到創(chuàng)始人密碼情況下,可以獲得論壇對應(yīng)的 uc key,可以結(jié)合之前UC 的漏洞進(jìn)行選項,還可以進(jìn)行注入,注入寫本地的中轉(zhuǎn)腳本,可以利用自動化工具完成。
很多白帽子在眾測的時候都用自己的專屬的工具包,有些是自己定制化開發(fā)的工具,我平常使用比較多的是一款基于被動式的掃描工具,在這種被動式掃描工具出現(xiàn)之前,也有大牛開源了一款工具,但是要經(jīng)過注入檢測,我推薦的這款適用范圍更廣一些,技術(shù)差不多也是利用現(xiàn)成的輪子組合,技術(shù)含量不是很高,主要是分享一些思路。
程序搭載的流程,訪問代理服務(wù)器可以抓取用戶所有的請求流量,可以對流量進(jìn)行存儲,后端的掃描程序再對流量進(jìn)行安全檢測。
程序分三部分,對于 host 字段網(wǎng)站的域名和 IP ,會進(jìn)行端口服務(wù)的識別,根據(jù)服務(wù)識別的結(jié)果再系統(tǒng)自動匹配調(diào)用相關(guān)的漏洞掃描的插件。系統(tǒng)掃描結(jié)果發(fā)現(xiàn)目標(biāo)完善運行一個服務(wù),自動從系統(tǒng)中調(diào)用爆破之類的檢測腳本檢測,url 會進(jìn)行外部指紋的識別,識別目標(biāo)網(wǎng)站使用中間件,系統(tǒng)會自動調(diào)用一些反序列化弱密碼的爆破之后進(jìn)行檢測。對于動態(tài)頁面,會調(diào)用文件包含之類的常規(guī)的外部掃描的插件進(jìn)行檢測。完整的流程走下來可以省去很多煩瑣重復(fù)性的勞動,也可以提高掃描的效率,提高漏洞發(fā)現(xiàn)的準(zhǔn)確度,達(dá)到事半功倍的效果。
用到兩個框架,Tornado、Twisted,意味著在資源比較少的情況下,單機情況下都可以獲得比較不錯的掃描效率。
關(guān)注雷鋒網(wǎng),獲得更多關(guān)于2017 先知白帽大會的信息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。