Ce este o injecție SQL?
Numărul de site-uri și pagini de pe Web este în continuă creștere. Pentru dezvoltarea sunt luate de toți cei care pot. Și programatorii web novici folosesc adesea cod nesigur și vechi. Și asta creează o mulțime de lacune pentru intruși și hackeri. De asemenea, ei folosesc. Una dintre cele mai clasice vulnerabilități este injectarea SQL.
conținut
Un pic de teorie
Mulți oameni știu că majoritatea site-urilor și serviciilor din rețea sunt folosite pentru a stoca baze de date SQL. Acesta este un limbaj de interogare structurat care vă permite să gestionați și să administrați stocurile de date. Există multe versiuni diferite ale sistemelor de gestionare a bazelor de date - Oracle, MySQL, Postgre. Indiferent de nume și de tipul, aceștia utilizează cererile de date în mod egal. Aici se află vulnerabilitatea potențială. În cazul în care dezvoltatorul nu a reușit să se ocupe în mod corespunzător și în siguranță, să solicite, un atacator poate să profite de acest lucru și de a folosi tactici speciale pentru a avea acces la baza de date, și apoi - și la tot managementul site-ului.
Pentru a evita astfel de situații, trebuie să optimizați inteligent codul și să monitorizați cu atenție ce solicitare este procesată în ce fel.
Teste de injectare SQL
Pentru a stabili prezența vulnerabilității în rețea, există o mulțime de sisteme automate de software automatizate. Dar puteți efectua un test simplu manual. Pentru a face acest lucru, mergeți la unul dintre site-urile investigate și încercați să provocați o eroare de bază de date în bara de adrese. De exemplu, un script de pe un site ar putea să nu proceseze cererile și să nu le creeze.
De exemplu, există some_site / index.php? Id = 25
Cea mai ușoară modalitate este de a pune după 25 de citate și de a trimite o cerere. Dacă nu s-a produs nici o eroare, fie toate solicitările sunt filtrate pe site și procesate corect, fie ieșirea lor este dezactivată în setări. Dacă pagina a fost reîncărcată cu probleme, atunci există o vulnerabilitate pentru injectarea SQL.
După ce se găsește, puteți încerca să scăpați de ea.
Pentru a implementa această vulnerabilitate, trebuie să știți puțin comenzi de interogări SQL. Una dintre ele este UNIUNEA. Combină mai multe rezultate ale interogărilor într-una. Deci, puteți calcula numărul de câmpuri din tabel. Un exemplu de prima interogare arată astfel:
- some_site / index.php? id = 25 UNIUNEA SELECTĂ 1.
În majoritatea cazurilor, o astfel de înregistrare ar trebui să producă o eroare. Acest lucru înseamnă că numărul de câmpuri nu este egal cu 1. Astfel, selectând opțiunile de la 1 și mai mult, puteți să le setați numărul exact:
- some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.
Adică atunci când eroarea nu mai apare, înseamnă că numărul de câmpuri este ghicit.
Există, de asemenea, o soluție alternativă la această problemă. De exemplu, când numărul de câmpuri este mare - 30, 60 sau 100. Aceasta este comanda GROUP BY. Se grupează rezultatele interogării printr-o anumită caracteristică, de exemplu id:
- some_site / index.php? id = 25 GROUP DE 5.
Dacă erorile nu au fost primite, atunci există mai multe câmpuri decât 5. Astfel, înlocuind variantele dintr-o gamă destul de largă, este posibil să se calculeze câte dintre ele sunt de fapt.
Acest exemplu de injectare SQL este pentru începători care doresc să încerce ei înșiși în testarea site-ului lor. Este important să ne amintim că pentru accesul neautorizat la altcineva există un articol din Codul penal.
Principalele tipuri de injecții
Implementarea vulnerabilităților prin injectarea SQL se poate face în mai multe moduri. Următoarele sunt cele mai populare tehnici:
UNION interogare SQL injecție. Un exemplu simplu de acest tip a fost deja luat în considerare mai sus. Acesta este implementat din cauza unei erori în verificarea datelor primite, care nu sunt filtrate în nici un fel.
Eroare SQL bazată pe injecție. După cum sugerează și numele, de asemenea, acest tip utilizează erori, trimiterea unor expresii incorecte din punct de vedere sintactic. Apoi, antetele de răspuns sunt interceptate, analizând care, puteți efectua mai târziu injectarea SQL.
grupată interogări SQL injecție. Această vulnerabilitate este determinată de executarea unor solicitări consecutive. Se caracterizează prin atașamentul de la capătul semnei ";". Această abordare este adesea implementată pentru a accesa implementarea datelor de citire și scriere sau pentru a controla funcțiile sistemului de operare, dacă privilegiile o permit.
Software pentru căutarea vulnerabilităților SQL
Programele disponibile pentru injecții SQL au de obicei două componente - scanarea site-ului pentru posibile vulnerabilități și utilizarea acestora pentru a avea acces la date. Există astfel de utilități pentru aproape toate platformele cunoscute. Funcționalitatea lor facilitează foarte mult verificarea site-ului pentru posibilitatea de hacking SQL injection.
Sqlmap
Scaner foarte puternic, care lucrează cu cele mai cunoscute DBMS-uri. Suporta diferite tehnici pentru implementarea injectiei SQL. Are abilitatea de a recunoaște automat tipul de hash cu parolă și cracarea acestuia în dicționar. Există, de asemenea, funcționalitatea încărcării și încărcării fișierelor de pe server.
Instalarea în mediul Linux se realizează utilizând următoarele comenzi:
- git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
- cdsqlmap-dev /,
- ./sqlmap.py --wizard.
Pentru Windows, există o opțiune cu o linie de comandă și cu o interfață grafică de utilizator.
jSQL Injection
jSQL Injection este un instrument cross-platform pentru testarea utilizării vulnerabilităților SQL. Scrise în Java, deci sistemul trebuie să aibă JRE instalat. Poate gestiona cererile GET, POST, header, cookie. Are o interfață grafică convenabilă.
Instalarea acestui software este după cum urmează:
wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-E -o `/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2} .jar ` cap-n 1`
Rularea este efectuată cu comanda java -jar ./jsql-injection-v*.jar
Pentru a începe verificarea unui site pentru o vulnerabilitate SQL, trebuie să introduceți adresa acestuia în câmpul de sus. Ele sunt separate pentru GET și pentru POST. Dacă rezultatul este pozitiv, în fereastra din stânga apare o listă cu tabelele disponibile. Acestea pot fi vizualizate și pot învăța câteva informații confidențiale.
Pentru a căuta panouri administrative, utilizați fila "Pagina de administrare". Utilizează șabloane speciale pentru a căuta în mod automat înregistrările de sistem ale utilizatorilor privilegiați. Dintre acestea, puteți obține doar un hash de parolă. Dar este disponibil și în instrumentele programului.
După ce ați găsit toate vulnerabilitățile și ați injectat interogările necesare, utilitarul vă va permite să încărcați fișierul pe server sau, invers, să îl descărcați de acolo.
SQLi Dumper v.7
Acest instrument este un instrument ușor de utilizat pentru căutarea și implementarea vulnerabilităților în SQL. Produce-o pe baza așa-numitelor exerciții. Lista lor poate fi găsită pe Internet. Dorky pentru injecția SQL este un model special de interogări de căutare. Cu ajutorul lor puteți găsi potențial site vulnerabil prin orice motor de căutare.
Instrumente pentru instruire
Site-ul itsecgames.com are un set de instrumente special, care permite, de exemplu, să prezinte cum să faceți o injecție SQL și să o testați. Pentru ao folosi, trebuie să o descărcați și să o instalați. Arhiva conține un set de fișiere, care este structura site-ului. Pentru a le instala, veți avea nevoie de setul existent de server web Apache, MySQL și PHP.
După despachetarea arhivei în dosarul serverului web, este necesar să mergeți la adresa introdusă la instalarea acestui produs software. Se va deschide o pagină cu înregistrarea utilizatorului. Aici trebuie să introduceți detaliile dvs. și faceți clic pe "Creați". Prin traducerea utilizatorului într-o fereastră nouă, sistemul vă solicită să selectați una dintre opțiunile de testare. Dintre acestea, ambele sunt descrise injecții și multe alte sarcini de testare.
Merită să luați în considerare un exemplu de tip GET / Căutare de tip injecție SQL. Aici trebuie să o selectați și să apăsați pe "Hack". Înainte ca utilizatorul să apară un șir de căutare și o imitație a unui anumit site cu filme. Puteți trece prin filme pentru o lungă perioadă de timp. Dar există doar 10. De exemplu, puteți încerca să intrați Iron Man. Va apărea un film, ceea ce înseamnă că site-ul funcționează și există tabele în el. Acum trebuie să verificăm dacă scriptul filtrează caractere speciale, în special, ghilimele. Pentru a face acest lucru, adăugați "" la linia de adresă. Și, trebuie să faceți acest lucru după titlul filmului. Site-ul va returna o eroare. Eroare: Aveți o eroare în SQL, care spune că caracterele sunt încă procesate greșit. Deci, puteți încerca să înlocuiți cererea dvs. Dar trebuie să calculați mai întâi numărul de câmpuri. Acesta este utilizat pentru această comandă, care se introduce după ghilimelele: https://testsites.com/sqli_1.php?title=Iron+Man „comanda 2 --action = căutare.
Această comandă afișează pur și simplu informații despre film, adică numărul de câmpuri este mai mare de 2. O cratimă dublă îi spune serverului că cererile rămase ar trebui să fie respinse. Acum avem nevoie să sortăm, înlocuind toate valorile mari până când se emite o eroare. În cele din urmă, se pare că câmpurile vor fi 7.
Acum este momentul să obțineți ceva util din baza de date. Va trebui să modificați interogarea puțin în bara de adrese, aducând-o la acest formular: https://testsites.com/sqli_1.php?title=Iron+Man `union select 1, database (), user (), 4, password, 6, 7 de la utilizatori --action = căutare. Ca urmare a execuției sale, veți vedea linii cu hash-uri de parolă care pot fi transformate cu ușurință în caractere inteligibile utilizând unul dintre serviciile online. Puțini puși și luați numele câmpului cu un login, puteți accesa înregistrarea altcuiva, de exemplu, administratorul site-ului.
Există multe tipuri de injecții în produs, pe care le puteți practica. Merită să ne amintim că aplicarea acestor abilități în rețea, pe site-uri reale, se poate dovedi a fi pedepsită.
Injecție și PHP
Ca regulă, codul PHP este responsabil pentru procesarea necesară a cererilor venite de la utilizator. Prin urmare, la acest nivel trebuie să construiți protecție împotriva injecțiilor SQL în PHP.
În primul rând, merită să oferiți câteva recomandări simple pe baza cărora trebuie să faceți acest lucru.
- Datele trebuie întotdeauna prelucrate înainte de a fi introduse în baza de date. Acest lucru se poate face fie prin utilizarea expresiilor existente, fie prin organizarea manuală a interogărilor. Și aici merită luată în considerare faptul că valorile numerice sunt convertite la tipul necesar;
- Evitați solicitarea de apariție a diferitelor structuri de control.
Acum, un pic despre regulile de interogare în MySQL pentru a proteja împotriva injecțiilor SQL.
Atunci când scrieți orice expresie pentru o interogare, este important să separați datele de la cuvintele cheie SQL.
- SELECT * FROM tabel WHERE name = Zerg.
În această configurație, sistemul ar putea crede că Zerg - numele oricărui câmp, deci trebuie să-l includeți în ghilimele.
- SELECT * FROM tabel WHERE nume = `Zerg`.
Cu toate acestea, există situații în care valoarea în sine conține citate.
- SELECT * FROM tabel WHERE name = `Cote d`Ivoire`.
Aici se ocupe doar o parte din Côte d, iar restul poate fi percepută ca o echipă, care, desigur, nu. Prin urmare, apare o eroare. Deci, trebuie să afișați astfel de date. Pentru a face acest lucru, utilizați coloana vertebrală- .
- SELECT * FROM tabelul WHERE name = `cat-e` Ivory. `
Toate cele de mai sus se aplică șirurilor. Dacă acțiunea are loc cu un număr, atunci nu are nevoie nici de citate, nici de cotețe. Cu toate acestea, ele trebuie să conducă în mod obligatoriu la tipul de date solicitat.
Există o recomandare ca numele câmpului să fie închis în coloana verigă. Acest simbol este în partea stângă a tastaturii, împreună cu tilda "~". Acest lucru este necesar pentru ca MySQL să distingă cu precizie numele câmpului de la cuvântul cheie.
Funcționare dinamică cu date
Foarte des, pentru a obține orice date din baza de date, se utilizează interogări generate dinamic. De exemplu:
- SELECT * FROM tabel WHERE număr = `număr $`.
Aici, numărul de $ este trecut ca o definiție a valorii câmpului. Ce se va întâmpla dacă pisica-Ivoire intră în ea? A apărut o eroare.
Pentru a evita acest lucru, desigur, puteți include "citate magice" în setări. Dar acum datele vor fi examinate acolo unde este necesar și nu sunt necesare. În plus, dacă codul este scris manual, puteți petrece un pic mai mult timp încercând să creați un sistem rezistent la efracție.
Pentru a adăuga o slash, puteți utiliza mysql_real_escape_string.
$ number = mysql_real_escape_string (număr $);
$ anul = mysql_real_escape_string ($ an);
$ Query = "INSERT INTO tabel (număr, an, clasa) values ( `număr $`, `$ an`, 11)".
Deși codul a crescut în volum, dar, potențial, va funcționa mult mai sigur.
substituenţi
Suporturile sunt marcaje originale, prin care sistemul recunoaște că o funcție specială trebuie înlocuită în acest loc. De exemplu:
$ sate = $ mysqli-> pregăti ("SELECT District FROM FROM WHERE Name =?");
$ sate-> bind_param ("s", număr $);
$ sate-> execute ();
Această secțiune de cod pregătește șablonul de interogare, apoi leagă numărul variabilei și îl execută. Această abordare vă permite să împărțiți procesarea solicitării și implementarea ei. Astfel, vă puteți proteja de utilizarea injectării unui cod rău intenționat în interogări SQL.
Ce poate face un atacator?
Protecția sistemului este un factor foarte important care nu poate fi neglijat. Desigur, un simplu site de vizită va fi mai ușor de restaurat. Și dacă acesta este un portal excelent, serviciu, forum? Ce consecințe pot avea dacă nu te gândești la securitate?
În primul rând, un hacker poate rupe atât integritatea bazei de date, cât și complet. Și dacă administratorul site-ului sau hoster nu a făcut o copie de rezervă, atunci nu va fi ușor. În plus, un atacator care a intrat într-un singur site poate trece la alte persoane aflate pe același server.
Următorul este furtul datelor personale ale vizitatorilor. Cum să le folosiți - totul este limitat doar de imaginația hackerului. Dar, în orice caz, consecințele nu vor fi foarte plăcute. Mai ales dacă conține informații financiare.
De asemenea, un atacator poate îmbina baza de date el însuși, și apoi extorta bani pentru întoarcerea ei.
Dezinformarea utilizatorilor în numele administratorului site-ului, care nu este a lor, poate avea și consecințe negative, deoarece este posibilă fraudarea.
concluzie
Toate informațiile din acest articol sunt furnizate numai în scop informativ. Utilizați-l doar pentru a vă testa propriile proiecte atunci când vulnerabilitățile sunt detectate și fixate.
Pentru un studiu mai aprofundat al tehnicilor de modul de efectuare a SQL-injectare, este necesar să se înceapă cu capacitățile de cercetare actuale și caracteristici ale limbajului SQL. Cum se fac interogări, cuvinte cheie, tipuri de date și aplicarea tuturor acestor informații.
De asemenea, nu puteți face fără a înțelege funcționarea funcțiilor PHP și a elementelor HTML. Principalele puncte vulnerabile pentru utilizarea injecțiilor sunt bara de adrese, căutarea și diverse câmpuri. Studiul funcțiilor PHP, modul în care sunt implementate și posibilitățile vă vor ajuta să înțelegeți cum pot fi evitate erorile.
Prezența multor unelte de software gata vă permite să efectuați o analiză aprofundată a site-ului pentru vulnerabilități cunoscute. Unul dintre produsele cele mai populare este kali linux. Această imagine a unui sistem de operare bazat pe Linux, care conține un număr mare de instrumente și programe care pot efectua analize cuprinzătoare a rezistenței site-ului.
De ce trebuie să știu cum să hackez site-ul? Este foarte simplu - este necesar pentru a avea o idee despre locurile potențial vulnerabile ale proiectului sau site-ului dvs. Mai ales dacă este un magazin online cu abilitatea de a plăti online, unde datele de plată ale utilizatorului pot fi compromise de atacator.
Pentru cercetarea profesională, există servicii de securitate a informațiilor care vor putea verifica site-ul în funcție de diferite criterii și adâncime. De la injecții simple HTML la inginerie socială și phishing.
- Sisteme de management al vieții și bazelor de date
- Oracle Database: principalele caracteristici ale DBMS-ului Oracle
- Fișier SQL. Formatul de fișier SQL: descrierea extensiei
- MySQL este ceea ce și unde se aplică?
- Crearea unei baze de date MySQL face parte din orice site
- Sistem de gestionare a bazelor de date Microsoft Servers SQL
- MySQL - ce este? Eroare MySQL
- Oracle - ce este? Oracle Database
- MySQL - cererea în cerere. MySQL: exemple de interogări. Întrebări interogate MySQL
- MySQL - Comenzi pentru Windows Console
- "Capcane" de comenzi DML Actualizați MySQL
- Instalarea SQL cu
- Șterge instrucțiunea Șterge MySQL
- Practica de utilizare a funcției MySQL count
- Ștergerea duplicatelor MySQL
- Cum se creează o bază de date mysql
- Cum se utilizează în MySQL: timestamp și datetime
- Accesați rezultatele probelor prin intermediul matricei de preluare MySQL
- MySQL LIMIT: descriere, sintaxă, exemple și recomandări
- Tipuri de date de bază Mysql
- DBMS este un sistem de management al datelor