Ho una pagina HTML piuttosto semplice che invia un username
e password
al server tramite il metodo POST
:
<doctype html>
<head>
<title>SQLMap dynamic parameters</title>
</head>
<body>
<form id="sqliForm" action="sqli.php" method="POST">
<input id="username" type="text" name="username">
<input id="password" type="password" name="password">
<input type="submit" value="Submit">
</form>
</body>
</html>
Il mio obiettivo è eseguire un test automatizzato che SQLMap fornisca contro sqli.php
. Immagino, per quanto semplice possa essere. Tuttavia , c'è anche un pezzo JavaScript sul lato client che aggiunge una stringa pseudo-casuale ai campi username
e password
dopo aver fatto clic sul pulsante "Invia", che trasforma i nomi dei campi in smth . come usernamePgZd4H
e password3vOklA
, apparentemente diverso ogni volta. Il codice JS è stato compreso in modo tale da poter prevedere il nome corretto dei campi al momento dell'invio.
Inutile dire che SQLMap fallisce qui e seleziona solo i nomi dei campi che sono attualmente all'interno del codice HTML (cioè username=&password=
quando si passa l'opzione --forms
a sqlmap.py
). Ho intrapreso una buona vecchia tecnica di Manual Staring e ho scoperto che c'è un'opzione --eval
per SQLMap che potrebbe aiutarmi: potrei generare un nome utente corretto ma il suo valore è ciò che voglio testare e non specificarmi come nell'esempio fornito dal manuale:
python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
C'è un modo in cui posso sfruttare i poteri di SQLMap qui (o forse anche un altro strumento in combinazione con esso)?
P.S .: Ecco un esempio di script PHP che, si spera, illustra il problema un po 'meglio delle parole. Si può vedere che il server confronta gli hash SHA1 del timestamp UNIX negli ultimi 3 secondi e qualsiasi cosa provenga dal lato client. Quasi mai una dura barriera per un determinato attaccante, ma sembra che impedisca i tentativi automatici. Il codice JavaScript nella parte inferiore del file cambia i nomi dei campi al momento dell'invio del modulo.
P.P.S .: Il mio altro pensiero era che avrei potuto scrivere uno script BASH e inserire il nome utente e la password "corretti" risultanti in SQLMap, ma poi di nuovo, sarebbe vero solo per il primo requst (?)