web-dev-qa-db-ja.com

sqlmapがSQLインジェクションの脆弱性を見つけられない

だから私は自分のアプリケーションのSQLインジェクションの脆弱性を学ぶためにsqlmapを始めたところです。ここでは、いくつかのチュートリアルに従って手順を実行しました。

だからこれは私が従ったステップです:

  1. sqlmap.py -u "http://www.myurl.org/dis/data.php?id=3" --dbs

コンソール表示:

[11:19:45] [INFO] testing connection to the target URL
[11:19:46] [INFO] testing if the target URL is stable. This can take a couple of
seconds
[11:19:47] [INFO] target URL is stable
[11:19:47] [INFO] testing if GET parameter 'id' is dynamic
[11:19:48] [INFO] confirming that GET parameter 'id' is dynamic
[11:19:48] [WARNING] GET parameter 'id' does not appear dynamic
[11:19:49] [WARNING] heuristic (basic) test shows that GET parameter 'id' might
not be injectable
[11:19:49] [INFO] testing for SQL injection on GET parameter 'id'
[11:19:49] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[11:19:56] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[11:19:59] [INFO] testing 'PostgreSQL AND error-based - WHERE or HAVING clause'
[11:20:01] [INFO] testing 'Microsoft SQL Server/Sybase AND error-based - WHERE o
r HAVING clause'
[11:20:04] [INFO] testing 'Oracle AND error-based - WHERE or HAVING clause (XMLT
ype)'
[11:20:06] [INFO] testing 'MySQL inline queries'
[11:20:07] [INFO] testing 'PostgreSQL inline queries'
[11:20:07] [INFO] testing 'Microsoft SQL Server/Sybase inline queries'
[11:20:07] [INFO] testing 'Oracle inline queries'
[11:20:08] [INFO] testing 'SQLite inline queries'
[11:20:08] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[11:20:11] [INFO] testing 'PostgreSQL > 8.1 stacked queries'
[11:20:13] [INFO] testing 'Microsoft SQL Server/Sybase stacked queries'
[11:20:58] [WARNING] using unescaped version of the test because of zero knowledge of the back-end DBMS. You can try to explicitly set it using option '--dbms'
[11:21:27] [WARNING] GET parameter 'id' is not injectable
[11:21:27] [CRITICAL] all tested parameters appear to be not injectable. Try to increase '--level'/'--risk' values to perform more tests. Also, you can try to rerun by providing either a valid value for option '--string' (or '--regexp')
[11:21:27] [WARNING] HTTP error codes detected during run:
500 (Internal Server Error) - 5 times

私は知る必要がある :

  1. なぜデータベースを取得できないのですか?
  2. これは '--string'(または '--regexp')とはどういう意味ですか?
2
user2376425

Sqlmapコマンドに--level = 3 --risk = 3を追加してみましょう。リスクとレベルを上げると、sqlmapはより巧妙なものを見つけて悪用しようとします。これは、sqlmapが目に見えるsqlインジェクションの可能性だけでなく、ブラインドスタフも試行することを意味します。

同じ結果で、sqlmapが正しいパラメーターにポストしているかどうかを識別するために、脆弱なパラメーターに*を追加できます。

4
CorpusCallosum

脆弱性がないように見えるか、サーバーがSQLインジェクションの脆弱性を修正しない方法で入力をフィルタリングしていますが、香りからsqlmapをスローします。 sqlmapが注入を適切に識別するようにするには、おそらくいくつかの作業を行う必要があります。これについては、興味深い記事があります Minded Securityで

--stringおよび--regexpオプションは、結果データを含むサーバーからの有効な応答を識別し、そのデータを抽出することです。これは二分法と呼ばれ、ドキュメントで説明されています。

各HTTP応答について、元の要求とHTTP応答ヘッダー/本文を比較することにより、ツールは注入されたステートメントの出力を文字ごとに推測します。または、ユーザーは文字列または正規表現を指定して、Trueページで照合することもできます。この手法を実行するためにsqlmapに実装された二分法アルゴリズムは、最大7つのHTTPリクエストで出力の各文字をフェッチできます。出力が平文のプレーンな文字セット内にない場合、sqlmapはアルゴリズムをより大きな範囲に適合させて出力を検出します。

3
Polynomial