保護好你的JENKINS實例,別等著黑客來提醒你!(價值5000$的SNAPCHAT漏洞)

在levelUp上發表完“Doing Recon Like a Boss”和更新了一篇Hackerone上同樣主題的帖子后,我決定開始挖一些公開項目漏洞,看看這種方法是否仍然適用于公開項目。作為其中的一部分,我決定看看SlackSnapchat的漏洞賞金項目,并按照演講中描述的那樣準確地完成偵察任務。

Step #1 –子域名爆破

子域收集通常在大型漏洞賞金項目中是一個好的開頭,但不幸的是我發現的子域并不是很有趣,所以我決定找到更“有趣”的東西。跳到第二階段。

Step #2 – Amazon網絡服務(AWS

Amazon一直都是一個不錯的起點,但了解到的是Snapchat很大程度上依賴于Google,而且他們在Hackerone漏洞賞金項目中已經聲明了他們的APP是托管在Google上的。那么我們不要繼續在s3 buckets上浪費時間了,看看還有什么吧!

Step #3 ?– HackerOneSnapchat的披露報告

作為偵察任務的一部分,我通常喜歡尋找已知或披露的漏洞。我快速瀏覽了一下他們的Hacktivity并發現如下內容:

– render.bitstrips.com

– blog.snapchat.com

– accounts.snapchat.com

– fastly.sc-cdn.net

– sc-corp.net(感謝Shubs

“sc-cdn.net”和“sc-corp.net”都引起了我的注意。我的第一反應就是子域名爆破,但這是在自欺欺人。這些是corp / cdn域名,而且很有可能大多數這些有趣的子域名都有特定的模式。現在的問題是我該如何發現他們?

Step #4: Censys / Shodan

在Censys.io上查找證書一般是個很好的方式。通常我在censys上使用類似于這樣的查詢條件:

443.https.tls.certificate.parsed.extensions.subject_alt_name.dns_names:domain.com

在通過暴力破解不能找到有趣的子域名情況下,再用這種方法就足夠了。通過這些結果,我發現了一個子域名:REDACTED-jenkins-Environment.sc-corp.net,該域名要求用戶登錄才能查看具體內容。這個時候,我想知道是否存在生產環境。肯定有很多,讓我們找一下吧。為了加速我的進程,我用了能查找以下不同REDACTED-jenkins-$env.sc-corp.net序列列表的腳本:

“dev, alpha, stage, prod, beta, local,test”。正如我所期望的那樣,其中一些結果返回了302響應碼,這暗示他們可能需要登錄。

Step #5:從這里我能干什么呢?

我最初的想法是很明顯地嘗試登錄這個產品實例,但這并沒有成功(感謝preben_ve)。因此,讓我們下移列表,并在其他實例上嘗試相同的方法。這就是所有樂趣開始的地方。算我幸運,我發現的其中一個實例允許我使用gmail帳戶登錄到Jenkins實例。現在,我已經通過了它們的Jenkins實例身份驗證,我認為它可能只給了最小的權限允許我做一些事情,更不用說允許我訪問“Script Console(腳本控制臺)”了。這時候,我運行了一個允許我從這臺服務器讀取一份文件的腳本,然后立刻停止所有測試并將細節提交給了Snapchat團隊。沒有必要執行其他腳本來證明影響,因為我已經可以讀取系統上的任意文件了。為了證明RCE(遠程代碼執行),我在報告中包含了一份允許執行命令的腳本,并要求他們自己冒險進行測試。我們晚一點兒討論這些腳本。

Step #6:利用Jenkins漏洞

我寫這篇帖子不只是為了討論我提交給Snapchat的報告,因為其實大多數信息能通過我在HackerOne上的限制公開披露并做一些簡單的偵察猜到。我寫這篇帖子的目的是深入探討利用Jenkins的漏洞,并討論它是否真的值2萬美元。為了實現這個目的,我用自己的Jenkins實例來演示不同的攻擊場景(截圖與我提交給Snapchat的報告無關):

Example #1:已知漏洞(只是為了突出一些)

CVE-2016-9299– Jenkins Java 反序列化遠程代碼執行漏洞

CVE-2015-8103– Jenkins CLI – RMI Java 反序列化(Exploit)

Example #2:訪問構建信息:

通常有權訪問Jenkins的構建信息則說民可能會讓你訪問憑據,api_keys / secrets這里是源碼:

Example #3:插件

Jenkins

允許你安裝不同的插件,比如Github OAuth,你可以允許用戶使用你的組織進行登錄,這可能泄露你的Github令牌:

使用Github API可以訪問更多數據。比如:https://api.github.com/orgs/ORG_NAME/repos?access_token=XXXXX

Example #4: Groovy腳本

正如我之前提到的,腳本控制臺允許你使用一行代碼來讀取文件:

通過以下代碼你也能在這臺服務器上執行一條命令:

def sout = new StringBuilder(), serr = new StringBuilder()

def proc = 'ls /etc/'.execute()

proc.consumeProcessOutput(sout, serr)

proc.waitForOrKill(1000)

println "out> $sout err> $serr"

關鍵點:

1. Jenkins允許你有不同的用戶權限。這意味著你得通過Jenkins實例登錄認證,它不保證你可以執行遠程代碼。

2.如果需要通過Github或Google OAuth認證,不要被嚇到。

3.你的訪問權限可能有限(沒有腳本,構建信息等),但是你可以訪問“People”列表中的用戶。這也許能讓你通過暴力破解的方式獲取登錄憑證(我沒有那么極端)。

4.通常Jenkins被用于部署,所以查一下IP,主機名等。如果你拿下了Jenkins而且想進一步測試(在漏洞賞金項目中盡量避免,完全沒必要而且會違反大多數項目規則),值得注意的是Jenkins服務器最有可能有權限訪問生產環境或內網環境。在運行的服務器上找找私鑰和主機。

5.不要在你的報告中使用“公開可訪問的Jenkins”,除非你可以利用上面的一個或多個例子。

6. Snapchat立刻移除了這個實例并獎勵了我。他們也非常友善地同意我寫這篇關于這個漏洞的帖子。

感謝閱讀,挖洞愉快!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。