國(guó)內(nèi)SRC漏洞挖掘經(jīng)驗(yàn)和自用技巧

國(guó)內(nèi)企業(yè)近年來(lái)越來(lái)越注意企業(yè)自身安全,也都開(kāi)始逐步建立自己的安全應(yīng)急響應(yīng)中心平臺(tái)。由于各家廠商情況不一和白帽子水準(zhǔn)層次不齊,因此目前國(guó)內(nèi)廠商和白帽子都還有一定的進(jìn)步空間。
2015年-2017年三年整,先后主要給阿里,網(wǎng)易,唯品會(huì)提交過(guò)一些高質(zhì)量漏洞。因?yàn)楣ぷ鳎?018年一整年我都沒(méi)有給任何平臺(tái)提交過(guò)漏洞,以后我也不準(zhǔn)備在SRC這塊投入過(guò)多精力了,因此希望能多分享一些自用經(jīng)驗(yàn)技巧以及個(gè)人想法給大家。
JSRC安全小課堂第120期,邀請(qǐng)到硬糖作為講師就國(guó)內(nèi)SRC漏洞挖掘經(jīng)驗(yàn)和自用技巧為大家進(jìn)行分享。同時(shí)感謝小伙伴們的精彩討論。
國(guó)內(nèi)SRC漏洞挖掘的需要注意什么?
硬糖:
之前想過(guò),這一部分主要還是針對(duì)白帽子的。
在參與國(guó)內(nèi)廠商漏洞挖掘時(shí),作為白帽子我覺(jué)得應(yīng)該注意以下兩點(diǎn):
1. 遵從廠商規(guī)則。廠商規(guī)則不一定是完整的,廠商規(guī)則也肯定不能讓所有人滿意,但廠商規(guī)則的制定一定符合廠商自己的利益。漏洞挖掘測(cè)試過(guò)程說(shuō)到底也是未授權(quán)的非法行為,如果因此超越了廠商規(guī)定的范疇,觸及了廠商的底線,例如私自下載公開(kāi)相關(guān)數(shù)據(jù)等,自己可能面對(duì)的就是一個(gè)廠商的法務(wù)人員而不是審核人員。這類事情,可能公開(kāi)的并不多,但是真實(shí)發(fā)生的事情還是挺多的。
2. 第二點(diǎn)其實(shí)和技術(shù)沒(méi)太大關(guān)系了,尊重工作人員。其實(shí)我是一個(gè)很較真,又暴脾氣的人。我清楚記得我曾因?yàn)槁┒炊?jí)問(wèn)題曾經(jīng)對(duì)網(wǎng)易的審核人員出言不遜(雖然至今我依然認(rèn)為定級(jí)有問(wèn)題),對(duì)審核人員造成一定困擾,幸虧對(duì)方對(duì)我一直很忍讓,否則我現(xiàn)在可能失去一個(gè)很好的朋友。在此還是向@網(wǎng)易大楓哥 表示抱歉。而且你也并不知道你提交的漏洞會(huì)具體到個(gè)人身上造成什么樣的后果,可能會(huì)讓人離職也可能讓人……提交漏洞獲取獎(jiǎng)金的目的無(wú)非是提高技術(shù)和生活質(zhì)量,其實(shí)蠻希望大家可以對(duì)技術(shù)較真而不是對(duì)人。
國(guó)內(nèi)SRC平臺(tái)的兩種路線選擇模式
硬糖:
剛剛說(shuō)的有點(diǎn)煽情了,來(lái)說(shuō)說(shuō)國(guó)內(nèi)SRC平臺(tái)兩種路線選擇模式。
因?yàn)槠鋵?shí)我接觸的廠商并不是很多,所以只摸索出了兩條路線選擇模式,如果有補(bǔ)充歡迎提出。
我的路線區(qū)分的依據(jù)是廠商的業(yè)務(wù)線長(zhǎng)短,其實(shí)也就是廠商規(guī)則中接受的業(yè)務(wù)范圍大小。
1. 業(yè)務(wù)線較短的,即業(yè)務(wù)范圍較窄的。這種業(yè)務(wù)線較短的廠商其實(shí)不用每天每周都去投入很大精力,因?yàn)闃I(yè)務(wù)線只有那么長(zhǎng),很多人都在同一時(shí)期挖掘業(yè)務(wù)線上的漏洞,由于觀察力,技術(shù)甚至手速等原因很可能會(huì)一無(wú)所獲。在挖掘此類SRC漏洞時(shí),我的周期都是半年看一次,雖然可能會(huì)錯(cuò)過(guò)一些低危漏洞,由于半年周期內(nèi)廠商自身業(yè)務(wù)線的延長(zhǎng)會(huì)增加自己的業(yè)務(wù)系統(tǒng),因此你就可以通過(guò)新增的業(yè)務(wù)系統(tǒng)發(fā)現(xiàn)一些高?;蛘邍?yán)重漏洞從而可能獲得高額的獎(jiǎng)金,我在某SRC獲取幾萬(wàn)元獎(jiǎng)勵(lì)的嚴(yán)重漏洞就是通過(guò)此方法。之前發(fā)現(xiàn)在一個(gè)已有系統(tǒng)中發(fā)現(xiàn)一個(gè)安全隱患但無(wú)法擴(kuò)展利用,在等待半年后發(fā)現(xiàn)一個(gè)新增系統(tǒng)存在同樣隱患并可以擴(kuò)展利用。因此面對(duì)這類廠商需要做的是,緊盯新增業(yè)務(wù),新增業(yè)務(wù)出現(xiàn)時(shí),要有足夠的行動(dòng)力盡快將業(yè)務(wù)過(guò)一遍,避免手速過(guò)慢被撞洞。標(biāo)記是我覺(jué)得比較重要的,雖然和技術(shù)沒(méi)太大關(guān)系。
2. 第二種,也就是業(yè)務(wù)線較長(zhǎng)的,即業(yè)務(wù)范圍較廣的。這類廠商接可以投入大量精力去挖洞,去提煉,去刷洞。大概是這樣一個(gè)過(guò)程。當(dāng)開(kāi)始面對(duì)一家新的廠商時(shí),可以投入大量精力挖洞。積累到一定程度后,可以發(fā)現(xiàn)其實(shí)每一家廠商都有自己的“通病”,從開(kāi)發(fā)角度看這些業(yè)務(wù)線較長(zhǎng)大廠商都有一套自己的“行為準(zhǔn)則”,雖然可能不是寫入公司的明文規(guī)定,但一些自帶BUG的習(xí)慣和框架可能因?yàn)橛庙樖至?,所以就?yīng)用到各個(gè)業(yè)務(wù)系統(tǒng)中了。因此面對(duì)這類廠商需要做的是,挖洞積累到一定量,可以去嘗試總結(jié)提煉自己挖到的漏洞存在哪些共同點(diǎn),這些共同點(diǎn)往往可能都會(huì)存在于其他系統(tǒng)包括重要系統(tǒng)中,利用共同點(diǎn)去刷洞,達(dá)到快速獲取相應(yīng)賞金的目的。
講師
我的漏洞挖掘信仰——“爆破”
硬糖:
其實(shí)這個(gè)我之前在山東濟(jì)南的DC0531的分享上分享過(guò)了,不過(guò)由于“爆破”是我唯一會(huì)的東西了,自己也投入了一些精力,所以就拿出來(lái)多說(shuō)說(shuō)。
粗略統(tǒng)計(jì)了下,在我的嚴(yán)重漏洞中用“爆破”發(fā)現(xiàn)的可能占到了75%。開(kāi)始愛(ài)上“爆破”的啟蒙案例是這樣的:
在一次做安全測(cè)試時(shí),因?yàn)闇y(cè)試對(duì)象剛做完漏洞的修補(bǔ)和一些軟硬件的加固,因此并沒(méi)有測(cè)試出質(zhì)量較高的漏洞。因?yàn)榇祟惥W(wǎng)站經(jīng)常被一些黑闊入侵,我想到應(yīng)該會(huì)有一些殘存的東西在站點(diǎn)內(nèi),例如webshell,因此我拿出了burp開(kāi)始對(duì)網(wǎng)站的根目錄和圖片目錄進(jìn)行爆破,希望能爆破到webshell,如愿以償,我最終在網(wǎng)站根目錄下發(fā)現(xiàn)一個(gè)webshell并成功爆破出了密碼。網(wǎng)站雖然做過(guò)修補(bǔ)加固,但是不知道為啥留了shell在里面,也是有點(diǎn)尷尬,從那時(shí)起,我開(kāi)始關(guān)注“爆破”,希望能夠挖掘出爆破的其他技巧。?后來(lái),我通過(guò)爆破先后挖到了Uber以及國(guó)內(nèi)幾個(gè)大廠的嚴(yán)重漏洞。
“爆破”最需要的當(dāng)然是字典。
之后,我做了這樣一個(gè)事情,我下載了1000多個(gè)網(wǎng)絡(luò)上開(kāi)源的web源碼,通過(guò)正則提取這些源碼的目錄結(jié)構(gòu),可執(zhí)行腳本文件名,參數(shù)名, JS腳本名。收集目錄結(jié)構(gòu)是為了爆破目錄,收集可執(zhí)行腳本文件名是為了爆破一些爬蟲獲取不到的可執(zhí)行腳本文件,參數(shù)名當(dāng)然也是為了爆破可執(zhí)行腳本的參數(shù),收集JS腳本名是因?yàn)槠鋵?shí)我碰到很多站都會(huì)把一些重要的API存放在JS文件中,這種針對(duì)性的收集,肯定會(huì)減少爆破時(shí)遺漏的情況。(字典將整理后上傳 Blog )
這里說(shuō)了字典的獲取,但問(wèn)題也來(lái)了:字典當(dāng)然是越全越好,越多越好,但是也要考慮效率問(wèn)題,如此龐大的字典怎么才能更高效的使用,這是一個(gè)不太好處理的問(wèn)題。
我們可以將字典入庫(kù),增加keywordcount字段用于計(jì)數(shù),當(dāng)我們的關(guān)鍵詞命中時(shí),對(duì)應(yīng)的keywordcount值加1。每次使用字典時(shí),從數(shù)據(jù)庫(kù)中order by keyword_count desc提取關(guān)鍵詞,這樣會(huì)生成一個(gè)根據(jù)關(guān)鍵詞命中次數(shù)降序的字典,這樣經(jīng)常命中的關(guān)鍵詞就會(huì)靠前,我們使用的字典的效率也會(huì)提高,循環(huán)往復(fù)我們的字典將會(huì)越加成熟。
講師
一些其他漏洞挖掘小技巧
硬糖:
關(guān)于SRC的其他小技巧,其實(shí)上面也提過(guò),在各個(gè)其他的會(huì)議分享上也有其他師傅提過(guò),所以內(nèi)容可能重復(fù),見(jiàn)諒。
1. 多關(guān)注新增業(yè)務(wù)。
可以關(guān)注每個(gè)業(yè)務(wù)對(duì)應(yīng)的微信公眾號(hào),因?yàn)橐话阌行聵I(yè)務(wù)新活動(dòng)都會(huì)通過(guò)微信公眾號(hào)通知;也可以關(guān)注招聘廣告,一般朋友圈刷屏的招人廣告代表該業(yè)務(wù)方向是開(kāi)始著重發(fā)展的,可以重點(diǎn)關(guān)注下。我之前的一個(gè)最高獎(jiǎng)勵(lì)的嚴(yán)重漏洞,就是因?yàn)殛P(guān)注到了一個(gè)業(yè)務(wù)在招安全人員,因此趕緊去測(cè)試該業(yè)務(wù)了。
2. 嘗試申請(qǐng)非普通用戶擁有的權(quán)限。
如:商家,合作方。這些用戶權(quán)限因?yàn)槟苌暾?qǐng)到的不多,因此被測(cè)試的次數(shù)也較少,更容易發(fā)現(xiàn)漏洞。
例如一個(gè)漫畫業(yè)務(wù),漫畫既有讀者也有作者,這里不僅可以測(cè)試讀者權(quán)限的點(diǎn),也可以申請(qǐng)作者權(quán)限去測(cè)試。
3. 留意標(biāo)記暫未發(fā)現(xiàn)漏洞的站點(diǎn)。
一般站點(diǎn)多多少少都會(huì)有一點(diǎn)問(wèn)題,沒(méi)有問(wèn)題的站點(diǎn)大概率是因?yàn)橐恍┲R(shí)點(diǎn)暫時(shí)沒(méi)有關(guān)注到,在以后學(xué)習(xí)到新的知識(shí)點(diǎn)時(shí),可能就會(huì)猛然回想起當(dāng)時(shí)沒(méi)測(cè)試的站點(diǎn)。
不管在安全測(cè)試還是攻防實(shí)戰(zhàn)中經(jīng)?;仡^看看都會(huì)有意料之外的驚喜。
這些技巧主要都是技術(shù)之外的技巧,在我看來(lái),技術(shù)上的東西只要多學(xué)習(xí)多交流,應(yīng)該都會(huì)有很好的技術(shù),在針對(duì)漏洞挖掘這塊更多考驗(yàn)的是思路和耐心。
講師
可以分享一個(gè)實(shí)際案例嗎?
硬糖:
這里案例還是分享通過(guò)“爆破”方式形成的案例。
案例在曾經(jīng)在其他地方分享過(guò)了,因?yàn)橐恍┢渌┒吹谋C茉?,?shí)在只能找到分享過(guò)的漏洞案例了。
我的朋友@cy(5up3rc)之前在 Hackerone 上提交了1個(gè)Uber的SQL注入漏洞,了解了下大概內(nèi)容,由于該站點(diǎn)把一些API及其參數(shù)方法寫入了JS中,可以通過(guò)分析JS構(gòu)造數(shù)據(jù)包進(jìn)行請(qǐng)求,其中1處API存在SQL注入,提交給Uber 后獲得相應(yīng)獎(jiǎng)金。
這里其實(shí)也是我上面提到的,一些站點(diǎn)會(huì)把接口寫在js中。前臺(tái)接口會(huì)寫入,后臺(tái)接口也會(huì)寫入,我朋友發(fā)現(xiàn)的就是前臺(tái)的接口,當(dāng)時(shí)存在漏洞的API早已修復(fù),但是我憑一種直覺(jué),當(dāng)時(shí)我覺(jué)得應(yīng)該還是有漏網(wǎng)之魚的。通過(guò)爆破API路徑,成功獲得2個(gè)未寫入前臺(tái)JS的的未授權(quán)后臺(tái)API,然后根據(jù)JS里已有的參數(shù)名,最終構(gòu)造爆破出了8個(gè)參數(shù)。最終成功獲取到一個(gè)未授權(quán)的數(shù)據(jù)寫入API和一個(gè)未授權(quán)的數(shù)據(jù)查詢API。

這是寫入數(shù)據(jù)的api,在數(shù)據(jù)寫入的API中我在openid這個(gè)參數(shù)里面添加了注入語(yǔ)句,可以看到返回正常頁(yè)面,并未形成SQL注入。

接著我再通過(guò)查詢API,查詢剛剛添加的用戶,形成二次注入。
這樣數(shù)據(jù)庫(kù)名就出來(lái)了,一個(gè)完整的二次注入。

這個(gè)漏洞是兩年前的了,Uber這個(gè)案例雖然路由參數(shù)并不復(fù)雜,但的確讓我開(kāi)始注重字典的精準(zhǔn)收集與合理利用,這也是我分類收集字典的初始原因。
這里還有另外一個(gè)案例,當(dāng)我們碰到站點(diǎn)首頁(yè)403或者404時(shí),一般都會(huì)放棄,但其實(shí)這些站點(diǎn)一定程度上往往更容易出現(xiàn)問(wèn)題,這里是個(gè)在我看來(lái)有相當(dāng)一部分概率是此地?zé)o銀三百兩的操作。
因?yàn)榧热婚_(kāi)了web,為何沒(méi)有內(nèi)容?
之前我遇到一個(gè)IP 106.**.**.147 它的首頁(yè)是403頁(yè)面。

這里我通過(guò)目錄爆破和可執(zhí)行腳本文件爆破,獲取到 http://106.**.**.147/adver/landing.php

可以看到提示參數(shù)錯(cuò)誤,那么很明顯我需要一個(gè)參數(shù),通過(guò)爆破參數(shù),成功枚舉到參數(shù)。
完整URL:?http://106.**.**.147/adver/landing.php?mac=1
其他案例簽了保密協(xié)議,所以只能說(shuō)這些案例的,不好意思啊,各位。
完整URL:?http://106.**.**.147/adver/landing.php?mac=1 ,添加單引號(hào),成功發(fā)現(xiàn)SQL注入,獲得數(shù)據(jù)庫(kù)權(quán)限,而且這是個(gè)游戲業(yè)務(wù)。

大概就是通過(guò)不斷枚舉爆破獲得路徑,可執(zhí)行腳本,參數(shù)。完成一次漏洞挖掘,通過(guò)這種暴力測(cè)試我在這幾年獲得了相當(dāng)可觀的獎(jiǎng)金。
因?yàn)檫@是SRC的安全測(cè)試,因此這種動(dòng)靜較大留存日志較多的測(cè)試我也不需要擔(dān)心什么問(wèn)題,但是在真正的攻防對(duì)抗時(shí)還是不建議大動(dòng)作。
可以分享的案例就只有這些了,一些其他案例可能得等我保密協(xié)議過(guò)了,才能脫敏分享。
平頂山:
另外一種就是:IP+端口訪問(wèn) 403 或者 404 既然開(kāi)了端口,它為什么開(kāi)呢?多數(shù)都是后面有東西的,只是你訪問(wèn)姿勢(shì)不對(duì)。
講師
對(duì)于SRC廠商的一些建議?
硬糖:
規(guī)則雖然主要是針對(duì)白帽子來(lái)設(shè)定的,但其實(shí)作為規(guī)則制定者廠商更應(yīng)該注意遵守規(guī)則。
經(jīng)常白帽子會(huì)碰到以下問(wèn)題,恰恰是規(guī)則制定者違反了自己制定的規(guī)則。
1. 當(dāng)一種類型漏洞被發(fā)現(xiàn)存在于一個(gè)系統(tǒng)或多個(gè)系統(tǒng)中,可能會(huì)被綜合為一個(gè)漏洞或者漏洞等級(jí)前后不一致。
2. 同一種漏洞,危害影響相同,不同審核人員認(rèn)定等級(jí)不一致。
3. 有些漏洞已標(biāo)記為修復(fù),再次測(cè)試發(fā)現(xiàn)依然有問(wèn)題,提交后被告知還未被修復(fù),漏洞被取消。
4. 還有一個(gè)建議是:廠商不要被SRC漏洞數(shù)量和質(zhì)量迷惑,安全測(cè)試和滲透攻防還是有一定區(qū)別的,就連參與SRC漏洞挖掘的白帽子都不能完全保證遵守規(guī)則不要說(shuō)真正居心叵測(cè)的人了,曾經(jīng)發(fā)現(xiàn)一個(gè)白帽子為了提交漏洞換取獎(jiǎng)金的構(gòu)造釣魚郵件發(fā)送木馬給廠商員工。一些真正的滲透攻防對(duì)抗,紅藍(lán)演練也是必須要有的。
互動(dòng)問(wèn)答環(huán)節(jié):
1. 硬糖師傅在挖洞的時(shí)候有沒(méi)有碰到過(guò)一段時(shí)間(比如說(shuō)半個(gè)月或者一個(gè)月)都沒(méi)有產(chǎn)出的情況啊,如果有師傅當(dāng)時(shí)是怎么解決的啊?
講師:
一般碰到瓶頸期的時(shí)候,就是什么洞都挖不出來(lái)的時(shí)候我就會(huì)出去玩,然后或者是干別的事情。
2. 硬糖師傅,這么多站點(diǎn),爆破怎么提高效率呢?
講師:
還是要針對(duì)性的去爆破,不能什么都去爆破。
我主要爆破的對(duì)象都是那些新業(yè)務(wù),不太成熟的業(yè)務(wù)或者完全不是業(yè)務(wù)系統(tǒng)的那些站點(diǎn),其實(shí)也就是經(jīng)驗(yàn)吧,直覺(jué)他有洞,他就必須得有