Implementarea codului sql

În SQL nedrenie, în funcție de tipul de baze de date și introducerea unor condiții poate permite unui atacator să execute interogare arbitrare la baza de date (de exemplu, pentru a citi conținutul de la orice masă, elimina, modifica sau adăuga date) să fie capabil să citească și / sau scrie fișiere locale și executa comenzi arbitrare de pe serverul destinație.






Un atac de tip SQL de injectare poate fi posibil din cauza procesării incorecte a datelor de intrare utilizate în interogările SQL.
Dezvoltatorul programelor de aplicații care lucrează cu bazele de date ar trebui să fie conștienți de astfel de vulnerabilități și să ia măsuri pentru a contracara implementarea SQL.

Principiul atacurilor de injecție SQL
Să presupunem că software-ul server, după ce a primit ID-ul parametrului de intrare, îl folosește pentru a crea o interogare SQL. Luați în considerare următorul script PHP:

Astfel, modificarea parametrilor de intrare prin adăugarea lor la constructele limbajului SQL determină o schimbare în logica SQL-interogare (în acest exemplu, în loc de știri, cu toate identificatorul specificat stocate în baza de date va fi ales de știri, pentru că expresia 1 = 1 este întotdeauna adevărat).

Embedding în Parametrii de coarde
software de tip server Presupunem că primește o cerere de recuperare a datelor în opțiunea de știri SEARCH_TEXT, utilizați-l în următoarea SQL-interogare (parametrii scăpat citate aici):

Dar, prin introducerea ghilimelei în parametrul search_text (care este folosit în interogare), putem schimba drastic comportamentul interogării SQL. De exemplu, trecând valoarea ") + și + (news_id_author = '1 ca parametru search_text, numim interogarea:

Folosind UNION
Limba SQL vă permite să combinați rezultatele mai multor interogări utilizând operatorul UNION. Acest lucru permite unui atacator să obțină acces neautorizat la date.
Luați în considerare scriptul de afișare a știrilor (ID-ul de știri pe care doriți să îl afișați este trecut în parametrul id):

Dacă un atacator trece parametrul -1 UNION SELECT 1, nume de utilizator, parolă, 1 FROM din parametrul id ca parametru id, aceasta va cauza executarea interogării SQL






Deoarece identificator de știri -1, evident, nu există, tabelul de știri este selectat înregistrare audio, dar va scădea în înregistrările rezultate neautorizate selectate din tabelul de administrare rezultată prin injecție SQL.
Folosind UNION + group_concat ()
În unele cazuri, un hacker poate efectua un atac, dar nu poate vedea mai mult de o coloană. În cazul MySQL, atacatorul poate folosi funcția:

care combină mai multe coloane într-una. De exemplu, pentru exemplul de mai sus, apelul funcției va fi:

Protejați coada cererii
Adesea, o interogare SQL susceptibilă la această vulnerabilitate are o structură care complică sau împiedică utilizarea uniunii. De exemplu script

Acesta este transmis printr-o structură care cuprinde un punct și virgulă, de exemplu 12; INSERT INTO admin (nume de utilizator, parola) VALUES ( 'HACKER', 'foo'); apoi într-o singură cerere vor fi executate două comenzi

iar intrarea HaCkEr va fi adăugată la tabelul de administrare neautorizat.
Tehnica atacurilor, cum ar fi introducerea codului SQL
Căutați scripturi vulnerabile la atac
În acest stadiu, atacatorul examinează comportamentul scripturilor de server atunci când manipulează parametrii de intrare pentru a detecta comportamentul lor anormal. Manipularea are loc cu toți parametrii posibili:
Datele transmise prin metodele POST și GET
Valorile lui [HTTP-Cookie]
HTTP_REFERER (pentru scripturi)
AUTH_USER și AUTH_PASSWORD (când se utilizează autentificarea)
De regulă, manipularea este redusă la substituirea în parametrii caracterului unui singur ghilimel (mai puțin frecvent dublu sau spate).
Un comportament anormal este orice comportament în care paginile primite înainte și după înlocuirea cotelor sunt diferite (și pagina despre formatul incorect al parametrilor nu este afișată).
Cele mai frecvente exemple de comportament anormal sunt:
este afișat un mesaj despre diverse erori;
Când solicitați date (de exemplu, știri sau lista de produse), datele solicitate nu sunt afișate deloc, deși pagina este afișată
și așa mai departe. d. Rețineți că există cazuri în care mesajele de eroare din cauza aspectului specific pagina nu este vizibil în browser-ul, chiar dacă acestea sunt prezente în HTML sa-cod.
Protecția împotriva atacurilor, cum ar fi introducerea codului SQL
Pentru a vă proteja împotriva acestui tip de atac, trebuie să filtrați cu atenție parametrii de intrare ale căror valori vor fi folosite pentru a construi interogarea SQL.
Filtrarea parametrilor de șir
Să presupunem că codul care generează interogarea (în limbajul de programare Pascal) arată astfel:

Pentru a implementa codul a fost imposibil, pentru unele DBMS, inclusiv MySQL, trebuie să citezi toți parametrii string. În parametrul înlocui citate în „apostrof în \„backslash la \\ (aceasta se numește“screening caractere speciale") Este posibil să se facă un astfel de cod .:

Pentru PHP, filtrarea poate fi:







Articole similare

Trimiteți-le prietenilor: