關于站庫分離滲透思路總結
0x00 前言
看到了某篇關于站庫分離類型站點相關的討論,想總結下信息收集的技巧。
0x01 正文
關于站庫分離類型站點網上暫時沒有找到總結性的文章,所以想嘗試記錄下關于站庫分離類型站點的滲透思路。
對站庫分離類型站點通常可以有兩個滲透入口點。
- web 網站
- 數據庫
滲透思路其實也是比較常規。但是這里如果兩個入口點無非兩種路徑。
- 從 web 網站打入進而打站庫分離的數據庫,內網滲透
- 從數據庫打入進而打站庫分離的 web 網站,內網滲透
根據不同的路徑定制不同的滲透測試方案,下面記錄一下流程和容易遇到的問題。
一、從 web 入口滲透
從 web 入口通常就是通過網站的各種漏洞來 getshell,比如文件上傳、命令執行、代碼執行、還有 SQL 注入寫入一句話(into outfile、日志備份等)。
在獲得 web 權限或者有諸如文件讀取等漏洞時,我們還讀數據庫配置文件、對數據庫內容分析、查找數據庫備份,進而對數據庫目標 ip 進行滲透,以便后續操作。
二、從數據庫入口滲透
但是這里要說主要是外網暴露的數據庫入口點弱口令;web 網站 SQL 注入。
從數據庫入口滲透,同樣主要是為了獲取更大的權限,或者擴展我們的滲透成果,比如從數據庫里可以得到一些密碼信息,用戶名等,在后續的內網滲透中可以很有效的幫助我們。
站點是站庫分離的,數據庫和 web 不在同一臺服務器上,這時候不能寫入一句話木馬通過 web 去連,因為路徑沒有用。如果是從 web 端找到的 SQL 注入,那么可以通過以下這些方式去做信息收集、獲取權限。
MYSQL
(1)定位 web 端 ip 地址
通過查詢 information_schema 庫中的 PROCESSLIST 可以查看當前 MYSQL 的連接情況。因為 web 應用會產生查詢數據庫操作,所以在回顯出來的 host 字段中會帶回目標的 ip:port。
select * from information_schema.PROCESSLIST;

在得到了 web 端的 ip 我們可以進而對 web 端進行滲透。
(2)load_file () 獲取數據庫所在服務器的敏感信息
如果沒有 secure_file_priv 參數的限制(MySQL5.7 以下)我們還可以用 load_file() 函數對文件內容進行讀取。
select load_file('C:/test.txt');
# 左斜杠 /

還可以獲取網卡信息,比如讀:
/etc/udev/rules.d/70-persistent-net.rules 獲取網卡名稱。 /etc/sysconfig/network-scripts/ifcfg-網卡 靜態IP DHCP的話 /var/lib/dhclient/dhclient--網卡.lease
MSSQL
(1) 判斷是否站庫分離
得到客戶端主機名
select host_name();
得到服務端主機名
select @@servername;
根據結果判斷是否分離,結果一樣就可能站庫同服務器,結果不一樣就是站庫分離。
(2)存儲過程執行命令
我們可以通過 MSSQL 的存儲過程執行系統命令,可以嘗試直接提升權限后滲透其他主機,
常用到的兩個:
- XP_CMDSHELL
- SP_OACREATE
可以探測數據庫服務器是否出網,通過執行 ping 或者 curl 看是否出網,通常遇到 MSSQL 我們直接就通過命令執行上線了。
同樣是數據庫,自然其中有一些敏感信息,為了進一步滲透,可以整理密碼本或者其他信息。