web-dev-qa-db-ja.com

sqlmapによるクリーンなURLのテスト

URLをクリーンにするためにmod rewrite(またはそのようなもの)を使用しているURLでsqlmapを使用してSQLインジェクションの脆弱性をテストすることは可能ですか?

次のようなURLを持つサイトをテストする方法を知っています:http://mysite.com/?id=1

しかし、http://mysite.com/1のような、クリーンなURLを持つ私のサイトはどうですか?

19
chadgh

URIで*を使用して、URIインジェクションポイントを作成する必要があります。だから代わりに:

sqlmap.py -u "website.com/script/paramrewrited1/paramrewrited2"

使用する:

sqlmap.py -u "website.com/script/paramrewrited1*/paramrewrited2*"

その他の使用オプションについては sqlmap wiki を参照してください。そのページから:

URI注入ポイント

注入ポイントがURI自体の中にある特別な場合があります。手動で指定しない限り、sqlmapはURIパスに対して自動テストを実行しません。 sqlmapでテストしてSQLインジェクションを利用する各URIポイントの後にアスタリスク(*)を追加して、コマンドラインでこれらのインジェクションポイントを指定する必要があります。

これは、たとえば、Apache Webサーバーの mod_rewrite モジュールが使用されている場合、または他の同様のテクノロジーを使用している場合に特に便利です。

有効なコマンドラインの例は次のとおりです。

$ python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"
24
dz.

あなたの質問を理解していれば、sqlmapはこの状況に対処するように設計されていないと思います(Webサーバーが要求パラメーターの表現方法についてWeb標準に従っていない場合)。だから、私はいくつかのオプションを考えることができます:

  1. RLの書き換えをオフにします。 sqlmapを実行できるように、Webサーバーで要求パラメーターの書き換えを一時的にオフにします(簡単な方法がある場合)。

  2. Try POST requests。 WebサーバーがGETリクエストのリクエストパラメータを非標準的な方法でエンコードすることを示しました。 POSTリクエストのリクエストパラメータをどのようにエンコードしますか?ウェブサーバーがリクエストパラメータをより標準的な方法でエンコードすることを伝え、すべてのリクエストがGETとPOSTの両方を介してアクセスできる場合(設定の誤りですが、一般的なものです)、_を送信してサーバーをテストできます。 GETリクエストの代わりにPOSTリクエスト。 sqlmapの--dataオプションを参照してください。

  3. 他のツールを使用します。 sqlmapはこの特定のケース向けに設計されていないようなので、他のツールを探します。

  4. sqlmapを変更します。 sqlmapはオープンソースです。ソースコードに飛び込んで拡張し、考えているユースケースをサポートすることができます。 (sqlmapの-pオプションを処理するコードを確認することをお勧めします。)実は無料です。異常な状況が発生した場合は、それをまだ処理していない可能性があり、自分で少し作業を行わなければならない可能性があることを期待する必要があります。このルートをたどる場合は、sqlmapメンテナにコードを寄付してコミュニティに還元してください。

3
D.W.