前回はOSコマンドインジェクションの概要と構築する環境の解説を行いました。
今回は実際に脆弱性のあるコンテンツを構築していきます。
SSI、SQLインジェクションと異なり、用意はすぐできますので、皆様も社内デモとかに使用していただければと思います。
Webサーバセットアップ
以下を参考に。
・基本的な検証環境を作ろう!Ubuntu 18でLAMP環境を作るよ!①
・基本的な検証環境を作ろう!Ubuntu 18でLAMP環境を作るよ!②
それで以下のようにphpinfo()の実行結果が表示されるところまで確認しました。
あとubuntuを直接操作するのが面倒くさいので、sshもインストールして、window側のTera Termから操作できるようにしています。
コンテンツ作成
続いて、コンテンツ作成を行います。
SQLインジェクションの時のように入力画面を作成します。
$ cd /var/www/html/ #ドキュメントルートへ移動 $ sudo nano index.html #index.htmlを編集
以下のような感じで適当に作成
<html> <meta charset="UTF-8"> <head> <title>OSコマンドインジェクション検証</title> </head> <body> <form action="nslookup.php" method="post"> <table> <tr> <td>nslookupを行いたいIPアドレスまたはホスト名を入力してください</td> <td><input type="text" name="address"></td> </tr> </table> <input type="submit" value="nslookup実行"> </form> </body> </html> #編集したらCtrl+oで保存
画面は以下のようになります。「nslookup実行」ボタンを押した際にフォームに入力された値が「nslookup.php」にPOSTされていきます。
さて、次は肝の個所である「nslookup.php」を作成します。(とはいっても簡単です。)
$ sudo nano nslookup.php #nslookup.phpを編集
index.htmlからのPOSTデータを受け取って、それをnslookupした結果を出力するようにします。
関数は「shell_exec」を使用しました。php.netの以下の関数リファレンスを参考に
<?php $address = $_POST['address']; $cmd = "nslookup ".$address; $output = shell_exec($cmd); echo "<pre>$output</pre>"; ?> #編集したらCtrl+oで保存
さて、作成できました。(簡単でしたね)
実際に動作を確認してみましょう。
サーバのIPは192.168.70.135でしたので、「http://192.168.70.135/index.html」にアクセスを行い、フォームに「nekotosec.com」と入力し、ボタンを押します。
すると以下のとおり、nslookupの結果が出力されました。
これで脆弱性のあるコンテンツは作成できましたので、次回は実際にOSコマンドインジェクションの検証を行っていきます。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント