記錄一次坎坷的打靶經(jīng)歷
前言
我也沒(méi)想到居然能有第二篇,可能是我打靶太過(guò)于坎坷(其實(shí)就是菜,嗚嗚嗚)。
言歸正傳,bugku的par模式,滲透測(cè)試2,共9個(gè)flag,打了三次,歷時(shí)三天,全部拿下。整個(gè)打靶過(guò)程依舊十分坎坷,在此,分享出來(lái)筆者打靶的過(guò)程,并呈現(xiàn)自己的思考,同時(shí)也希望能獲得大佬的指點(diǎn)。
過(guò)程
第一次打靶
0x01 flag1(Typecho反序列化)
啟動(dòng)場(chǎng)景,給了一個(gè)ip:80,老樣子先上nmap掃一波
看來(lái)還是得從80端口開(kāi)始,訪問(wèn)頁(yè)面顯示
哇,這么大個(gè)flag,這是怕我看不見(jiàn)么,結(jié)果訪問(wèn)并不是,年輕人不講武德,來(lái)騙,來(lái)偷襲...嗚嗚嗚
上dirsearch掃著,咱先熟悉一下整個(gè)站點(diǎn)的功能,這個(gè)站點(diǎn)是屬于博客類型的,插件識(shí)別出來(lái)這是一個(gè)Typecho的cms,版本為1.0
網(wǎng)上搜搜看有沒(méi)有歷史漏洞
嘿!還真有,剛好符合要求
挺輕松,直接上poc,
將poc運(yùn)行后的結(jié)果,利用hackbar進(jìn)行post傳參,看到當(dāng)前目錄下的所有文件
當(dāng)前目錄下沒(méi)有flag,去根目錄下看看,直接cat /f*,拿到flag
0x02 flag2(數(shù)據(jù)庫(kù))
上一個(gè)flag沒(méi)有提示,但按照打靶正常流程,咱應(yīng)該想辦法getshell,嘗試反彈一個(gè)shell回來(lái)。它本身是一個(gè)php站點(diǎn),上面的poc中調(diào)用的又是system函數(shù),最先想到的payload就是
但是因?yàn)閱坞p引號(hào)閉合的問(wèn)題(有些函數(shù)里必需要有引號(hào)),放在poc里面感覺(jué)比較麻煩,想著寫(xiě)一個(gè)一句話木馬進(jìn)去,但是蟻劍死活連不上,最后還是回到原來(lái)的想法,反彈shell。處心積慮地構(gòu)造了我大半天,終于構(gòu)造完了,最后長(zhǎng)這樣,用變量隔開(kāi)了很多參數(shù),然后利用字符串拼接的方式將整個(gè)命令拼接完整就OK啦
(后面發(fā)現(xiàn)只要給雙引號(hào)加個(gè)\轉(zhuǎn)義一下就行了,一口老血吐了出來(lái))
接收到shell后,看了一下當(dāng)前目錄并沒(méi)有flag,先用python提升一下shell的交互性吧
然后看了一下自己剛剛想寫(xiě)進(jìn)去的那個(gè)一句話木馬
?嗯?我的$_POST呢?就離譜...
然后因?yàn)檫@個(gè)反彈回來(lái)的shell執(zhí)行命令起來(lái)有點(diǎn)麻煩(敲錯(cuò)命令想刪掉重敲,雖然它確實(shí)是刪掉了,但是顯示上并不會(huì)刪掉而且還會(huì)多兩個(gè)字符^H)
我覺(jué)得還是工具的ui界面操作起來(lái)更方便,想用echo命令寫(xiě)一個(gè)一句話木馬進(jìn)去,結(jié)果呀,這個(gè)$_POST依舊是寫(xiě)不進(jìn)去
最后我還是用老辦法,將這個(gè)一句話木馬分開(kāi),按兩次寫(xiě)入shell.php,查閱了一下echo命令的一個(gè)詳細(xì)用法,于是就有了下圖
上蟻劍,成功連上
按照上次做滲透測(cè)試1的經(jīng)驗(yàn),flag應(yīng)該在數(shù)據(jù)庫(kù)里面,查看config.inc.php,拿到數(shù)據(jù)庫(kù)賬號(hào)密碼,
登錄后在數(shù)據(jù)庫(kù)中拿到flag
0x03 flag3(log4j2 rce)
依舊是沒(méi)有任何提示,想看看能不能提權(quán),但就我那個(gè)提權(quán)三板斧是提不了的,只能看一下網(wǎng)段信息先走內(nèi)網(wǎng)了
顯示有一個(gè)網(wǎng)段192.168.0.2/24,傳一個(gè)fscan掃一下(將結(jié)果輸出到文件里邊,不然沒(méi)有回顯)
看一下結(jié)果,提示192.168.0.3:80的title是不一樣的,掛一個(gè)frp,訪問(wèn)一下該站點(diǎn)
什么也沒(méi)有,嘗試弱口令,沒(méi)用,爆破,沒(méi)結(jié)果,想著抓包試試爆破,結(jié)果返回包里邊提示source.zip
訪問(wèn)看看,把源碼下載下來(lái)了
解壓出來(lái),淺淺看一下,是一個(gè)log4j2的題,估摸著是考CVE-2021-44228漏洞的利用吧
但是說(shuō)來(lái)慚愧,作為一個(gè)web手,這個(gè)漏洞自曝出到現(xiàn)在我還沒(méi)有去復(fù)現(xiàn)研究過(guò),導(dǎo)致現(xiàn)在不知道怎么去利用它,剛好時(shí)間也到了,只能先去研究一下這個(gè)漏洞了,第一次打靶結(jié)束。
第二次打靶
0x03 flag4(log4j2 rce)
研究了一天這個(gè)漏洞,大致知道該漏洞的基本原理和利用方法了
思路清晰目的明確,在vulhub上找到相應(yīng)的環(huán)境成功復(fù)現(xiàn)一遍后,就開(kāi)始了我的第二次打靶之旅。
將反彈shell的payload進(jìn)行base64加密
使用JNDI注入工具(JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar)在vps上開(kāi)啟好對(duì)應(yīng)的服務(wù),
之后便可以開(kāi)始利用了,從上次得到的源碼里可以知道這個(gè)站點(diǎn)用的是springboot框架,
所以選擇工具給好的對(duì)應(yīng)springboot的URI,構(gòu)造好payload,vps上nc監(jiān)聽(tīng)反彈端口,將payload填入登錄框中,點(diǎn)擊提交即可接收到反彈回來(lái)的shell了
剛好還是root權(quán)限,讀一下flag
0x04 flag3、flag5
上一個(gè)flag提交后發(fā)現(xiàn)這居然是flag4
該不會(huì)真的需要在之前flag2上的機(jī)器提權(quán)后才能拿到flag3吧,嗚嗚嗚
然后仔細(xì)看了一下但當(dāng)前目錄下的文件,有一個(gè)start.sh的腳本,打開(kāi)看看
好家伙,一個(gè)log4j2的漏洞拿下3個(gè)flag,flag3在一個(gè)js文件里邊、flag4在根目錄下、flag5在root目錄下,單走一個(gè)6
0x06 flag6(git克?。?/h4>
看完flag后,界面顯示看起來(lái)屬實(shí)不舒服,想clear清屏又清不掉,
最后想起來(lái)擱B站up主紅隊(duì)筆記的視頻里學(xué)到過(guò)一招,
成功清屏
接著做下去,上一個(gè)flag依舊是沒(méi)有提示,但已經(jīng)有root權(quán)限了,正常流程就是看看內(nèi)網(wǎng)了,ifconfig看一下網(wǎng)段,好家伙,沒(méi)有ifconfig命令
ls /usr/bin看一下用戶命令有哪些
有wget,可以直接從vps上下載frpc,但是不知道這臺(tái)機(jī)子的具體網(wǎng)絡(luò)信息呀,這時(shí)候其實(shí)就有一點(diǎn)卡住了,不知道該怎樣獲取這臺(tái)機(jī)子的一個(gè)網(wǎng)卡信息,怎樣進(jìn)行下一步呢?
嘿嘿,我去問(wèn)了一下度娘,
執(zhí)行ip addr show命令后發(fā)現(xiàn)還有一層192.168.1.2/24的網(wǎng)段,傳一個(gè)fscan上去掃一下
依舊是看title,發(fā)現(xiàn)192.168.1.3的是之前沒(méi)有見(jiàn)過(guò)的,掛frp開(kāi)socks5代理,成功訪問(wèn)該站點(diǎn)(能wget從公網(wǎng)上下載就已經(jīng)不需要考慮出不出網(wǎng)的問(wèn)題了)
這個(gè)貌似是用來(lái)clone倉(cāng)庫(kù)的,看一下插件是一個(gè)php站點(diǎn)
表單里邊有bugku的一個(gè)git倉(cāng)庫(kù)提示,訪問(wèn)看看
是一個(gè)漏洞測(cè)試靶場(chǎng),并沒(méi)有給什么信息,直接將這個(gè)git倉(cāng)庫(kù)克隆一下,
給了個(gè)超鏈接,訪問(wèn)一看,flag出了
0x07 flag7(git克隆上馬)
這里可以克隆倉(cāng)庫(kù),而且可以訪問(wèn)到克隆的倉(cāng)庫(kù)里的文件,你說(shuō)這種是不是很像文件上傳,于是我自己建了個(gè)倉(cāng)庫(kù),放上一句話木馬,clone后訪問(wèn)發(fā)現(xiàn)它直接將文件內(nèi)容輸出了,并沒(méi)有執(zhí)行解析
可能是做了限制吧,然后嘗試修改倉(cāng)庫(kù)里文件后綴看看能不能繞過(guò)限制,重新clone,好家伙,clone同一個(gè)倉(cāng)庫(kù),里邊的文件不會(huì)變了(不管遠(yuǎn)程倉(cāng)庫(kù)做了什么修改,clone的倉(cāng)庫(kù)只保留第一次clone的結(jié)果,估摸著是緩存的原因),沒(méi)辦法只能多創(chuàng)建幾個(gè)倉(cāng)庫(kù)了,最后測(cè)試了很多次后,發(fā)現(xiàn)phtml后綴的文件能被解析執(zhí)行
直接上蟻劍,拿下flag
貼上我的倉(cāng)庫(kù)地址(https://github.com/QRLing1/hello4)
0x08 flag8(ftp)
這次終于有提示了,
?什么東東,沒(méi)看懂,離譜,還是先看一下這臺(tái)機(jī)子的網(wǎng)卡信息吧
還有一層10.10.0.2/24的網(wǎng)段,上fscan掃一下(將結(jié)果輸出到文件中,不然沒(méi)有回顯)
看一下結(jié)果發(fā)現(xiàn)10.10.0.3這臺(tái)機(jī)子只開(kāi)了21端口,該端口對(duì)應(yīng)的是ftp服務(wù),題目的提示該不會(huì)是ftp的賬號(hào)密碼吧,繼續(xù)上frp掛代理,可是這次再上傳frpc的時(shí)候一直出現(xiàn)問(wèn)題,
唯一上傳成功的frp還不能運(yùn)行
最后就一直卡在了這里,之后時(shí)間也差不多結(jié)束了,第二次打靶也就此告終。
第三次打靶
0x08 flag8(ftp)
重新開(kāi)啟靶場(chǎng)后,想再試試傳一個(gè)frpc,這次上傳的很順利,之前傳不上去可能是網(wǎng)絡(luò)問(wèn)題吧,掛上代理后嘗試使用xftp進(jìn)行連接,賬戶密碼確實(shí)是guest,但xftp連接上后就一直卡死
根本讀取不到文件,換FileZilla連接也是卡死,就離譜
之后想著還是用ftp命令行進(jìn)行連接吧
轉(zhuǎn)到kali,先在/etc/proxychains4.conf里加上socks5代理,
然后再使用ftp進(jìn)行連接,終于連上了
get flag遠(yuǎn)程下載flag文件拿到flag
0x09 flag9(ftp)
從上一個(gè)flag給出的提示,ls / 看一下根目錄的文件
還真有,直接get /flag,結(jié)果并沒(méi)有拿下flag
一下子給我整蒙了,難不成還要彈個(gè)shell回來(lái)提權(quán)?但是就開(kāi)了一個(gè)21端口也執(zhí)行不了什么命令,怎么彈shell呀,迷茫了很久,切換到根目錄下面get flag,直接拿下了,好家伙,離大譜
總結(jié)
到這里就結(jié)束了,回顧整個(gè)打靶過(guò)程,還是能清晰的感受到我是一如既往的菜。這次打靶依舊是學(xué)到了很多東西,比如log4j2漏洞的學(xué)習(xí)和復(fù)現(xiàn)等,而且我覺(jué)得自己對(duì)打靶的一個(gè)大致流程也越來(lái)越熟練,打靶時(shí)的思路也逐漸靈活,總體上感觸頗多。下次繼續(xù),嘿嘿。
希望師傅們不喜勿噴,感謝。
參考資料
??JNDI注入學(xué)習(xí)??16-PHP代碼審計(jì)——Typecho1.0.14反序列化漏洞
log4j2(CVE-2021-44228)漏洞復(fù)現(xiàn)實(shí)操(小白向)
CVE-2021-44228-Log4j漏洞分析及漏洞複現(xiàn)(Log4j POC)
??Apache Log4j2 lookup feature JNDI injection (CVE-2021-44228)??