linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统
寫在前面的話
在一次紅隊分析中,我們成功以非特權用戶的身份在一個外圍網(wǎng)頁中實現(xiàn)了命令執(zhí)行。本文將介紹并分析漏洞(CVE-2018-1685)以及該漏洞的利用方式,該漏洞允許攻擊者讀取目標主機中的任意文件,但目前還沒有針對該漏洞的公開細節(jié)。除此之外,我們還會介紹一種技術,在加入了活動目錄域的Linux設備(通過Kerberos)中將這種類型的漏洞(任意文件讀取)轉(zhuǎn)換為完整的系統(tǒng)滲透并實現(xiàn)任意命令執(zhí)行。
權限提升
我們的測試設備是一臺近期剛剛更新的Red Hat服務器,因此我們無法利用內(nèi)核漏洞來實現(xiàn)提權。經(jīng)過一系列常規(guī)檢測之后,我們發(fā)現(xiàn)了一些帶有SUID的root級別可執(zhí)行程序:/home/db2test/sqllib/adm:
total 5.3M
drwxr-sr-x. ?2 db2test db2test ?112 Oct ?8 10:29 .
drwxrwsr-t. 19 db2test db2test 4.0K Oct ?8 10:32 ..
-r-sr-xr-x. ?1 db2test db2test 152K Oct ?8 10:29 db2audit
-r-sr-xr-x. ?1 root ???db2test ?19K Oct ?8 10:29 db2cacpy
-r-xr-xr-x. ?1 db2test db2test 195K Oct ?8 10:29 db2cap
-r-sr-x---. ?1 root ???db2test ?32K Oct ?8 10:29 db2iclean
-r-sr-x---. ?1 root ???db2test ?87K Oct ?8 10:29 db2licm
-r-xr-xr-x. ?1 db2test db2test 120K Oct ?8 10:29 db2set
-r-sr-sr-x. ?1 db2test db2test 4.7M Oct ?8 10:29 db2trc
“db2test”用戶貌似跟一個DB2測試安裝油管,即一個IBM的數(shù)據(jù)庫管理系統(tǒng)。搜索引擎求助一番之后,我們發(fā)現(xiàn)了一個關于這些可執(zhí)行程序(db2cacpy)的安全公告(由廠商發(fā)布)。
CVE-2018-1685漏洞描述:
解決方案和緩解策略:
雖然廠商并沒有披露關于該漏洞的任何技術細節(jié),但我們可以找到兩個有意思的地方:該漏洞允許本地用戶讀取系統(tǒng)中的任意文件;
在解決方案中,廠商提到刪除這部分代碼將會導致添加數(shù)據(jù)庫時無法向/etc/services中添加端口;
了解到這些內(nèi)容之后,我們就可以繼續(xù)下一步了。
CVE-2018-1685:漏洞捕捉
首先,為了分析漏洞,我們在本地下載了這些可執(zhí)行程序。除此之外,我們還需要下載大約10個DB2代碼庫來讓工具正確運行。
經(jīng)過初始的靜態(tài)分析之后,我們就可以拆分其各種行為了。代碼接收兩個命令行參數(shù),并會在程序繼續(xù)執(zhí)行之前對它們執(zhí)行相應的檢測。
第一個檢測
第一個檢測是以某種混淆方式進行的,判斷第一個參數(shù)是否跟存儲在cleartext中的密鑰相匹配:
第二個檢測
在第二個檢測中,將會判斷第二個參數(shù)是否是以字符串“/tmp/services.”開頭的,這很可能是因為另外的DB2組件是以這種模式來生成文件的:
漏洞分析
如果這兩個檢測都通過了,工具將會把指定的文件拷貝到/etc/services,并重寫該文件。下面給出的是這個過程的簡化版?zhèn)未a:func main(argc, argv[]) {
init_db2()
if (argc is 3)
{
if (argv[1] equals HARDCODED_KEY) {
if (argv[2] startsWith "/tmp/services.") {
copy_file(argv[2], "/etc/services")
}
}
}
}
那么,我們該如何利用這個讀取任意文件漏洞呢?沒錯,就是通過路徑遍歷!如果我們在/tmp中創(chuàng)建一個名為“services.”的目錄(或以這個字符串開頭的),我們就可以觸發(fā)/tmp/services./../../etc/shadow的拷貝行為,并通過第二個檢測。
我們可以點擊【這里】獲取到漏洞利用PoC代碼,它還會在漏洞利用完成之后恢復原來的/etc/services文件。需要注意的是,第一個檢測中的密鑰可能會根據(jù)DB2的版本或安裝配置的不同而有所變化。
從任意讀取到以root權限實現(xiàn)命令執(zhí)行
由于我們的測試設備是一臺通過Kerberos加入活動目錄域的Linux服務器,因此我們首先要檢測/tmp中是否存在有效的TGT(ccache文件),以便實現(xiàn)數(shù)據(jù)復用。但是,這些數(shù)據(jù)都已經(jīng)過期了。因此,我們需要尋找另一種不需要用戶交互的途徑,即keytab文件。
keytab文件中包含了計算機賬號的密鑰(Red Hat中默認為/etc/krb5.keytab),你可以使用這個密鑰來偽造TGS服務令牌。
為了從keytab中提取出密鑰,我們使用了我們的DB2漏洞利用代碼以及這個【腳本】:
接下來,使用impacket中的ticketer.py工具,我們可以創(chuàng)建一個針對服務器中SSH服務的TGS,并以域用戶命名,而這個域用戶擁有設備上的管理員權限:
最后,我們可以使用生成的令牌來通過SSH與設備進行連接,并使用Kerberos完成身份驗證。然后,以root權限執(zhí)行任意命令:
總結(jié)
在這篇文章中,我們學習了如何去利用一個眾所周知但并未披露技術細節(jié)的安全漏洞,這也就是為什么我們一直在強調(diào)必須盡快為每一個應用程序安裝安全補丁的原因!
總結(jié)
以上是生活随笔為你收集整理的linux etc 漏洞利用,漏洞利用 | 看我如何利用Kerberos EoP渗透你的Linux系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言字符串文库总结,C语言字符串.pp
- 下一篇: 成本低的暴利养殖 想创业的一定要研究一下