web-dev-qa-db-ja.com

sqlmapがコードでSQLインジェクションを検出できないのはなぜですか?

開発PCに [〜#〜] xampp [〜#〜] をインストールし、Apache HTTPサーバーとMySQLを起動しました。

テストページ「CDコレクション」が付属し、次のバックエンドPHPコード:

mysql_query("DELETE FROM cds WHERE id=".round($_REQUEST['id']));

私はPHPの専門家ではありませんが、SQLインジェクションを防ぐためにround呼び出しがあると思います。したがって、PHPコードから削除しました。次のコードを残しました。

mysql_query("DELETE FROM cds WHERE id=".$_REQUEST['id']);

URLのクエリパラメーターを変更してデータベースに対して好きなようにできることを確認したので、SQLインジェクションの脆弱性は確実にそこにあります。

現在、sqlmapを使用してSQLインジェクションの脆弱性を見つけようとしています。私はそれを次のように実行します:

python sqlmap.py -u "http://127.0.0.1/xampp/cds.php?action=del&id=14"

しかし、それは以下を返します:

[16:01:47] [警告] GETパラメータ 'id'は注入できません[16:01:47] [重要]すべてのパラメータは注入できません。テストを実行するには、-level /-risk値を増やしてください。 --te chniqueスイッチを指定せずに再実行します。ターゲットページのテキストコンテンツのパーセンテージが低い場合は、--text-onlyスイッチを使用してください(ページコンテンツの〜15.27%がテキストです)。

私が間違っている可能性があることについて何か考えはありますか?

サーバーがエラーや警告を表示しない可能性は非常に高いです。 SqlmapはSQLの注入のようなペイロードを挿入しようとし、Webアプリケーションの「状態」を監視します。 sqlmapは脆弱なコードまたはDBコンテンツにアクセスできないため、Webアプリケーションの動作(この場合は「視覚的」な動作(警告/エラーなし-潜在的なsql-inj。なし)を観察することによって、潜在的な脆弱性を推測することしかできません。

しかし、sqlmapはかなり良いヒントを与えてくれました:レベル/リスク値を増やしてみてください:

    python sqlmap.py -u "http://..." --level=3 --risk=3

その変更後、ペイロード(Webアプリケーションに送信される)の量を増やし、ブラインドsql.inj!を見つけます。つまり、レベル3(および--risk = 3)では、sqlmapは「目に見える」効果のみをチェックしません。 sqlの場合、サーバーの応答を遅らせる時間のかかる操作[BENCHMARK()]を使用します。注射。発生します。

8
p____h

そのページにアクセスするには、Webアプリケーションにログインする必要がありますか?その場合、sqlmapには認証cookieがないため、--cookie=...を使用して有効なcookieをフィードする必要がある場合があります。

私はsqlmapの経験はあまりありませんが、オンラインのWebページに sqlmap 0.9は信頼性が低く、最新の開発バージョンの方が信頼性が高いと記載されていることに気づきました 。それはあなたが試すことができるもう一つのことです。

常に明白です:引用した出力で提案されている推奨事項を試しましたか?

2
D.W.

1)リポジトリの最新リビジョンを使用してください(指定された出力から、古いv0.9を使用していることが明らかです-それまでに多くのことが変更されています):
$ svn checkout https://svn.sqlmap.org/sqlmap/trunk/sqlmap sqlmap-dev

2)エラーメッセージは、sqlmapの検出には必要ありません(他の「ツール」の場合と同様)。 Sqlmapは、それを使用するために何かを注入する方法を見つけ、エラーメッセージを検索するだけではありません(何も証明されません)。

3)悪用可能であると確信している場合はレベル/リスクを増やします(例:--level = 3 --risk = 3)。ただし、ほとんどの非ORケースでは、デフォルトのレベル/リスクで十分です。

敬具、
ミロスラフ・スタンパー

2
stamparm