Što je SQL ubrizgavanje?

Broj web lokacija i stranica na webu stalno raste. Za razvoj uzimaju svi koji mogu samo. I novajlija web programeri često koriste opasan i stari kod. I to stvara puno rupa za uljeze i hakere. Što koriste. Jedna od klasičnih ranjivosti je SQL injection.

Malo teorije

Mnogi ljudi znaju da većina web-mjesta i usluga na mreži koriste za pohranu SQL baze podataka. To je strukturirani jezik upita koji vam omogućuje upravljanje i administriranje skladišta podataka. Postoje mnoge različite verzije sustava za upravljanje bazama podataka Oracle, MySQL i Postgre. Bez obzira na ime i vrstu, oni jednako koriste zahtjeve za podacima. Ovdje leži potencijalna ranjivost. Ako programer nije mogao ispravno i sigurno obraditi zahtjev, napadač ga može koristiti i primjenjivati ​​posebne taktike za pristup bazi podataka, a odatle - i za upravljanje cijelom web-lokacijom.


Da biste izbjegli takve situacije, trebate ispravno optimizirati kod i pomno pratiti vrstu zahtjeva koji se obrađuje.

SQL provjera ubrizgavanja

Kako bi se utvrdila dostupnost ranjivosti u mreži, postoji mnogo gotovih automatiziranih softverskih sustava. Ali možete obaviti jednostavnu provjeru i ručno. Da biste to učinili, morate otići na neku od stranica koje se istražuju i pokušati uzrokovati pogrešku baze podataka u adresnoj traci. Na primjer, skripta na web-lokaciji može obraditi upite, a ne izrezati ih. Na primjer, postoji najjednostavniji način some_site /index.php? Id = 25 -staviti nakon 25 navodnika i poslati zahtjev. Ako se nije pojavila pogreška, svi se zahtjevi na web-mjestu filtriraju i obrađuju ispravno ili se njihov izlaz isključi u postavkama. Ako je stranica ponovno pokrenuta s problemima, onda postoji ranjivost za SQL injekciju.


Kada ga jednom otkrijete, možete ga pokušati riješiti. Da biste implementirali ovu ranjivost, morate znati nešto o naredbama SQL-upita. Jedan od njih je UNION. Kombinira više rezultata upita u jedan. Tako možete izračunati broj polja u tablici. Primjer prvog upita izgleda ovako:
  • some_site /index.php? Id = 25 UNION SELECT 1.
  • U većini slučajeva, takav zapis treba izdati pogrešku. To znači da broj polja nije jednak 1. Dakle, birajući varijante od 1 ili više, možete postaviti njihov točan broj:
  • some_site /index.php? Id = 25 UNION SELECT 123456.
  • To jest, kada je pogreška će se prestati pojavljivati, dakle, broj polja se pogađa. Postoji i alternativno rješenje ovog problema. Na primjer, kada je broj polja velik - 3060 ili 100. To je naredba GROUP BY. Rezultate upita grupira bilo kojim znakom, na primjer: id:
  • some_site /index.php? Id = 25 GROUP BY 5.
  • Ako pogreške nisu primljene, polja su veća od 5. Dakle, zamjenjujući mogućnosti s prilično širokim rasponom, možete izračunati koliko su doista. Ovo je primjer SQL injekcije za početnike koji se žele pokušati sami testirati svoju web lokaciju. Važno je zapamtiti da je neovlašteni pristup nekom drugom članku Kaznenog zakona.

    Glavne vrste injekcija

    Implementacija ranjivosti pomoću SQL injekcije može biti nekoliko opcija. Sljedeće su najpopularnije tehnike:
  • Injekcija upitnika UNION SQL. Jednostavan primjer ove vrste već je razmatran gore. Provodi se zbog pogreške u provjeri pristiglih podataka koja nije filtrirana.
  • SQL injekcija temeljena na pogreškama. Kao što je jasno iz naslova, ovaj tip također koristi pogreške slanjem izraza koji su sintaktički netočni. Zatim slijedi presretanje zaglavlja odgovora, analizirajući koje je moguće provesti naknadnu SQL injekciju.
  • Složeni SQL upiti za ubrizgavanje. Ova ranjivost određena je izvršavanjem uzastopnih upita. Karakterizira ga spajanje na kraju znaka ;; Ovaj pristup se najčešće provodi za pristup implementaciji čitanja i pisanja podataka, ili kontrolu funkcija operativnog sustava, ako to dopuštaju povlastice.
  • Softver za pretraživanje ranjivosti SQL-a

    Dostupni za SQL injection, programi obično imaju dvije komponente: skeniranje stranica za potencijalne ranjivosti i njihovo korištenje za pristup podacima. Postoje takvi programi za gotovo sve poznate platforme. Njihova funkcionalnost olakšava testiranje stranice za SQL injekcijske mogućnosti.

    Sqlmap

    Vrlo moćan skener koji radi s većinom poznatih DBMS-a. Podržava različite metode implementacije SQL injekcije. Ima mogućnost automatskog prepoznavanja vrste hash lozinke i njenog hakiranja u rječniku. Tu je i funkcija za učitavanje i uklanjanje datoteka s poslužitelja.
    Ugradnja u okolišLinux se izvršava pomoću naredbi:
  • git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py --wizard.
  • Za Windows postoji opcija naredbenog retka i grafičko korisničko sučelje.

    jSQL Injection

    jSQL Injection je multi-platformni alat za testiranje SQL ranjivosti. Napisano na Javi, tako da JRE mora biti instaliran na sustavu. U mogućnosti je rukovati upitima GET, POST, zaglavljem i kolačićima. Ima zgodno grafičko sučelje.
    Instaliranje ovog softvera je kako slijedi: wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | grep-e -o '/ron190/jsql-injection/releases/download/v[0-9]{12}.[0-9]{12}/jsql-injection-v[0-9]{12}. [0-9] {12} .jar '| glava-n 1 '
    Pokretanje s java -jar ./jsql-injection-v*.jar Da biste pokrenuli test mjesta za SQL ranjivost, morate unijeti njegovu adresu u gornje polje. Oni su odvojeni za GET i POST. S pozitivnim rezultatom, popis dostupnih tablica pojavit će se u lijevom prozoru. Možete ih pregledati i saznati neke povjerljive informacije. Da biste potražili administrativne ploče, upotrijebite karticu Administratorska stranica. Koristi posebne predloške za automatsko traženje zapisa sustava povlaštenih korisnika. Od njih možete dobiti samo hash zaporke. Ali on je u programskim alatima.
    Nakon pronalaženja svih ranjivosti i ubrizgavanja potrebnih upita, uslužni program će popuniti datoteku na poslužitelju ili, naprotiv, preuzeti s nje.

    SQLi Dumper v.7

    Ovaj je program jednostavan alat za pronalaženje i implementaciju ranjivosti uSQL. Proizvodi ga na temelju tzv. Njihov se popis nalazi na internetu. SQL injekcijske patke su posebni predlošci za pretraživanje. Uz njihovu pomoć možete pronaći potencijalno osjetljivo mjesto putem bilo koje tražilice.

    Alati za obuku

    Stranica itsecgames.com ima poseban alat koji vam omogućuje da uzmete primjer kako napraviti SQL injekciju i testirati ga. Da biste ga mogli koristiti, potrebno ju je preuzeti i instalirati. Arhiva sadrži skup datoteka koje predstavljaju strukturu stranice. Da biste ga instalirali, trebat će vam postavljanje Apache, MySQL i PHP web poslužitelja.
    Nakon raspakiranja arhive u mapu web-poslužitelja, morate otići na adresu koju ste unijeli prilikom instalacije ovog softverskog proizvoda. Otvara se stranica za registraciju korisnika. Ovdje trebate unijeti svoje podatke i kliknuti na "Kreiraj". Kada premjestite korisnika u novi prozor, sustav će predložiti da odaberete jednu od mogućnosti testiranja. Među njima su i opisane injekcije i mnogi drugi testni zadaci. Vrijedi razmotriti primjer SQL injekcije kao što je GET /Search. Ovdje ga morate odabrati i kliknuti na "Hack". Korisnik će vidjeti niz za pretraživanje i simulirati web-lokaciju s filmovima. Filmove možete gledati dugo vremena. Ali oni su samo 10. Na primjer, možete pokušati ući u Iron Man. Prikazat će se film, što znači da stranica funkcionira, au njemu su tablice. Sada je potrebno provjeriti da li će skripta filtrirati posebne znakove, osobito navodnike. Da biste to učinili, morate dodati "" u adresnu traku. " Štoviše, potrebno je to učiniti nakon imena filma. Web-lokacija će izazvati pogrešku Pogreška: Imate pogrešku u programuvašu SQL sintaksu; provjerite priručnik koji odgovara vašoj verziji MySQL poslužitelja za odgovarajuću sintaksu koju koristite u blizini '%' u retku 1, što znači da su znakovi još uvijek nepravilno obrađeni. Dakle, možete pokušati poslati svoj zahtjev. To je učinjeno pomoću redoslijeda po, koji se unosi nakon navoda: http://testsites.com/sqli_1.php?title=Iron+Man 'redoslijed 2 - & amp; akcija = pretraživanje. broj polja je veći od 2. Dvostruka crtica govori poslužitelju da druge upite treba odbaciti, a sada moramo proći, zamjenjujući sve velike vrijednosti za one p p, dok ne dođe do pogreške. Na kraju se ispostavi da će polja biti 7.
    Sada je vrijeme da se iz baze dobije nešto korisno. Morat ćete izmijeniti dio upita u adresnoj traci i dovesti ga do sljedeće vrste: http://testsites.com/sqli_1.php?title=Iron+Man & amp; akcija = pretraživanje Kao rezultat njegovog izvršenja, prikazat će se linije s hashovima lozinki koje se mogu lako pretvoriti u razumljive znakove pomoću jedne od online usluga. Malo krivudav i bira ime polja s prijavom, možete pristupiti drugom računu, na primjer, administratoru web-lokacije. Proizvod ima različite vrste injekcija koje se mogu prakticirati. Vrijedno je zapamtiti da korištenje tih vještina u mreži, na stvarnim stranicama može biti kazneno.

    Injection i PHP

    Obično je to PHP kod i odgovoran je za potrebnu obradu zahtjeva koji dolaze od korisnika. Stoga, na ovoj razini, morate izgraditi zaštitu od SQL injekcije u PHP-u. Za početak, vrijedi dati neke jednostavne preporukena temelju kojih je to potrebno učiniti.
  • Podaci se uvijek moraju obraditi prije prostora u bazi. Može se implementirati ili korištenjem postojećih izraza ili ručno raspoređivanjem zahtjeva. I ovdje treba imati na umu da se brojčane vrijednosti pretvaraju u traženi tip;
  • Izbjegavajte tražiti pojavu različitih kontrolnih struktura.
  • Sada malo o pravilima za upit MySQL za SQL injection zaštitu. Prilikom sastavljanja izraza za upit važno je odvojiti podatke od SQL ključnih riječi.
  • SELECT * FROM tablica WHERE ime = Zerg.
  • U ovom dizajnu, sustav može misliti da je Zerg naziv polja, tako da ga morate staviti u navodnike.
  • SELECT * FROM tablica WHERE ime = 'Zerg'. Međutim, postoje situacije u kojima sama vrijednost sadrži šape.
  • SELECT * FROM tablica WHERE ime = 'cat-d'avour'.
  • Ovdje će se obraditi samo dio mačke-d, a ostatak se može shvatiti kao tim, što, naravno, nije. Stoga će doći do pogreške. Stoga je potrebno zaštititi ovu vrstu podataka. Time se koristi obrnuta kosa crta.
  • SELECT * FROM tablica WHERE ime = 'cat-d'avour'. Sve navedeno vrijedi za žice. Ako se dogodi akcija s brojem, tada joj nije potrebna noga ili crta. Međutim, nužno ih je potrebno prisiliti da dovedu do potrebne vrste podataka. Postoji preporuka da se ime polja unese u recipročne navodnike. Ovaj se znak nalazi na lijevoj strani tipkovnice, zajedno s znakom tilde "~". To je potrebno kako bi MySQL točno razlikovao naziv polja od ključne riječi.

    Dinamički rad s podacima

    Vrlo često se upiti koji se generiraju dinamički koriste za dobivanje podataka baze podataka. Na primjer:
  • SELECT * FROM tablica WHERE broj = '$ number'.
  • Ovdje je varijabla $ number proslijeđena kao vrijednost polja. Što će se dogoditi ako udari u cat-d'vivar? Greška. Izbjegavajte ovaj problem, naravno, možete uključiti "čarobne citate" u postavke. Ali sada će podaci biti zaštićeni tamo gdje je to potrebno i nisu potrebni. Osim toga, ako je kod pisan ručno, onda možete provesti malo više vremena pokušavajući stvoriti sustav otporan na sam hack. Možete koristiti mysql_real_escape_string da biste dodali kosu crtu. $ number = mysql_real_escape_string ($ number); $ year = mysql_real_escape_string ($ year); $ query = "INSERT INTO tablica (broj, godina, klasa) VALUES ('$ number', '$ year', 11)". Iako je kod narastao, ipak, potencijalno će raditi mnogo sigurnije.

    Placeholderi

    Placeholderi su osebujni markeri, prema kojima sustav uči da za ovo mjesto mora biti zamijenjena posebna funkcija. Na primjer: $ sate = $ mysqli-> prepare ("SELECT District Number FROM WHERE Name =?"); $ sate- & gt; bind_param ("s", $ number); $ sate- & gt; izvršavanje (); Ovaj isječak koda priprema predložak upita, zatim veže broj varijable i izvršava ga. Ovaj pristup omogućuje odvajanje obrade zahtjeva i njegove provedbe. Tako možete biti zaštićeni od uvođenja SQL upita zlonamjernog koda.

    Ono što napadač može učiniti

    Zaštita sustava je vrlo važan čimbenik koji se ne može zanemariti. Naravno, jednostavna web-posjetnica bit će lakše obnoviti. A ako je ovo odličan portal, usluga, forum? Koje su posljedice ako ne razmišljate o sigurnosti? Prvo, haker možeometati integritet baze podataka i ukloniti je u potpunosti. A ako administrator web-mjesta ili hoster nije napravio sigurnosnu kopiju, onda nećete biti sretni. Osim toga, napadač, koji je slomio jednu web-lokaciju, može se prebaciti na druge hostove na istom poslužitelju. Slijedi krađa osobnih podataka posjetitelja. Kako ih koristiti - sve je ovdje ograničeno samo maštom hakera. No, u svakom slučaju, posljedice neće biti tako ugodne. Pogotovo ako postoje financijske informacije. Također, napadač može spojiti bazu i onda tražiti novac za njezin povratak. Dezinformacija korisnika u ime administratora stranice, oni nemaju osobu, također mogu imati negativne posljedice, kao moguće prijevare.

    Zaključak

    Sve informacije u ovom članku daju se samo u informativne svrhe. Potrebno ga je koristiti samo za testiranje vlastitih projekata pri otkrivanju nedostataka i njihovo otklanjanje. Za dublje istraživanje o tome kako provesti SQL injekciju, morate pokrenuti vlastito istraživanje značajki i značajki SQL jezika. Kako se primjenjuju upiti, ključne riječi, vrste podataka i sve to. Također, bez razumijevanja funkcija PHP i HTML elemenata. Glavne ranjivosti za uporabu ubrizgavanja su adresna traka, pretraživanje i različita polja. Proučavanje funkcija PHP-a, način njihove implementacije i mogućnosti omogućit će vam da shvatite kako izbjeći pogreške. Dostupnost mnogih gotovih softverskih alata omogućuje duboku analizu stranice o poznatim ranjivostima. Jedan od najpopularnijih proizvoda je kali linux. To je slikaLinux operativni sustav, koji sadrži veliki broj uslužnih programa i programa sposobnih za sveobuhvatnu analizu snage stranice. Zašto morate znati kako razbiti stranicu? Sve je vrlo jednostavno - potrebno je imati ideju o potencijalno ranjivim mjestima vašeg projekta ili stranice. Pogotovo ako se radi o internetskoj trgovini s opcijom plaćanja na mreži, pri čemu napadač može kompromitirati pojedinosti o plaćanju korisnika. Za profesionalna istraživanja postoje službe za informacijsku sigurnost koje će moći provjeriti lokaciju prema različitim kriterijima i dubini. Od jednostavnih HTML injekcija do socijalnog inženjeringa i phishinga.

    Povezane publikacije