在levelUp上發(fā)表完“Doing Recon Like a Boss”和更新了一篇Hackerone上同樣主題的帖子后,我決定開始挖一些公開項目漏洞润梯,看看這種方法是否仍然適用于公開項目过牙。作為其中的一部分,我決定看看Slack和Snapchat的漏洞賞金項目纺铭,并按照演講中描述的那樣準(zhǔn)確地完成偵察任務(wù)寇钉。
Step #1 –子域名爆破
子域收集通常在大型漏洞賞金項目中是一個好的開頭,但不幸的是我發(fā)現(xiàn)的子域并不是很有趣舶赔,所以我決定找到更“有趣”的東西扫倡。跳到第二階段。
Step #2 – Amazon網(wǎng)絡(luò)服務(wù)(AWS)
Amazon一直都是一個不錯的起點竟纳,但了解到的是Snapchat很大程度上依賴于Google撵溃,而且他們在Hackerone漏洞賞金項目中已經(jīng)聲明了他們的APP是托管在Google上的疚鲤。那么我們不要繼續(xù)在s3 buckets上浪費(fèi)時間了,看看還有什么吧缘挑!
Step #3 ?– HackerOne上Snapchat的披露報告
作為偵察任務(wù)的一部分集歇,我通常喜歡尋找已知或披露的漏洞。我快速瀏覽了一下他們的Hacktivity并發(fā)現(xiàn)如下內(nèi)容:
– render.bitstrips.com
– blog.snapchat.com
– accounts.snapchat.com
– fastly.sc-cdn.net
– sc-corp.net(感謝Shubs)
“sc-cdn.net”和“sc-corp.net”都引起了我的注意语淘。我的第一反應(yīng)就是子域名爆破诲宇,但這是在自欺欺人。這些是corp / cdn域名亏娜,而且很有可能大多數(shù)這些有趣的子域名都有特定的模式』牢眩現(xiàn)在的問題是我該如何發(fā)現(xiàn)他們蹬挺?
Step #4: Censys / Shodan
在Censys.io上查找證書一般是個很好的方式维贺。通常我在censys上使用類似于這樣的查詢條件:
443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:domain.com
在通過暴力破解不能找到有趣的子域名情況下,再用這種方法就足夠了巴帮。通過這些結(jié)果溯泣,我發(fā)現(xiàn)了一個子域名:REDACTED-jenkins-Environment.sc-corp.net,該域名要求用戶登錄才能查看具體內(nèi)容榕茧。這個時候垃沦,我想知道是否存在生產(chǎn)環(huán)境∮醚海肯定有很多肢簿,讓我們找一下吧。為了加速我的進(jìn)程蜻拨,我用了能查找以下不同REDACTED-jenkins-$env.sc-corp.net序列列表的腳本:
“dev, alpha, stage, prod, beta, local,test”池充。正如我所期望的那樣,其中一些結(jié)果返回了302響應(yīng)碼缎讼,這暗示他們可能需要登錄收夸。
Step #5:從這里我能干什么呢?
我最初的想法是很明顯地嘗試登錄這個產(chǎn)品實例血崭,但這并沒有成功(感謝preben_ve)卧惜。因此,讓我們下移列表夹纫,并在其他實例上嘗試相同的方法咽瓷。這就是所有樂趣開始的地方。算我幸運(yùn)舰讹,我發(fā)現(xiàn)的其中一個實例允許我使用gmail帳戶登錄到Jenkins實例∶┙現(xiàn)在,我已經(jīng)通過了它們的Jenkins實例身份驗證跺涤,我認(rèn)為它可能只給了最小的權(quán)限允許我做一些事情,更不用說允許我訪問“Script Console(腳本控制臺)”了寸潦。這時候瑟慈,我運(yùn)行了一個允許我從這臺服務(wù)器讀取一份文件的腳本,然后立刻停止所有測試并將細(xì)節(jié)提交給了Snapchat團(tuán)隊胀蛮。沒有必要執(zhí)行其他腳本來證明影響,因為我已經(jīng)可以讀取系統(tǒng)上的任意文件了糯钙。為了證明RCE(遠(yuǎn)程代碼執(zhí)行)粪狼,我在報告中包含了一份允許執(zhí)行命令的腳本,并要求他們自己冒險進(jìn)行測試任岸。我們晚一點兒討論這些腳本再榄。
Step #6:利用Jenkins漏洞
我寫這篇帖子不只是為了討論我提交給Snapchat的報告,因為其實大多數(shù)信息能通過我在HackerOne上的限制公開披露并做一些簡單的偵察猜到享潜。我寫這篇帖子的目的是深入探討利用Jenkins的漏洞困鸥,并討論它是否真的值2萬美元。為了實現(xiàn)這個目的剑按,我用自己的Jenkins實例來演示不同的攻擊場景(截圖與我提交給Snapchat的報告無關(guān)):
Example #1:已知漏洞(只是為了突出一些)
CVE-2016-9299– Jenkins Java 反序列化遠(yuǎn)程代碼執(zhí)行漏洞
CVE-2015-8103– Jenkins CLI – RMI Java 反序列化(Exploit)
Example #2:訪問構(gòu)建信息:
通常有權(quán)訪問Jenkins的構(gòu)建信息則說民可能會讓你訪問憑據(jù)疾就,api_keys / secrets這里是源碼:
Example #3:插件
Jenkins
允許你安裝不同的插件,比如Github OAuth艺蝴,你可以允許用戶使用你的組織進(jìn)行登錄猬腰,這可能泄露你的Github令牌:
使用Github API可以訪問更多數(shù)據(jù)。比如:https://api.github.com/orgs/ORG_NAME/repos?access_token=XXXXX
Example #4: Groovy腳本
正如我之前提到的猜敢,腳本控制臺允許你使用一行代碼來讀取文件:
通過以下代碼你也能在這臺服務(wù)器上執(zhí)行一條命令:
def sout = new StringBuilder(), serr = new StringBuilder()
def proc = 'ls /etc/'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println "out> $sout err> $serr"
關(guān)鍵點:
1. Jenkins允許你有不同的用戶權(quán)限姑荷。這意味著你得通過Jenkins實例登錄認(rèn)證,它不保證你可以執(zhí)行遠(yuǎn)程代碼缩擂。
2.如果需要通過Github或Google OAuth認(rèn)證鼠冕,不要被嚇到。
3.你的訪問權(quán)限可能有限(沒有腳本撇叁,構(gòu)建信息等)供鸠,但是你可以訪問“People”列表中的用戶。這也許能讓你通過暴力破解的方式獲取登錄憑證(我沒有那么極端)陨闹。
4.通常Jenkins被用于部署楞捂,所以查一下IP,主機(jī)名等趋厉。如果你拿下了Jenkins而且想進(jìn)一步測試(在漏洞賞金項目中盡量避免寨闹,完全沒必要而且會違反大多數(shù)項目規(guī)則),值得注意的是Jenkins服務(wù)器最有可能有權(quán)限訪問生產(chǎn)環(huán)境或內(nèi)網(wǎng)環(huán)境君账。在運(yùn)行的服務(wù)器上找找私鑰和主機(jī)繁堡。
5.不要在你的報告中使用“公開可訪問的Jenkins”,除非你可以利用上面的一個或多個例子。
6. Snapchat立刻移除了這個實例并獎勵了我椭蹄。他們也非常友善地同意我寫這篇關(guān)于這個漏洞的帖子闻牡。
感謝閱讀,挖洞愉快绳矩!