不均等引用については、考える声明
SELECT * FROM admin WHERE username='$_GET["user"]' and password='$_GET["pass"]'
次私は、有効なユーザーが「管理者」であることがわかっている場合、私は
を以下しまいます
'or 1=1
を挿入 - コーダは、単一引用符など危険な文字のためのユーザー入力をサニタイズしていないところ、SQLインジェクションが発生します
SELECT * FROM admin WHERE username='admin' and password='something' or 1=1
これにより、パスワードの値に関係なく、式の左側が常に真となるため、結果が常にtrueに戻ります。
これはSQLインジェクションの最も単純な例です。攻撃者は引用符を使用する必要はありません。また、残りのクエリを--
や/*
などのコメント区切り文字でコメントアウトする必要があります、注入点の後にさらに多くのパラメータが渡されている場合。
HEXエンコーディングに関しては、フィルタリングを避けるいくつかの理由があるかもしれません。クエリですべての値を引用することを心配する必要がないため、16進でエンコードされた値を使用する方が簡単です。 あなたが一緒にそうようなconcat
に共同記譜二つのフィールドを使用したい場合は、このインスタンスに有用である:第三行を提供するでしょう
inject.php?id=1 and 1=0 union select 1,2,concat(username,0x3a3a,password) from admin
はisntance admin::admin
のために返す、目に見えるものです。私は進エンコーディングを使用しなかった場合、私はこれを行う必要があります:
inject.php?id=1 and 1=0 union select 1,2,concat(username,'::',password) from admin
これは、前述のaddslashes
機能を備えた、だけでなく、下手に書かれた正規表現のサニタイズ機能を持つか、非常に複雑なクエリを持っているかの問題である可能性があります。
SQLインジェクションは非常に幅広いトピックであり、私が取り上げてきたことはほとんど紹介されていません。
良い質問です。私が唯一の人物であることを見て悲しいことに、SQLインジェクションの悪用にこの技術を実際に使っています。 – rook