Sql injecție explicație simplă pentru începători (partea 1)
testere de penetrare Educație - testere de penetrare de formare din BlackDiver. Cursul
Esența SQL injecție
Probabil a auzit deja gluma de Internet: „De ce sunt toate desprinzând de aceeași: De exemplu, o lecție pe bufnițe de desen. Prima jumătate de oră lung în detaliu remiză ochi bufniță. Și apoi - din nou - timp de cinci minute - vopsea restul bufnițe ".
Asta e chiar o imagine pe această temă este:
Scopul acestui articol - pentru a trage cu ochiul pe bufnita la o explicație simplă normală a ceea ce este SQL-injectare, ceea ce este esența modului cum și de ce sunt periculoase.
Pentru experimente, vom avea un script foarte simplu și vulnerabil SQL injecție:
Cuvântul SELECT, în SQL-interogare arată ce date pentru a prelua. De exemplu, puteți specifica un nume SELECT, sau SELECT nume, parola. Apoi, în primul caz ar fi de numai numele ar fi pentru a obține o masă, iar în al doilea - doar numele și parola. Asteriscul spune că aveți nevoie pentru a obține toate valorile. Ie SELECT * - aceasta înseamnă pentru a obține toate valorile.
DE LA spune în cazul în care au nevoie pentru a obține. După din numele de masă ar trebui să fie, de exemplu. E. Înregistrarea de la membrii a spus, ieși din membrii din tabel.
Următoarea unde. Dacă studia orice limbaje de programare, acest cuvânt este mai amintește de „Dacă“. Și apoi du-te condiții, aceste condiții pot fi adevărate (1) sau fals (0). În cazul nostru,
(Nume = '$ nume') și (parola = '$ parola')
Aceasta înseamnă că această condiție va fi adevărat dacă numele variabilei $ transferate va fi egală cu valoarea numelui câmpului în tabel și să treacă o „parolă $ variabilă este egală cu valoarea câmpului parolă în tabel. Dacă oricare condiție nu este îndeplinită (nume de utilizator sau parola incorectă), atunci nimic nu va fi luat din tabel. .. Aceasta este, expresia SELECT * FROM membri WHERE nume = „$ nume“ AND parola = „$ parola“ înseamnă: în tabelul de membri pentru a lua valorile din toate domeniile, în cazul în care îndeplinesc condiția - la fel trece numele de utilizator și parola cu cei care îndeplinesc în tabel.
Acest lucru este de înțeles. Să ne acum, de exemplu, numele de utilizator înlocui un singur citat:
Nu există date este primit, în schimb vom vedea o eroare:
Rezultatul este excelent! Avem o listă cu toate înregistrările din tabel.
ORDER BY și UNION - Acasă Prieteni SQL injecție
Avem deja datele care nu au fost disponibile pentru cei care nu au nume de utilizator și o parolă valide. Poate orice altceva prins? Da, puteți obține o groapa plină de masă (amintiți-vă, noi încă nu avem o parolă. Mai mult decât atât, putem obține toate datele de la toate bazele de date de pe server printr-o gaura mica!
UNION vă permite să combinați SQL-interogări. În viața reală am o sarcină simplă, interogări atât de simplu de baze de date și caracteristici eu nu folosesc UNION. Dar asta e pentru SQL-injecție este mai valoros decât nici un cuvânt.
UNION face destul de flexibil pentru a integra SQL-interogări cu SELECT, inclusiv de la diferite baze de date. Dar există o cerință importantă pentru sintaxa: numărul de coloane din prima SELECT trebuie să fie egal cu numărul de coloane din al doilea SELECT.
ORDER BY specifică sortarea informațiilor obținute din tabel. Puteți specifica numele coloanei pentru a sorta după, și este posibil prin numărul său. Mai mult decât atât, în cazul în care o coloană cu acest număr nu este prezent, va fi afișată eroarea:
Solicitare arata ca acest lucru:
Faceți acest lucru până când nu există nici un mesaj de eroare.
Vă rugăm să rețineți că conținutul anumitor câmpuri UNION SELECT 1,2,3,4,5 afișate. În loc de numere, puteți seta funcția.
Ce să scrie într-un SELECT
Există unele caracteristici pe care le puteți scrie direct în UE:
- BAZA DE DATE () - arată numele bazei de date curente
- CURRENT_USER () - afișează numele de utilizator și numele de gazdă
- @@ datadir - afișează calea absolută a bazei de date
- USER () - nume de utilizator
- VERSIUNEA () - versiune a bazei de date
În exemplul nostru, câmpul de ieșire 2, 4 și 5. Cu alte cuvinte, putem folosi oricare dintre aceste domenii.
Utiliza baza de date () în UNION SELECT
Utilizați CURRENT_USER () în UNION SELECT
Noi folosim @@ datadir în UNION SELECT
Obținerea numele de tabele, câmpuri și baze de date haldei
În baza de date information_schema are un tabel numit tabele. Acest tabel conține o listă cu toate tabelele care sunt prezente în toate bazele de date ale acestui server. Putem selecta masa noastră, în căutarea în baza de date numele table_schema - „db_library“ (numele am învățat cu ajutorul bazei de date ()).
Aceasta este o uniune completă utilaje. Materialul pe ea abundă pe internet. Pe serverul meu MySQL este tehnica completă UNION nu funcționează. Am eroare apare
ceva a mers prost cu tehnica UNION complet (ar putea fi din cauza limitării privind numărul de intrări recuperate). Care se încadrează înapoi la tehnica UNION parțială
În secțiunea următoare vom studia o tehnică UNION parțială, cu ajutorul ei, vom primi toate datele de pe server: numele bazei de date, numele tabelelor și câmpurile din aceste tabele, precum și conținutul lor. În timp ce așteaptă apariția celei de a doua parte - tren citit despre SQL-injectare și tehnologie UNION, a recomandat în continuare pentru a revizui următorul articol:
ps Oh, da, am uitat LIMIT. Prea, data viitoare spune despre rolul de LIMIT în SQL preparate injectabile.
Genesis HS - un loc fizic unde se adună aparate entuziaști, IT, electronice, roboți, și fizica oamenilor.
subiecte înrudite
Locasploit - set python3 și bash script-uri. Locasploit - python3 este un set de scripturi și bash pentru enumerarea locală și exploatează aplicații ulterioare colectate în conformitate cu una.
Airgeddon - capturarea și de rupere strângere de mână. Bună ziua tuturor! Am decis, pentru aceleași ca și I începători, pentru a scrie un articol. Am căutat și nu a găsit o mențiune a acestui utilitar. El poate fi ratat pe nevnimate.
procedură stocată apel la client. MySQL de asteptare o procedură stocată pe client În acest articol, se adaugă capacitatea de a apela o procedură stocată la cererea noastră de client. Pentru a începe.
Cât de ușor pentru a obține datele din DataTable. Cum de a obține datele de la DataTable în c # Într-un articol anterior a fost un exemplu de a lucra cu o bază de date MySQL și c #. De atunci, mulți au devenit special.