sqlmap のタンパースクリプトで基本的なフィルターをバイパスする

Kali LinuxBeginner
オンラインで実践に進む

はじめに

この実験では、sqlmap の強力なタンパースクリプトを使用して、一般的な Web アプリケーションのフィルターをバイパスする方法を探ります。多くの Web アプリケーションは、SQL インジェクション攻撃を防ぐために基本的な入力検証とフィルタリングを実装しています。これらのフィルターは、一般的な SQL キーワード、スペース、またはその他の文字をブロックする可能性があります。sqlmap のタンパースクリプトは、SQL インジェクションペイロードを自動的に変更してこれらのフィルターを回避できるため、攻撃の効果を高めることができます。この実験では、回避が必要なシナリオを特定し、利用可能なタンパースクリプトを一覧表示し、特定のスクリプトを適用し、生成されたペイロードへのその効果を観察する方法を学びます。

回避が必要なシナリオの特定

このステップでは、タンパースクリプトが必要な理由を理解します。Web アプリケーションは、一般的な SQL インジェクションパターンを防ぐために、基本的なフィルターをよく使用します。たとえば、フィルターはスペースをブロックしたり、他の文字に置き換えたり、UNIONSELECT のようなキーワードをブロックしたりする場合があります。sqlmap のデフォルトのペイロードがブロックされた場合、これらのフィルターをバイパスするためにペイロードを変更する必要があります。

ユーザー入力のスペースをフィルターで除外する Web アプリケーションを想定した架空のシナリオを考えてみましょう。sqlmap' OR 1=1-- のようなペイロードを挿入しようとすると、フィルターはそれを 'OR1=1-- に変換し、ペイロードを無効にする可能性があります。タンパースクリプトは、sqlmap がこのような制限をバイパスできる代替ペイロードを生成するのに役立ちます。

回避技術を使用せずに基本的な sqlmap スキャンをシミュレートするために、ダミーの URL を使用します。これにより、後でタンパースクリプトありとなしで生成されたペイロードを比較するのに役立ちます。

以下の sqlmap コマンドを実行して、ダミーのターゲットに対する基本的なスキャンを開始します。このターゲットは実際には脆弱ではありませんが、sqlmap の動作と生成されたペイロードを観察することができます。

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --output-dir=/tmp/sqlmap_output_no_tamper

このコマンドは、基本的な SQL インジェクションスキャンを試みます。--dump オプションはデータのダンプに使用され、--batch は非対話モードで実行され、--forms はフォームをチェックし、--level 1 --risk 1 は検出レベルとリスクを設定し、--parse-errors はエラーメッセージを解析し、--technique=U は UNION クエリ SQL インジェクションを指定し、--eta は到着予定時刻を表示し、--output-dir は出力ディレクトリを指定します。

出力を観察してください。この特定のコマンドは、指定された URL で脆弱性を見つけられない可能性があります(これは一般的なテストサイトであり、この実験の目的に特別に構成されているわけではないため)が、目標は sqlmap の最初の試行を確認し、これらの試行がフィルターによってブロックされる場合があることを理解することです。

--list-tampers で利用可能なタンパースクリプトを一覧表示する

このステップでは、sqlmap で利用可能なすべてのタンパースクリプトを一覧表示する方法を学びます。sqlmap には、さまざまなタンパースクリプトが用意されており、それぞれが特定の種類のフィルターや WAF (Web Application Firewall) をバイパスするように設計されています。どのスクリプトが利用可能かを知ることは、回避のニーズに合ったものを選択するために不可欠です。

利用可能なすべてのタンパースクリプトを一覧表示するには、sqlmap--list-tampers オプションを使用します。

sqlmap --list-tampers

このコマンドは、sqlmaptamper ディレクトリにあるすべての .py ファイルのリストを出力します。各ファイルは異なるタンパースクリプトを表します。たとえば、space2comment.pyunionalltostring.pyapostrophemask.py などのスクリプトが表示される場合があります。各スクリプトには、スペースをコメントに置き換える、UNION ALL を文字列連結に変換する、アポストロフィをマスクするなど、特定の目的があります。

リストを確認し、名前からいくつかのスクリプトの目的を理解してみてください。たとえば、space2comment.py はスペースを SQL コメントに置き換えるように設計されており、スペースをブロックするフィルターをバイパスできます。

--tamper=space2comment でタンパースクリプトを選択して適用する

このステップでは、sqlmap スキャンに特定のタンパースクリプトを選択して適用します。この実験では、space2comment タンパースクリプトを使用します。このスクリプトは、SQL インジェクションペイロード内のスペースを /**/ (複数行コメント) シーケンスに置き換えます。このテクニックは、スペースをブロックまたは削除するが SQL コメントを許可するフィルターに対して効果的です。

タンパースクリプトを適用するには、--tamper オプションの後にスクリプト名(.py 拡張子なし)を指定します。

今回は space2comment タンパースクリプトを含めて、以下の sqlmap コマンドを実行します。

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper

--tamper=space2comment が追加されていることに注意してください。これにより、sqlmap は生成されたすべてのペイロードをターゲットに送信する前に、この特定のタンパースクリプトを通して処理するようになります。

出力は前のステップと似ているかもしれませんが、内部的には sqlmap はペイロードを変更しています。次のステップで、生成されたペイロードの違いを調べます。

選択したタンパースクリプトでスキャンを実行する

このステップでは、前のステップで space2comment タンパースクリプトを使用して sqlmap コマンドを実行しました。このステップの目的は、実行を強化し、ペイロード比較の準備をすることです。

実行したコマンドは次のとおりです。

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dump --batch --forms --level 1 --risk 1 --parse-errors --technique=U --eta --tamper=space2comment --output-dir=/tmp/sqlmap_output_with_tamper

このコマンドは sqlmap にスキャンを実行するように指示しますが、今回は space2comment タンパースクリプトを使用してペイロードを変更します。たとえば、UNION SELECT のようなペイロードは UNION/**/SELECT に変換される可能性があります。この微妙な変更は、単純なスペースフィルタリングメカニズムをバイパスすることがよくあります。

--output-dir=/tmp/sqlmap_output_with_tamper オプションにより、生成されたペイロードやログを含む sqlmap の出力が別のディレクトリに保存されます。これは、次のステップでペイロードを比較するのに役立ちます。

sqlmap スキャンが完了するまで待ちます。ダミーターゲットで脆弱性が見つからなかったとしても、重要なのは sqlmap がタンパリングされたペイロードを使用しようとしたことです。

タンパースクリプトあり・なしのペイロードを比較する

この最終ステップでは、space2comment タンパースクリプトありとなしの sqlmap によって生成されたペイロードを比較します。この比較により、タンパースクリプトがフィルターを回避するためにインジェクションペイロードをどのように変更するかを視覚的に示すことができます。

sqlmap は、送信するペイロードを含むアクティビティを、出力ディレクトリに記録します。ステップ 1 とステップ 3 のスキャンでは、異なる出力ディレクトリを指定しました。

まず、ペイロードが含まれている可能性のあるログファイルを探してみましょう。sqlmap は通常、出力ディレクトリ内のファイルに HTTP リクエストを保存します。

出力ディレクトリに移動し、リクエストログを探してください。正確なファイル名は異なる場合がありますが、通常は log/ ディレクトリ内か、ターゲットのディレクトリに直接保存されます。

一般的なログファイルを見つけて、リクエストを確認してみましょう。sqlmap はしばしば session.log のようなファイルを作成します。

grep を使用して、両方の実行からのログファイル内の一般的な SQL キーワードを検索します。

スペースの処理方法の違いを確認して、ペイロードを比較します。

echo "--- タンパースクリプトなしのペイロード ---"
grep -r "UNION" /tmp/sqlmap_output_no_tamper/ | head -n 5

echo ""
echo "--- タンパースクリプトありのペイロード ---"
grep -r "UNION" /tmp/sqlmap_output_with_tamper/ | head -n 5

「タンパースクリプトありのペイロード」の出力では、SQL キーワード(UNION SELECT など)内のスペースが /**/ コメントに置き換えられているのに対し、「タンパースクリプトなしのペイロード」の出力では通常のスペースが使用されていることが観察できるはずです。これは space2comment タンパースクリプトの効果を明確に示しています。

この比較は、基本的なフィルタリングメカニズムをバイパスするためにペイロードを変更するタンパースクリプトの効果を強調しており、sqlmap をペネトレーションテストのためのより汎用的なツールにしています。

まとめ

この実験では、sqlmap のタンパースクリプトを使用して基本的な Web アプリケーションフィルターをバイパスする方法を学びました。まず、入力フィルターに直面した場合の回避技術の必要性を理解しました。次に、--list-tampers を使用して利用可能なタンパースクリプトを一覧表示し、実践的なデモンストレーションのために space2comment スクリプトを選択しました。最後に、タンパースクリプトありとなしで sqlmap を実行し、生成されたペイロードを比較して、space2comment スクリプトがスペースを /**/ コメントにどのように変更したかを明確に観察しました。この実践的な経験により、一般的なフィルタリングメカニズムを回避することで、SQL インジェクションテスト能力を向上させるための基本的なスキルを習得しました。