web-dev-qa-db-ja.com

SQLインジェクションエスケープチャレンジセキュリティシェパード

私はセキュリティシェパードをトレーニングツールとして使用しており、SQLインジェクションエスケープチャレンジに挑戦しています。

チャレンジ:

OWASP Security Shepherd - SQL Injection Escaping Challenge

MySQLのローカルデータベースで上記と同じように(テーブル名が異なるだけで)クエリを実行すると、問題なく動作します(このチャレンジでは、シェパードがMySQLを使用していると想定しています。これは、DBMSが唯一のタイプであるためです。今まで直面した)。

上記のクエリがSQLインジェクションとして機能しない理由はありますか?

チャレンジのヒントで述べたように、バックエンドで使用されているクエリは次のとおりです。

SELECT * FROM customers WHERE customerId="1" OR "1"="1";

アプリケーションは、SQLインジェクションに対する保護として'にすることにより、\'をエスケープしています。 "は変更されません。

12
J.Doo

短い答え:彼らの脱出のしくみを悪用する。 \' OR 1=1; --をお試しください。

長い答え:

それらのエスケープ関数は、すべての'\'に置き換えることで機能します。すでにバックスラッシュが付いているものを含め、それらすべて。つまり、\'が表示された場合、最終的には\\'-エスケープされたバックスラッシュ、その後にnescaped単一引用符になります。

その後は、標準のSQLインジェクションです。 OR 1=1はデータベースのすべての行を取得し、;はステートメントを終了し、--は残りをコメントアウトするので、それらの終了引用、ステートメントの終わり、その他の条件などは無視されます。

これらの答えは正しくありません。この問題の正解は次のとおりです。

" or ""="

理由:スマートハッカーは、ユーザー名またはパスワードのテキストボックスに「または」を挿入するだけで、データベース内のユーザー名とパスワードにアクセスできる可能性があります。結果SQLは有効です。 WHERE "" = ""は常にtrueであるため、customersテーブルからすべての行を返します。

0
Troy Zuroske

スマートハッカーが機能するインジェクションを探しているため、上記の回答はすべてインジェクションを正常に実行しているため、正解です。ハッカーが機能するインジェクションを見つけると、他の可能なクエリを探し回るのではなく、機能するクエリを拡張します。計算ロジックを実行して、次のような同じ結果を取得することもできます。 "OR" 1 + 1

0
LampShade

誰かがadminプロファイルのモジュールレイアウトをトーナメントモードに変更すると、新しいタブチートが表示されることがわかりました。したがって、上記の答えは\'or"1"="1"; --

0
J.Doo