Što je SQL injekcija?

Broj web stranica i stranica na webu stalno raste. Za razvoj se poduzimaju svi koji mogu. Programeri novinara često koriste nesigurne i stare kodove. I to stvara puno rupe za uljeze i hakere. Nego oni također koriste. Jedna od najčešćih ranjivosti je SQL injekcija.

Malo teorije

Mnogi znaju da se većina web stranica i usluga na mreži koristi za pohranjivanje SQL baze podataka. Ovo je strukturirani jezik upita koji vam omogućuje upravljanje i administriranje skladišta podataka. Postoji mnogo različitih verzija sustava za upravljanje bazama podataka - Oracle, MySQL, Postgre. Bez obzira na naziv i vrstu, jednako koriste zahtjeve za podacima. Ovdje leži potencijalna ranjivost. Ako programer nije mogao pravilno i sigurno obraditi zahtjev, napadač može iskoristiti to i primijeniti posebnu taktiku kako bi stekla pristup bazi podataka, a od tamo do upravljanja cijelim web sučeljem.

sql injekcije

Da biste izbjegli takve situacije, morate inteligentno optimizirati kôd i pažljivo pratiti koji se zahtjev obrađuje na koji način.

SQL injekcijsko ispitivanje

Da bi se utvrdila prisutnost ranjivosti u mreži, postoji mnogo gotovih automatiziranih softverskih sustava. No, možete izvesti jednostavan test ručno. Da biste to učinili, idite na neku od web mjesta koja se istražuju i pokušajte uzrokovati pogrešku baze podataka u adresnoj traci. Na primjer, skripta na web mjestu ne može obraditi zahtjeve i ne izrezati ih.

Na primjer, postoji some_site / index.php? Id = 25

Najjednostavniji način je staviti nakon 25 navoda i poslati zahtjev. Ako nije došlo do pogreške, svi se zahtjevi filtriraju na web sučelju i ispravno obrađuju ili se njihov izlaz onemogućuje u postavkama. Ako se stranica ponovno pokrene s problemima, postoji ranjivost za SQL injection.

Nakon što se pronađe, možete se pokušati riješiti.

Da biste primijenili tu ranjivost, trebate znati nešto o tome naredbe SQL upita. Jedan od njih je UNION. Kombinira nekoliko 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 unos bi trebao proizvesti pogrešku. To znači da broj polja nije jednak 1. Dakle, odabir opcija od 1 i više, možete postaviti njihov točan broj:

  • some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.

To jest, kada se pogreška prestane pojavljivati, to znači da se broj polja pogađa.

Postoji i alternativno rješenje ovog problema. Na primjer, kada je broj polja velik - 30, 60 ili 100. Ovo je naredba GROUP BY. Ona grupira rezultate upita nekim karakteristikama, na primjer id:

  • some_site / index.php? id = 25 GRUPA PO 5.

Ako pogreške nisu primljene, postoji više polja od 5. Tako, zamjenjujući varijante iz prilično širokog raspona, moguće je izračunati koliko ih zapravo jesu.

Ovaj uzorak SQL injection je za početnike koji se žele probati u testiranju svoje stranice. Važno je zapamtiti da je zbog neovlaštenog pristupa nekome drugi članak Kaznenog zakona.

Glavne vrste injekcija

Implementacija ranjivosti putem SQL injekcije može se obaviti na nekoliko načina. Sljedeće su najpopularnije tehnike:

  • UNIJA upita SQL ubrizgavanje. Jednostavan primjer ove vrste već je razmatran gore. Primjenjuje se zbog pogreške prilikom provjere dolaznih podataka koji se na bilo koji način ne filtriraju.

  • SQL injection na temelju pogreške. Kao što naziv implicira, ova vrsta također koristi pogreške, slanjem izraza koji su sintaktički netočni. Zatim se zaglavlja odgovora prekidaju, analizirajući što kasnije možete izvršiti SQL injekciju.

  • Složeni upiti SQL ubrizgavanje. Ova ranjivost određuje se izvršavanjem uzastopnih zahtjeva. Karakterizira ga privitak na kraju ";" znaka. Taj se pristup često provodi kako bi se pristupilo provođenju čitanja i pisanja podataka ili kontroli funkcija operacijskog sustava, ako to privilegije to dopuštaju.

Softver za traženje SQL ranjivosti

Programi koji su dostupni za SQL injekcije obično imaju dvije komponente - skeniranje web mjesta za moguće ranjivosti i njihovo korištenje za pristup podacima. Postoje takve alate za gotovo sve poznate platforme. Njihova funkcionalnost uvelike olakšava provjeru web mjesta za mogućnost hakiranja SQL injekcije.

Sqlmap

Vrlo moćan skener, koji radi s najpoznatijim DBMS-om. Podržava različite tehnike za implementaciju SQL injekcije. Ima mogućnost automatskog prepoznavanja lozinke tipa hash i njegovog pucanja u rječniku. Tu je i funkcionalnost učitavanja i učitavanja datoteka s poslužitelja.

sql injekcije

Instalacija u Linux okruženju izvodi se pomoću sljedećih naredbi:

  • git klon https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • cdsqlmap-dev /,
  • ./sqlmap.py --wizard.

provjerite za sql injekciju

U sustavu Windows postoji opcija s naredbenom retku i grafičko korisničko sučelje.

jSQL Injection

jSQL Injection je cross-platforma alat za testiranje korištenja SQL ranjivosti. Napisano u Java, tako da sustav mora imati instaliran JRE. Može obraditi zahtjeve GET, POST, zaglavlje, kolačić. Ima prikladno grafičko sučelje.

Instalacija ovog softvera je sljedeća:

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-injekcija-v[0-9] {1,2}. [0-9] {1,2} .jar `| glava-n 1`

sql injection sjeckanje

Pokretanje se izvodi pomoću naredbe java -jar ./jsql-injection-v*.jar

Da biste započeli provjeru web mjesta za SQL ranjivost, morate unijeti njegovu adresu u gornji polje. Odvojeni su za GET i za POST. Ako je rezultat pozitivan, u lijevom se prozoru pojavljuje popis dostupnih tablica. Može ih se pregledati i naučiti neke povjerljive informacije.

Da biste potražili administratorske ploče, upotrijebite karticu "Administratorska stranica". Upotrebljava posebne predloške za automatsko pretraživanje sistemskih zapisa povlaštenih korisnika. Od tih, možete dobiti samo hash lozinke. Ali to je također dostupno u programskim alatima.

kako napraviti sql ubrizgavanje

Nakon pronalaženja svih ranjivosti i ubrizgavanja potrebnih upita, uslužni program će vam omogućiti da prenesete datoteku na poslužitelj ili, obrnuto, preuzmete datoteku s njega.

SQLi Dumper v.7

Ovaj alat je jednostavan alat za pretraživanje i primjenu ranjivosti u SQL-u. Proizvodi ga na temelju takozvanih bušilice. Njihovi popisi mogu se naći na Internetu. Dorky za SQL injection je poseban obrazac upita za pretraživanje. Pomoću njihove pomoći potencijalno možete pronaći ranjivim stranicama putem bilo koje tražilice.

Alati za obuku

Stranica itsecgames.com posjeduje poseban alat koji, primjerice, omogućuje prikaz SQL injekcije i testiranje. Da biste ga koristili, morate ga preuzeti i instalirati. Arhiva sadrži skup datoteka, što je struktura web mjesta. Da biste ga instalirali, potreban vam je postojeći skup poslužitelja Apache, MySQL i PHP.

zaštita od sql injekcije php

Nakon raspakiranja arhive u mapu web poslužitelja, potrebno je otići na unesenu adresu prilikom instalacije ovog softverskog proizvoda. Otvorit će se stranica s registracijom korisnika. Ovdje morate unijeti svoje podatke i kliknuti "Izradi". Prevodenjem korisnika u novi prozor, sustav vas traži da odaberete jednu od mogućnosti testiranja. Među njima su obje opisane injekcije i mnoge druge testne zadatke.



Vrijedno je uzeti u obzir primjer SQL injection tipa GET / Search. Ovdje ga morate odabrati i pritisnite "Hack". Prije nego što se korisnik pojavi niz za pretraživanje i imitacija određenog mjesta s filmovima. Dugo možete proći kroz filmove. Ali postoje samo 10. Na primjer, možete pokušati ući u Iron Man. Pojavit će se film, što znači da web-lokacija radi i postoje tablice u njemu. Sada moramo provjeriti je li skripta filtrirala posebne znakove, osobito navodnu oznaku. Da biste to učinili, dodajte "" u redak adrese. A, trebate to učiniti nakon naslova filma. Stranica će vratiti pogrešku. Pogreška: Imate pogrešku u vašem SQL, koji kaže da se likovi i dalje obrađuju u krivu. Možete pokušati zamijeniti vaš zahtjev. Ali najprije morate izračunati broj polja. Da biste to učinili, upotrijebite narudžbu po, koja se uvodi nakon citata: https://testsites.com/sqli_1.php?title=Iron+Man `redoslijed po 2 --action = pretraživanje.

Ova naredba jednostavno prikazuje informacije o filmu, tj. Broj polja je veći od 2. Dvostruki crtica kaže poslužitelju da preostali zahtjevi trebaju biti odbačeni. Sada moramo sortirati, zamjenjujući sve velike vrijednosti sve dok se ne pojavi pogreška. Na kraju, ispada da će polja biti 7.

sql injekcijski primjer

Sada je vrijeme da dobijemo nešto korisno iz baze podataka. Morat ćete mijenjati upit malo u adresnoj traci, dovodeći ga u ovaj obrazac: https://testsites.com/sqli_1.php?title=Iron+Man `union select 1, baza podataka (), korisnik (), 4, lozinka, 6, 7 korisnika - action = search. Kao rezultat izvršenja, vidjet ćete linije s lozinkama koje se lako mogu pretvoriti u razumljive znakove pomoću jedne od online usluga. Malo pušenja i uzimanje imena polja s prijavom, možete pristupiti nečijem zapisu, primjerice, administratoru web mjesta.

U proizvodu postoje mnoge vrste injekcija na kojima možete vježbati. Važno je imati na umu da primjena tih vještina u mreži, na stvarnim mjestima može biti kažnjiva.

Injekcija i PHP

U pravilu PHP kôd je odgovoran za neophodnu obradu zahtjeva koji dolaze od korisnika. Stoga je na ovoj razini potrebno izgraditi zaštitu od SQL injekcija u PHP-u.

Za početak, vrijedno je dati nekoliko jednostavnih preporuka na temelju kojih morate to učiniti.

  • Podaci se moraju uvijek obrađivati ​​prije nego što se stave u bazu podataka. To se može učiniti pomoću postojećih izraza ili organiziranjem upita ručno. Ovdje također valja uzeti u obzir da se numeričke vrijednosti pretvaraju u tip koji je potreban;
  • Izbjegavajte zahtjev za pojavom različitih upravljačkih struktura.

Sada malo o pravilima upita u MySQL kako bismo zaštitili od SQL injekcija.

Prilikom izrade izraza za upit, važno je odvojiti podatke iz SQL ključnih riječi.

  • SELECT * FROM tablica WHERE name = Zerg.

U ovoj konstrukciji, sustav bi mogao pomisliti da je Zerg naziv polja, tako da ga morate priložiti u navodnicima.

  • SELECT * FROM tablica WHERE name = `Zerg`.

Međutim, postoje situacije u kojima vrijednost sama sadrži citate.

  • SELECT * FROM tablica WHERE name = `Obala Bjelokosti`.

Ovdje se obrađuje samo dio mačke, a ostatak se percipira kao tim, koji, naravno, nije. Stoga dolazi do pogreške. Zato morate prikazati ove vrste podataka. Da biste to učinili, upotrijebite povratni unos .

  • SELECT * FROM tablica WHERE name = `cat-e` bjelokost. `

Sve gore navedeno vrijedi za žice. Ako se radnja događa s brojem, ne treba ni citati niti kose. Međutim, nužno moraju obvezno dovesti do tražene vrste podataka.

Postoji preporuka da se ime polja priloži natrag u navodniku. Ovaj simbol nalazi se na lijevoj strani tipkovnice, zajedno s tildom "~". To je potrebno za MySQL da točno razlikuje naziv polja od svoje ključne riječi.

Dinamičan rad s podacima

Vrlo često, za dobivanje podataka iz baze podataka koriste se dinamički generirani upiti. Na primjer:

  • SELECT * FROM tablica WHERE number = `$ number`.

Ovdje se $ broj prosljeđuje kao definicija polja vrijednosti. Što će se dogoditi ako se cat-d`Ivoire uđe u nju? Došlo je do pogreške.

Da biste izbjegli ovu nevolju, naravno, možete uključiti "čarobne citate" u postavkama. No, sada će se podaci prikazivati ​​prema potrebi i nisu nužni. Osim toga, ako je kôd ručno napisan, možete potrošiti još malo vremena pokušavajući sami stvoriti sustav otpora provale.

Da biste dodali kosu, možete koristiti mysql_real_escape_string.

$ number = mysql_real_escape_string ($ broj);

$ year = mysql_real_escape_string ($ godina);

$ query = "INSERT INTO tablica (broj, godina, klasa) VRIJEDNOSTI (`$ broj`, `$ year`, 11)".

Iako je broj porastao u volumenu, ipak, potencijalno, to će raditi puno sigurnije.

rezerviranih mjesta

Znakovi su izvorni markeri, pri čemu sustav prepoznaje da na ovom mjestu treba zamijeniti posebnu funkciju. Na primjer:

$ sate = $ mysqli-> priprema ("ODABERI distrikt od broja WHERE Name =?");

$ sate-> bind_param ("s", $ broj);

$ sate-> execute ();

Ovaj odjeljak koda priprema predložak upita, a zatim vezuje broj varijable i izvršava ga. Ovaj vam pristup omogućuje podjelu obrade zahtjeva i njegovu provedbu. Tako se možete zaštititi od korištenja zlonamjernog ubrizgavanja koda u SQL upitima.

Što može učiniti napadač?

Zaštita sustava je vrlo važan čimbenik koji se ne može zanemariti. Naravno, lakše će se vratiti jednostavna web-posjetnica. A ako je ovo veliki portal, servis, forum? Koje posljedice mogu biti ako ne razmišljate o sigurnosti?

Prvo, haker može slomiti integritet baze podataka i ukloniti ga u cijelosti. A ako administrator web mjesta ili hoster nisu napravili sigurnosnu kopiju, to neće biti lako. Osim toga, napadač koji je sjeckao na jedno web mjesto može se prebaciti na druge koji se nalaze na istom poslužitelju.

Sljedeća je krađa osobnih podataka posjetitelja. Kako ih koristiti - sve je ograničeno samo maštom hakera. No, u svakom slučaju, posljedice neće biti vrlo ugodne. Pogotovo ako sadrži financijske informacije.

Također, napadač može sam spojiti bazu podataka, a zatim iznuđivati ​​novac za povratak.

Dezinformacija korisnika u ime administratora web mjesta, koja nije njihova, također može imati negativne posljedice, jer je moguća prijevara.

zaključak

Sve informacije navedene u ovom članku daju se samo u informativne svrhe. Koristite ga samo potrebnim za testiranje vlastitih projekata kada se otkriju i fiksiraju ranjivosti.

Za detaljnije proučavanje izvedbe SQL injekcija morate početi s istraživanjem mogućnosti i značajki SQL jezika. Kako se postavljaju upiti, ključne riječi, vrste podataka i primjena svega ovoga.

Također, ne možete bez razumijevanja funkcije PHP funkcija i HTML elemenata. Glavne ranjive točke za korištenje injekcija su adresna traka, pretraživanje i različita polja. Proučavanje PHP funkcija, način njihovog provođenja i mogućnosti pomoći će vam da shvatite kako se pogreške mogu izbjeći.

Prisutnost mnogih gotovih softverskih alata omogućuje vam da provedete detaljnu analizu web mjesta za poznate ranjivosti. Jedan od najpopularnijih proizvoda je kali linux. To je slika Linux operativnog sustava koji sadrži veliki broj komunalnih usluga i programa koji mogu provesti sveobuhvatnu analizu web mjesta za snagu.

Zašto moram znati kako hakirati web mjesto? Vrlo je jednostavno - to je neophodno kako bismo imali predodžbu o potencijalno ranjivim mjestima vašeg projekta ili web mjesta. Pogotovo ako je to neka mrežna trgovina s mogućnošću plaćanja na mreži, gdje napadač može ugroziti podatke o plaćanju korisnika.

Za profesionalno istraživanje, postoje informacijske sigurnosne službe moći će provjeriti web mjesto prema različitim kriterijima i dubini. Od jednostavnog HTML injektiranja do socijalnog inženjeringa i krađe identiteta.

Dijelite na društvenim mrežama:

Povezan
Sustavi upravljanja životom i bazama podatakaSustavi upravljanja životom i bazama podataka
SQL datoteku. SQL format datoteke: opis proširenjaSQL datoteku. SQL format datoteke: opis proširenja
MySQL je ono što i gdje se primjenjuje?MySQL je ono što i gdje se primjenjuje?
Pregled sustava za upravljanje bazama podatakaPregled sustava za upravljanje bazama podataka
Sustav upravljanja bazom podataka Microsoftovi poslužitelji SQLSustav upravljanja bazom podataka Microsoftovi poslužitelji SQL
SQL `za teapots`: što trebate znati za početnike?SQL `za teapots`: što trebate znati za početnike?
MySQL - što je to? Pogreška MySQL-aMySQL - što je to? Pogreška MySQL-a
MySQL - zahtjev u zahtjevu. MySQL: primjeri upita. Ugrađeni MySQL upitiMySQL - zahtjev u zahtjevu. MySQL: primjeri upita. Ugrađeni MySQL upiti
Zamke DML-naredbi ažuriraju MySQLZamke DML-naredbi ažuriraju MySQL
SQL gdje: metode primjene i primjeriSQL gdje: metode primjene i primjeri
» » Što je SQL injekcija?
LiveInternet