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