カテゴリー:
セキュリティ
閲覧数:1234 配信日:2014-05-26 19:53
攻撃例1
シングルクォート挿入で、WHERE句の条件式を強制的に常に真とする
・「'」と「or」を利用することにより、WHERE旬の条件式を、強制的に常にTRUEとする
ユーザーからのデータ入力例
・$input_userid … dummy
・$input_password … 'or'A'='A
SQLインジェクションされたSQL文
・WHERE句の中でANDとORを並べると、ANDの論理演算が優先するという決まりがある
SELECT * FROM user WHERE userid='dummy' AND password=''or'A'='A'
SQLインジェクションされたSQL文の意味
・パラメータに「'」を含ませることで、passwordに関するWHERE句の条件式を一旦終端させている
・具体的には、「userid='dummy'」かつ「password=''」または「'A'='A'」の条件が成り立つuserテーブル情報を表示するよう命令している
・「'A'='A'」は常に正しいので、この条件はどんなときにも成り立つ(WHERE句全体が常に真)
・つまり、userテーブルへ登録されている全情報を強制表示させることが可能
ポイント
・この攻撃方法の肝は、OR以降を常に真となるよう記述していることにある
・そのため、「'or'A'='A」部分は、「'or'1'='1」「'or''='」でも、攻撃は成立する
恒真式
・ちなみに、「'A' = 'A'」、「'1' = '1'」「'' = ''」のように、常に真となるような式を、恒真式と呼ぶ