My Photo

« 鋼の錬金術師の最終巻を読み直した | Main | SQLインジェクション その4 »

October 06, 2013

SQLインジェクション その3

関連記事:
SQLインジェクション その1
SQLインジェクション その2

SQLインジェクションによる認証回避

以下はログイン画面(formタグの部分)とログイン処理をするスクリプトである。スクリプトにはSQL脆弱性がある。

<form action="<スクリプトへのパス>" method="post">
ユーザ名<input type="text" name="id"><br>
パスワード<input type="text" name="pwd"><br>
<input type="submit" value="ログイン">
</form>
session_start();
header('Content-Type: text/html; charset=UTF-8');
$id = @$_POST['id'];	// ユーザID
$pwd = @$_POST['pwd'];	// パスワード

// DBに接続
$con = pg_connect(<接続文字列>);

// SQL文の組み立て
$sql = "SELECT * FROM users WHERE id='{$id}' AND pwd = '{$pwd}'";
$rs = pg_query($con, $sql);
?>
<html>
<body>
<?php
if (pg_num_rows($rs) > 0) {	// SELECTした行が存在する場合ログイン成功
	$_SESSION['id'] = $id;
	echo 'ログイン成功です';
} else {
	echo 'ログイン失敗です';
}
pg_close($con);
?>
</body>
</html>

パスワードがわからなくても、パスワードに

' OR 'a'='a

と入力すると、ログインできてしまう。
原因は、実行されるSQLが下記であることが原因である(見やすいように適宜改行を入れてある)。 ユーザ名(この場合 "abc")が合っていれば検索結果は0件でなくなり、ログイン成功となる。

SELECT * FROM users WHERE id = 'abc' AND pwd = '' OR 'a' = 'a'

参考文献:体系的に学ぶWebアプリケーションの作り方 4.4.1 SQLインジェクション

体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践
徳丸 浩

ソフトバンククリエイティブ 2011-03-03
売り上げランキング : 4070

Amazonで詳しく見る
by G-Tools

« 鋼の錬金術師の最終巻を読み直した | Main | SQLインジェクション その4 »

PHP」カテゴリの記事

セキュリティ」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/58334230

Listed below are links to weblogs that reference SQLインジェクション その3:

« 鋼の錬金術師の最終巻を読み直した | Main | SQLインジェクション その4 »

April 2017
Sun Mon Tue Wed Thu Fri Sat
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30            
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof