web-dev-qa-db-ja.com

MariaDB SQLインジェクションの脆弱性?

WebサイトでSQLインジェクションをテストしています。

基本的に、私は次のURLでそれを試しています:

http://example.org/webpage/*

*の代わりにペイロードを挿入する必要があります。私がそこに入れようとすると:' OR 1=1/*、URLは次のようになります:http://example.org/webpage/'%20OR%201=1/*-これは出力です:

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '/*', 'IT', 'name=\' OR 1=1/*', 1499954730)' at line 1

これは、SQLインジェクションの脆弱性を意味しますか?もしそうなら、どうすればそれをsqlmapで悪用することができますか?これは私が実行しようとしたものです:

$ sqlmap -u "http://example.org/webpage/*"だが、注射可能なものは何もないと書かれており、失敗したと思う。

1
XRichardX

私は間違っている可能性がありますが、あなたの主な問題は、mysqlインジェクションを間違って実行しようとしていることであるとかなり確信しています。一般的な経験則として、ペイロードがSQL構文エラーをトリガーする可能性がある場合、SQLインジェクションを防止する試みは本当に機能しません。たとえば、準備済みクエリを使用していた場合、ペイロードがSQL構文エラーを発生させることはまったくありません。

この特定の場合の問題は、コマンドの残りの部分を隠すために間違った種類のコメントを使用していることです。この場合、MariaDBで単一行コメントを開始する2つのダッシュ(--)またはポンド記号(#)を使用した方が、おそらく幸運になります(SQLインジェクションが発生します)。使用しているコメント文字(/*)は、終了コメント文字のない複数行コメント文字です。これがSQLエラーの原因であると思われます。私は個人的にsqlmapに精通していませんが、私の疑いは、インジェクションの脆弱性があるとは思わないかもしれません。安全だからではなく、インジェクションペイロードがSQLエラーを生成しているため、インジェクションが発生していないためです。適切なコメント文字で再試行してください。

繰り返しますが、SQLエラーが発生するという事実から、SQLインジェクションに対して脆弱であると思います。SQLインジェクションを適切に実行していないだけです。

編集

次のステップは、sqlmapを少し無視することだと思います。 ' OR 1=1が行っている攻撃では、すべてのレコードが選択されます。あなたのURLは、これがview種類のページであり、一度に1つのレコードしか表示しないことを示しています。その結果、そのようなSQLインジェクションペイロードが実際に問題のページに結果をもたらさない場合が多くあります。これはトリッキーにすることができる部分です。SQLインジェクションは、実際に攻撃で何かを実行し、意味のある方法でアプリケーションに影響を与えることができる場合にのみ「成功」します。たとえば、ペイロードによってSQLコマンドのすべてのレコードが読み込まれるが、問題のページが最初の結果のみを暗黙的に表示する場合(これはviewタイプのページであるため)、気付かないでしょうあなたの注射が成功したこと。

不足しているのは、指定されたSQLインジェクションペイロードがコンテキスト固有であり、ページがSQLインジェクションに対して脆弱であっても、指定されたWebサイトのすべての場所で機能しない可能性があることです。そのため、SQLインジェクションはさらに扱いにくくなっています。一部のSQLインジェクションツールは、そのトリッキーの一部を自動化できますが、sqlmapがそのようなツールであるかどうかはわかりません。

しばらくsqlmapを捨てます。別の種類のペイロードを試してください。 ' OR 1=1を選択する代わりに、' AND 1=0を試してください。これは(理論的には)レコードがゼロになるはずです。したがって、404(または一般的な結果も)を受け取った場合、そのページがSQLインジェクションに対して脆弱であるという証拠を検討します。

もちろん、もしあなたが意地悪を感じているなら、何かが壊れるまで'; DROP TABLE users--でバリアントを試すことができます:)それは意味があります。

3
Conor Mancone

良い日2u。

注入ポイントを間違えた。 http://example.org/webpage/ '%20OR%201 = 1/* <---悪い http://example.org/webpage/ */<---良い

Web-debugger(e.x. LiveHTTPHeaders/BurpSuite)で完全なhttpリクエストをキャッチし、それをファイル(e.x. req.txt)に保存してください。その後、次の文字列でsqlmapを開始します:python sqlmap.py -r req.txt --threads 10 --level 5 --risk 3 --random-agent --batch -v 3と出力をここに貼り付けます。

最高です、N.T。

0
r3V0Lution