OSコマンドインジェクションのデモをする環境を構築する②

セキュリティ

前回は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の以下の関数リファレンスを参考に

shell_exec

<?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コマンドインジェクションの検証を行っていきます。

不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。

コメント