
604
第2部 ハッキングを体験する
表示結果から、「select ??,?? from ?? where id = < 入力値 >」という SQL文が実
行されていると推測できます。該当レコードがあれば、IDには入力文字列、First
nameには 1 番目の??の値、Surnameには 2番目の ?? の値がセットされていると思
われます。
SQLインジェクションの典型的なコード「1' OR 'a'='a」を入力します。すると、
次のような結果が得られ、単純なSQLインジェクションに対する脆弱性があるこ
とがわかります。条件句がTRUEになり、すべてのフィールドが表示されたわけ
です(図7-9)。
図7-9 「1'OR'a'='a」を指定した結果
次は、DBシステムのバージョンを取得してみます。UNIONを使うとSELECT
文を統合できます。また、SQLで DB のバージョンを取得するには、"@@version"
あるいは "version()" を使用します。
そこで「' union select version() #」を入力すると、"The used SELECT statements
have a different number of columns" というエラーが返ってきます。UNION を利
用していて、一部のカラムがない場合に出力されるエラーです。SELECT文に