Kaj je injekcija SQL?
Število spletnih mest in strani na spletu nenehno narašča. Za razvoj so sprejeti vsi, ki lahko. In začetni spletni programerji pogosto uporabljajo nebezbedno in staro kodo. In to ustvarja veliko vrzeli za vsiljivce in hekerje. Tudi oni uporabljajo. Ena najbolj klasičnih ranljivosti je injekcija SQL.
Vsebina
Malo teorije
Mnogi ljudje vedo, da se večina spletnih mest in storitev v omrežju uporablja za shranjevanje baz podatkov SQL. To je strukturiran jezik poizvedb, ki vam omogoča upravljanje in upravljanje podatkovnih trgovin. Obstaja veliko različnih različic sistemov za upravljanje baz podatkov - Oracle, MySQL, Postgre. Ne glede na ime in tip, enako uporabita zahteve po podatkih. Tu je potencialna ranljivost. Če razvijalec ne more pravilno in varno obdelati zahteve, lahko napadalec to izkoristi in uporabi posebne taktike za dostop do baze podatkov in od tam do upravljanja celotne strani.
Da bi se izognili takšnim situacijam, morate inteligentno optimizirati kodo in pazljivo spremljati, na kakšen način se obdeluje zahtevo.
SQL injection test
Za ugotovitev prisotnosti ranljivosti v omrežju obstaja veliko že pripravljenih avtomatiziranih programskih sistemov. Toda preprosto opravite ročno. Če želite to narediti, pojdite na eno od raziskanih spletnih mest in poskusite povzročiti napako v naslovni vrstici. Na primer, skript na spletnem mestu ne more obdelati zahtev in jih ne obrezati.
Na primer, obstaja some_site / index.php? Id = 25
Najlažji način je dati po 25 narekovajev in poslati zahtevo. Če ni prišlo do napake, so vse zahteve filtrirane na spletnem mestu in obdelane pravilno ali pa so njihovi izpisi onemogočeni v nastavitvah. Če se je stran ponovno zagnala s težavami, potem obstaja ranljivost za injekcijo SQL.
Ko se najde, ga lahko poskusite znebiti.
Za izvajanje te ranljivosti, morate malo vedeti ukaze SQL-poizvedb. Eden od njih je UNION. Združuje več rezultatov poizvedbe v eno. Torej lahko izračunate število polj v tabeli. Primer prvega poizvedbe je videti takole:
- some_site / index.php? id = 25 UNION SELECT 1.
V večini primerov bi takšen vnos moral povzročiti napako. To pomeni, da število polj ni enako 1. Tako lahko z izbiro možnosti od 1 in več nastavite njihovo točno število:
- some_site / index.php? id = 25 UNION SELECT 1,2,3,4,5,6.
To pomeni, da se napaka preneha pojavljati, kar pomeni, da je število polj uganjeno.
Obstaja tudi alternativna rešitev za ta problem. Na primer, ko je število polj veliko - 30, 60 ali 100. To je ukaz GROUP BY. Rezultate poizvedbe združuje z nekaterimi značilnostmi, na primer z id:
- some_site / index.php? id = 25 GROUP BY 5.
Če napake še niso bile prejete, potem je več polj kot 5. Tako je mogoče zamenjati različice iz precej širokega obsega, lahko izračunamo, koliko jih je dejansko.
Ta vzorec injekcije SQL je za začetnike, ki se želijo preizkusiti v svoji spletni strani. Pomembno je vedeti, da je za nepooblaščen dostop do nekoga drugega članek kazenskega zakonika.
Glavne vrste injekcij
Izvajanje ranljivosti z injekcijo SQL je mogoče storiti na več načinov. Naslednje so najbolj priljubljene tehnike:
UNIJA poizvedba SQL injekcija. Preprost primer te vrste je že obravnavan zgoraj. Izvaja se zaradi napake pri preverjanju vhodnih podatkov, ki ni na noben način ne filtriran.
Injekcija SQL na podlagi napak. Kot to implicira ime, ta vrsta uporablja tudi napake, pošiljanje izrazov, ki so sintaktično napačni. Nato so prestrezani odzivni glavi, ki analizirajo, kateri lahko kasneje izvedete injekcijo SQL.
Zložen poizvedbe SQL injekcija. To ranljivost določa izvrševanje zaporednih zahtev. Zanj je značilna pritrditev na koncu znaka ";". Ta pristop se pogosto izvaja za dostop do podatkov za branje in pisanje ali nadzor nad funkcijami operacijskega sistema, če to dovoljujejo privilegiji.
Programska oprema za iskanje ranljivosti SQL
Programi, ki so na voljo za injekcije SQL, imajo ponavadi dve komponenti - skeniranje mesta za morebitne ranljivosti in njihovo uporabo za dostop do podatkov. Obstajajo takšne pripomočke za skoraj vse znane platforme. Njihova funkcionalnost v veliki meri olajša preverjanje mesta za možnost vdora SQL injekcije.
Sqlmap
Zelo močan skener, ki dela z najbolj znanimi DBMS. Podpira različne tehnike za izvajanje injekcije SQL. Ima možnost, da samodejno prepozna vrsto šifre gesla in njeno razpoke v slovarju. Obstaja tudi funkcionalnost nalaganja in nalaganja datotek s strežnika.
Namestitev v Linux okolju se izvaja z naslednjimi ukazi:
- git klon https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
- cdsqlmap-dev /,
- ./sqlmap.py - čarovnik.
Za Windows obstaja možnost z ukazno vrstico in grafičnim uporabniškim vmesnikom.
jSQL Injection
jSQL Injection je orodje za preizkušanje uporabe ranljivosti SQL. Pisana v Java, zato mora imeti sistem nameščen JRE. Lahko obravnava zahteve GET, POST, glava, piškotek. Ima priročen grafični vmesnik.
Namestitev te programske opreme je naslednja:
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 `| glava 1
Zagon se izvaja z ukazom java -jar ./jsql-injection-v*.jar
Če želite začeti preverjati spletno mesto za ranljivost SQL, vnesite njen naslov v zgornje polje. So ločeni za GET in za POST. Če je rezultat pozitiven, se v levem oknu prikaže seznam razpoložljivih tabel. Lahko si jih ogledate in izvedete nekaj zaupnih informacij.
Če želite poiskati upravne plošče, uporabite kartico »Upravna stran«. Uporablja posebne predloge za samodejno iskanje sistemskih zapisov za privilegirane uporabnike. Od teh lahko dobite samo geslo za geslo. Vendar je na voljo tudi v programskih orodjih.
Ko poiščete vse ranljivosti in vnesete potrebne poizvedbe, vam bo pripomoček omogočil, da datoteko naložite na strežnik ali, obratno, ga prenesite od tam.
SQLi Dumper v.7
To orodje je preprosto orodje za iskanje in izvajanje ranljivosti v SQL. Proizvaja ga na podlagi tako imenovanih vrtanj. Njihove sezname lahko najdete na internetu. Dorky za injekcijo SQL je poseben vzorec iskalnih poizvedb. Z njihovo pomočjo lahko najdete potencialno ranljivo mesto prek katerega koli iskalnika.
Orodja za usposabljanje
Spletna stran itsecgames.com ima poseben pripomoček, ki omogoča, da na primer kaže, kako narediti injekcijo SQL in jo preizkusiti. Če ga želite uporabiti, jo morate prenesti in namestiti. Arhiv vsebuje niz datotek, kar je struktura spletnega mesta. Če ga želite namestiti, boste potrebovali obstoječi nabor spletnih strežnikov Apache, MySQL in PHP.
Po razpakiranju arhiva v mapo spletnega strežnika je treba ob namestitvi tega izdelka prebrati naslov, ki ste ga vnesli. Odprla se bo stran z registracijo uporabnika. Tukaj vnesite podatke in kliknite »Ustvari«. S prevajanjem uporabnika v novo okno vas sistem pozove, da izberete eno od možnosti preizkusa. Med njimi sta opisana injekcije in številne druge testne naloge.
Vredno je razmisliti o primeru injekcije tipa SQL GET / Search. Tukaj jo morate izbrati in pritisniti »Hack«. Preden se uporabnik prikaže iskalni niz in posnemanje določenega spletnega mesta s filmi. Dolgo časa lahko iščete skozi filme. Vendar pa je samo 10. Na primer, lahko poskusite vstopiti Iron Man. Pojavil se bo film, kar pomeni, da spletno mesto deluje in v njem so tabele. Zdaj moramo preveriti, ali scenarij filtrira posebne znake, zlasti oznako narekovanja. Če želite to narediti, dodajte »« v naslovno vrstico. In to morate storiti po naslovu filma. Stran bo vrnila napako. Napaka: v vašem SQL-ju je prišlo do napake, ki pravi, da se znaki še vedno obdelujejo narobe. Torej lahko poskusite nadomestiti vašo zahtevo. Toda najprej morate izračunati število polj. Če želite to narediti, uporabite vrstni red, ki je naveden za citatom: https://testsites.com/sqli_1.php?title=Iron+Man ", ki ga naredi 2 - action = search.
Ta ukaz preprosto prikaže informacije o filmu, torej je število polj večje od 2. Dvojni vezni člen pove strežniku, da je treba preostale zahteve zavreči. Zdaj moramo razvrstiti, tako da nadomestimo vse velike vrednosti, dokler ne napaka. Na koncu se izkaže, da bodo polja 7.
Zdaj je čas, da dobimo nekaj koristnega iz baze podatkov. V naslovni vrstici boste morali malo spremeniti poizvedbo in jo pripeljati v to obliko: https://testsites.com/sqli_1.php?title=Iron+Man `union izberite 1, baze podatkov (), uporabnik (), 4, geslo, 6, 7 od uporabnikov --action = iskanje. Kot rezultat izvedbe boste videli vrstice z geslom za gesla, ki jih je mogoče preprosto pretvoriti v razumljive znake z eno od spletnih storitev. Malo puffing in pridobivanje imena polja z prijavo, lahko dostopate do nekoga drugega zapisa, na primer skrbnika spletnega mesta.
Obstaja veliko vrst injekcij v izdelku, na katerem lahko vadite. Upoštevati je treba, da se uporaba teh spretnosti v omrežju, na dejanskih spletnih mestih, lahko kaznuje.
Injekcija in PHP
Praviloma je koda PHP odgovorna za potrebno obdelavo zahtev, ki prihajajo od uporabnika. Zato je na tej ravni, da morate zgraditi zaščito pred injekcijami SQL v PHP.
Za začetek je smiselno dati nekaj preprostih priporočil, na podlagi katerih morate to storiti.
- Podatke je treba vedno obdelati, preden jih dajo v bazo podatkov. To lahko storite z uporabo obstoječih izrazov ali z organiziranjem poizvedb ročno. Tudi tukaj je treba upoštevati, da se številske vrednosti pretvorijo v vrsto, ki je potrebna;
- Izogibajte se zahtevi po videzu različnih kontrolnih struktur.
Zdaj malo o pravilih poizvedbe v MySQL za zaščito pred injekcijami SQL.
Pri pisanju izrazov za poizvedbo je pomembno ločiti podatke iz ključnih besed SQL.
- SELECT * FROM tabelo WHERE name = Zerg.
V tej konstrukciji bi sistem morda mislil, da je Zerg ime polja, zato ga morate priložiti v narekovaje.
- SELECT * FROM tabelo WHERE name = `Zerg`.
Vendar pa obstajajo primeri, v katerih vrednost vsebuje samo citate.
- SELECT * FROM table WHERE name = `Cote d`Ivoire`.
Tukaj se obdeluje samo del mačke, preostanek pa se lahko dojema kot ekipa, ki seveda ni. Zato pride do napake. Torej morate prikazati to vrsto podatkov. Če želite to narediti, uporabite backslash- .
- SELECT * FROM tabelo WHERE name = `cat-e` Ivory. `
Vse navedeno velja za žice. Če se dejanje pojavi s številko, potem ne potrebuje niti kotacij ali poševnic. Vendar pa morajo nujno obvezno pripeljati do zahtevane vrste podatkov.
Obstaja priporočilo, naj se ime polja vnese v zadnjo narekovaj. Ta simbol je na levi strani tipkovnice skupaj s tildo "~". To je potrebno za MySQL, da natančno razlikuje ime polja z njegovo ključno besedo.
Dinamično delo s podatki
Zelo pogosto, če želite pridobiti vse podatke iz baze podatkov, se uporabljajo dinamično obdelane poizvedbe. Na primer:
- SELECT * FROM tabelo WHERE number = `$ number`.
Tukaj je številka $ posredovana kot definicija vrednosti polja. Kaj se bo zgodilo, če bo kat-d`Ivoire prišel v to? Prišlo je do napake.
Da bi se izognili tej težavi, lahko v nastavitvah vključite »čarovni narekovaj«. Zdaj pa bodo podatki pregledani po potrebi in ne potrebni. Poleg tega, če je koda napisana ročno, lahko preživite nekaj več časa, ko poskušate ustvariti sistem, odporen proti vlomom.
Če želite dodati poševnico sami, lahko uporabite mysql_real_escape_string.
$ number = mysql_real_escape_string ($ številka);
$ leto = mysql_real_escape_string ($ leto);
$ Query = "INSERT INTO mizo (številka, leto, razred) VALUES ( `$ številka", "$ leto`, 11)."
Čeprav se je koda povečala v obsegu, pa bo morda še bolj varna.
Krajniki
Označevalci so originalni označevalci, s katerimi sistem prepozna, da je treba na tem mestu nadomestiti posebno funkcijo. Na primer:
$ sate = $ mysqli-> pripravi ("SELECT okrožje FROM Number WHERE Name =?");
$ sate-> bind_param ("s", $ število);
$ sate-> execute ();
Ta kodni odsek pripravi predlogo poizvedbe, nato pa povezuje številko spremenljivke in jo izvede. Ta pristop vam omogoča razdelitev obdelave zahteve in njenega izvajanja. Tako se lahko zaščitite pred zlorabo zlonamerne kode v poizvedbah SQL.
Kaj lahko naredi napadalec?
Zaščita sistema je zelo pomemben dejavnik, ki ga ni mogoče zanemariti. Seveda bo enostavna obnova spletnega mesta preprosta. In če je to odličen portal, storitev, forum? Kakšne posledice lahko povzročite, če ne razmišljate o varnosti?
Prvič, heker lahko zlomi tako integriteto baze podatkov in jo popolnoma odstrani. In če skrbnik spletnega mesta ali gostiteljica ni naredil varnostne kopije, potem to ne bo enostavno. Poleg tega lahko napadalec, ki je vdrl v eno spletno mesto, preklopi na druge, ki se nahajajo na istem strežniku.
Naslednje je kraje osebnih podatkov obiskovalcev. Kako jih uporabljati - vse je omejeno le z domišljijo hackerja. Toda v vsakem primeru posledice ne bodo zelo prijetno. Še posebej, če vsebuje finančne podatke.
Poleg tega lahko napadalec združi bazo podatkov samega sebe in nato izterja denar za njeno vrnitev.
Uporabniki dezinformacije o imenu skrbnika spletne strani, lahko oseba, ki se ne da, lahko tudi negativne posledice, kot so možne dejstev goljufij.
Zaključek
Vse informacije v tem članku so na voljo samo v informativne namene. Uporabite ga le za testiranje lastnih projektov, ko se odkrijejo in določijo ranljivosti.
Za bolj poglobljeno študijo, kako izvajati injekcijo SQL, morate začeti z dejanskim raziskovanjem zmogljivosti in funkcij jezika SQL. Kako se izvedejo poizvedbe, ključne besede, vrste podatkov in uporaba vsega tega.
Prav tako ne morete storiti, ne da bi razumeli delovanje funkcij PHP in HTML elementov. Glavne ranljive točke za uporabo injekcij so naslovna vrstica, iskanje in različna polja. Preučevanje funkcij PHP, način njihovega izvajanja in možnosti vam bodo pomagale razumeti, kako se je mogoče izogniti napakam.
Prisotnost številnih že pripravljenih programskih orodij vam omogoča, da opravite poglobljeno analizo mesta za znane ranljivosti. Eden izmed najbolj priljubljenih izdelkov je kali linux. Je podoba operacijskega sistema, ki temelji na Linuxu in vsebuje veliko število pripomočkov in programov, ki lahko izvedejo celovito analizo mesta za moč.
Zakaj moram vedeti, kako hack stran? To je zelo preprosto - to je potrebno, da bi imeli idejo o potencialno ranljivih mestih vašega projekta ali spletnega mesta. Še posebej, če gre za spletno trgovino z možnostjo plačevanja na spletu, če napadalec lahko ogrozi podatke o plačilu uporabnika.
Za strokovne raziskave obstajajo informacijske varnostne službe, ki bodo lahko preverjale spletno stran v skladu z različnimi merili in globino. Od preproste injekcije HTML do socialnega inženirstva in lažnega predstavljanja.
- Sistemi upravljanja življenjskih in podatkovnih baz
- Ranljivosti strani. Preverite spletno mesto. Program za skeniranje mesta za ranljivost
- SQL datoteka. Format datoteke SQL: opis razširitve
- MySQL je, kaj in kje se uporablja?
- Ustvarjanje podatkovne baze MySQL je del katerega koli spletnega mesta
- Pregled sistemov za upravljanje baz podatkov
- Sistem za upravljanje baz podatkov Microsoft SQL Server
- SQL "za čajnike": kaj morate vedeti za začetnike?
- Spletni strežnik za testiranje spletnih mest in aplikacij
- Najboljša spletna mesta za sisteme za upravljanje vsebin. Ocena CMS
- MySQL - kaj je to? Napaka MySQL
- MySQL - zahteva v zahtevi. MySQL: primeri poizvedb. Vgnezdene poizvedbe MySQL
- Nameščanje SQL z
- Izbriši stavko Izbriši MySQL
- Kako ustvariti bazo podatkov MySQL
- Kako ustvariti bazo podatkov in kaj je SQL?
- Dostop do vzorčnih rezultatov z nabiralnikom MySQL
- Osnovni tipi podatkov Mysql
- Shranite gesla v računalniku in v omrežju
- Ustvarjanje baze podatkov: tehnike in obstoječe rešitve
- Splošni koncepti Access DBMS