SQLインジェクションのデモをする環境を構築する②

セキュリティ

さて、引き続き環境構築をやっていきます。

少しずつでも進めていきたいと思いますので、頑張りましょう!

前回、DBの準備は終えたので、PHPのコンテンツ作成に行きましょう。

環境は前回の続きを、使っていきます。

多少修正を行いますが、ここがお勧めです。

SQLインジェクション脆弱性を持つサイトを作ってみた

まずはHTMLファイルの方をサクッと作ります。

$ cd /var/www/html/
#カレントディレクトリへ移動
$ sudo nano index.html
#ファイルを作成or編集

参考のサイトから以下をコピペします。

<html>
<meta charset="UTF-8">
<head>
<title>ログイン画面</title>
</head>
<body>
<form action="db.php" method="post">
<table>
<tr>
<td>ユーザID</td>
<td><input type="text" name="uid"></td>
</tr>
<tr>
<td>パスワード</td>
<td><input type="text" name="password"></td>
</tr>
</table>
<input type="submit" value="ログイン">
</form>
</body>
</html>
#Ctrl+oで保存して終了

念のためブラウザからアクセスします。以下のように画面が表示されればOK
例:http://192.168.70.131/index.html

次に同じように「db.php」を作ってコピペと行きます。

$ sudo nano db.php
#SQLiがあるファイルを作成

参考のサイトから以下をコピペします。
※もちろん接続するDBユーザの情報とかは前回作成したのに合わせます。

<html>
<meta charset="UTF-8">
<head>
<title>ログイン処理</title>
</head>
<body>
<?php
$conn = mysql_connect('localhost', 'tokoroten', 'assword1111aaaa!A');
$db = mysql_select_db('testuser', $conn);
$uid = $_POST['uid'];
$pass = $_POST['password'];
$result = mysql_query("SELECT email FROM users where uid='$uid' AND passwd='{$pass}'");
if (mysql_num_rows($result) == 0) {
echo "ユーザ名または、パスワードに誤りがあります。";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
print('email addressはこちらです '.$row['email']);
print('<br>');
}
mysql_close($conn);
?>
<a href="index.html">ログイン画面に戻る</a>
</body>
</html>

さて、次にDBに情報を登録しましょう!

$ mysql -u tokoroten -p
#mysqlにログイン
CREATE DATABASE testuser;
#testuserという名前のデータベースを作成
CREATE TABLE testuser.users (uid varchar(20), passwd varchar(20), mail varchar(20));
#usersというテーブルを作成し、カラムを「uid、passwd、mail」として作成

適当なユーザ情報を3つほど考え、DBに登録します。

INSERT INTO testuser.users (uid , passwd , mail) VALUES ('tokoroten', 'password', 'aasdawds@gmail.com');
INSERT INTO testuser.users (uid , passwd , mail) VALUES ('test', 'test', 'test@tttttt.com');
INSERT INTO testuser.users (uid , passwd , mail) VALUES ('sqliuser', 'sqlipass', 'sqli@sqlidsada.com');

流し込めたら、情報がちゃんとできているか確認します。

select * from testuser.users;

以下のような形になっていればOKです。

さて、ブラウザから動作を確認してみましょう!

ブラウザInternet Explorerを使用していた場合はこんな感じになっているかと

なぜだ~と思う方もいるかと思いますが、焦らず、エラーログを確認しに行きます。

$ cd /var/log/apache2/
$ less error.log

するとメッセージとしては「PHP Fatal error: Uncaught Error: Call to undefined function mysql_connect()」と出ているかと思います。

未定義の関数とな・・・

こういったコピペを駆使していくと、このような事態に陥ることはよくあります。
※これが発表の前日だったりするとマジで寝れません。

なので、次回は解決するためのエッセンスを記載して、動かすところまで行きたいと思います。

進行が遅くて申し訳ございません。

質問や不明点、要望等あれば、コメントやツイッター等で連絡をお願いします。

コメント