SQL-injektion opetusohjelma: Kuinka oppia esimerkin avulla
Mikรค on SQL-injektio?
SQL-injektio on hyรถkkรคys, joka myrkyttรครค dynaamiset SQL-lauseet kommentoidakseen tiettyjรค lauseen osia tai liittรครคkseen ehdon, joka on aina tosi. Se hyรถdyntรครค huonosti suunniteltujen verkkosovellusten suunnitteluvirheitรค hyรถdyntรครคkseen SQL-lauseita haitallisen SQL-koodin suorittamiseen.
Data on yksi tietojรคrjestelmien tรคrkeimmistรค komponenteista. Organisaatio kรคyttรครค tietokantapohjaisia โโverkkosovelluksia saadakseen tietoja asiakkailta. SQL on lyhenne sanoista Structured Query Language. Sitรค kรคytetรครคn tietokannan tietojen hakemiseen ja kรคsittelemiseen.
Kuinka SQL-injektiohyรถkkรคys toimii?
SQL-injektion avulla suoritettavien hyรถkkรคysten tyypit vaihtelevat tietokantakoneen tyypin mukaan. Hyรถkkรคys toimii dynaamisilla SQL-kรคskyillรค. Dynaaminen lauseke on lause, joka luodaan ajon aikana kรคyttรคmรคllรค parametreja salasanaa verkkolomakkeesta tai URI-kyselymerkkijonosta.
Esimerkki SQL-injektiosta
Tarkastellaanpa yksinkertaista verkkosovellusta kirjautumislomakkeella. HTML-lomakkeen koodi nรคkyy alla.
<form action=โindex.phpโ method="post"> <input type="email" name="email" required="required"/> <input type="password" name="password"/> <input type="checkbox" name="remember_me" value="Remember me"/> <input type="submit" value="Submit"/> </form>
TรSSร,
- Yllรค oleva lomake hyvรคksyy sรคhkรถpostiosoitteen ja salasanan ja lรคhettรครค ne sitten osoitteeseen a PHP tiedosto nimeltรค index.php.
- Siinรค on mahdollisuus tallentaa kirjautumisistunto evรคsteeseen. Olemme pรครคttรคneet tรคmรคn muista_me-valintaruudusta. Se kรคyttรครค post-menetelmรครค tietojen lรคhettรคmiseen. Tรคmรค tarkoittaa, ettรค arvoja ei nรคytetรค URL-osoitteessa.
Oletetaan, ettรค kรคyttรคjรคtunnuksen tarkistamisen taustaohjelma on seuraava
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
TรSSร,
- Yllรค oleva lauseke kรคyttรครค arvoja
$_POST[]suoraan desinfioimatta niitรค. - Salasana on salattu MD5-algoritmilla.
Havainnollistamme SQL-injektiohyรถkkรคystรค sqlfiddlen avulla. Avaa URL-osoite http://sqlfiddle.com/ selaimessasi. Saat seuraavan ikkunan.
Huomautus: sinun on kirjoitettava SQL-kรคskyt
Vaihe 1) Kirjoita tรคmรค koodi vasempaan ruutuun
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`email` VARCHAR(45) NULL,
`password` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
insert into users (email,password) values ('m@m.com',md5('abc'));
Vaihe 2) Napsauta Build Schema
Vaihe 3) Kirjoita tรคmรค koodi oikeaan ruutuun
select * from users;
Vaihe 4) Napsauta Suorita SQL. Nรคet seuraavan tuloksen
Oletetaan, ettรค kรคyttรคjรคtarvikkeet admin@admin.sys ja 1234 salasanana. Tietokantaa vastaan โโsuoritettava lauseke olisi
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Yllรค olevaa koodia voidaan hyรถdyntรครค kommentoimalla salasanaosa ja liittรคmรคllรค ehto, joka on aina totta. Oletetaan, ettรค hyรถkkรครคjรค antaa seuraavan syรถtteen sรคhkรถpostiosoitekenttรครคn.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx salasanalle.
Luotu dynaaminen lause on seuraava.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
TรSSร,
- xxx@xxx.xxx pรครคttyy yhteen lainaukseen, joka tรคydentรครค merkkijonolainauksen
OR 1 = 1RAJA 1 on ehto, joka on aina tosi ja rajoittaa palautetut tulokset vain yhteen tietueeseen.- โ ' AND โฆ on SQL-kommentti, joka eliminoi salasanaosan.
Kopioi yllรค oleva SQL-lause ja liitรค se SQL FiddleSuorita SQL-tekstiruutu alla olevan kuvan mukaisesti
Hakkerointitoiminta: SQL-injektointi verkkosovellukseen
Meillรค on yksinkertainen verkkosovellus osoitteessa http://www.techpanda.org/ joka on alttiina SQL Injection -hyรถkkรคyksille vain esittelytarkoituksessa. Yllรค oleva HTML-lomakekoodi on otettu kirjautumissivulta. Sovellus tarjoaa perusturvallisuuden, kuten sรคhkรถpostikentรคn puhdistamisen. Tรคmรค tarkoittaa, ettรค yllรค olevaa koodiamme ei voida kรคyttรครค sisรครคnkirjautumisen ohittamiseen.
Tรคmรคn kiertรคmiseksi voimme sen sijaan hyรถdyntรครค salasanakenttรครค. Alla oleva kaavio nรคyttรครค vaiheet, jotka sinun on noudatettava
Oletetaan, ettรค hyรถkkรครคjรค antaa seuraavan syรถtteen
- Vaihe 1: Kirjoita sรคhkรถpostiosoitteeksi xxx@xxx.xxx
- Vaihe 2: Kirjoita xxx') TAI 1 = 1 โ ]
- Napsauta Lรคhetรค-painiketta
- Sinut ohjataan kojelautaan
Luotu SQL-kรคsky on seuraava
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Alla oleva kaavio havainnollistaa, ettรค lausunto on luotu.
TรSSร,
- Lauseke olettaa รคlykkรครคsti, ettรค md5-salausta kรคytetรครคn
- Tรคyttรครค lainausmerkin ja sulkusulun
- Liittรครค vรคitteeseen ehdon, joka on aina totta
Yleensรค onnistunut SQL-injektiohyรถkkรคys yrittรครค useilla eri tekniikoilla, kuten yllรค esitellyillรค, suorittaa onnistuneen hyรถkkรคyksen.
Muut SQL-injektiohyรถkkรคystyypit
SQL-injektiot voivat aiheuttaa enemmรคn haittaa kuin vain kirjautumisalgoritmien ohittaminen. Jotkut hyรถkkรคyksistรค sisรคltรคvรคt
- Tietojen poistaminen
- Pรคivitetรครคn tietoja
- Lisรคtรครคn tietoja
- Suorittaa komentoja palvelimella, jotka voivat ladata ja asentaa haittaohjelmia, kuten troijalaisia
- Arvokkaiden tietojen, kuten luottokorttitietojen, sรคhkรถpostin ja salasanojen, vienti hyรถkkรครคjรคn etรคpalvelimelle
- Kรคyttรคjรคn kirjautumistietojen saaminen jne
- Evรคsteisiin perustuva SQL-injektio
- Virhepohjainen SQL-injektio
- Sokea SQL-injektio
Yllรค oleva luettelo ei ole tyhjentรคvรค; se vain antaa sinulle kรคsityksen siitรค, mitรค SQL Injection on
Automaatiotyรถkalut SQL-injektiolle
Yllรค olevassa esimerkissรค kรคytimme manuaalisia hyรถkkรคystekniikoita, jotka perustuivat laajaan SQL-tietoumme. On olemassa automaattisia tyรถkaluja, joiden avulla voit suorittaa hyรถkkรคykset tehokkaammin ja mahdollisimman lyhyessรค ajassa. Nรคitรค tyรถkaluja ovat mm
- SQLMap - http://sqlmap.org/
- JSQL-injektio - https://tools.kali.org/vulnerability-analysis/jsql
Kuinka estรครค SQL-injektiohyรถkkรคykset
Organisaatio voi suojautuakseen SQL Injection -hyรถkkรคyksiltรค seuraavan kรคytรคnnรถn mukaisesti.
- Kรคyttรคjรคn syรถtteeseen ei pitรคisi koskaan luottaa โ Se on aina puhdistettava ennen kuin sitรค kรคytetรครคn dynaamisissa SQL-kรคskyissรค.
- Tallennetut menettelyt - nรคmรค voivat kapseloida SQL-kรคskyt ja kรคsitellรค kaikkia syรถtteitรค parametreina.
- Valmistetut lausunnot - valmistetut kรคskyt toimimaan luomalla ensin SQL-kรคsky ja kรคsittelemรคllรค sitten kaikkia lรคhetettyjรค kรคyttรคjรคtietoja parametreina. Tรคllรค ei ole vaikutusta SQL-kรคskyn syntaksiin.
- Sรครคnnรถlliset lausekkeet - niiden avulla voidaan havaita mahdollinen haitallinen koodi ja poistaa se ennen SQL-kรคskyjen suorittamista.
- Tietokantayhteyden kรคyttรคjien kรคyttรถoikeudet โ vain tarpeelliset kรคyttรถoikeudet tulee antaa tileille, joihin kรคytetรครคn muodosta yhteys tietokantaan. Tรคmรค voi auttaa vรคhentรคmรครคn SQL-kรคskyjen suorituskykyรค palvelimella.
- Virheilmoitukset - nรคmรค eivรคt saa paljastaa arkaluonteisia tietoja ja missรค tarkalleen virhe tapahtui. Yksinkertaiset mukautetut virheilmoitukset, kuten "Anteeksi, meillรค on teknisiรค virheitรค. Tekniseen tiimiin on otettu yhteyttรค. Yritรค myรถhemmin uudelleen" voidaan kรคyttรครค virheen aiheuttaneiden SQL-lauseiden nรคyttรคmisen sijaan.
Hakkerointi: Kรคytรค Havij-ohjelmaa SQL-injektioon
Tรคssรค kรคytรคnnรถn tilanteessa aiomme kรคyttรครค Havij Advanced SQL Injection -ohjelmaa verkkosivuston haavoittuvuuksien varalta.
Huomautus: sinun virustorjuntaohjelma voi merkitรค sen luonteensa vuoksi. Lisรครค se poissulkemisluetteloon tai keskeytรค virustorjuntaohjelmisto.
Alla olevassa kuvassa nรคkyy Havijin pรครคikkuna
Yllรค olevaa tyรถkalua voidaan kรคyttรครค verkkosivuston/sovelluksen haavoittuvuuden arvioimiseen.
Yhteenveto
- SQL Injection on hyรถkkรคystyyppi, joka kรคyttรครค hyvรคkseen huonoja SQL-kรคskyjรค
- SQL-injektiota voidaan kรคyttรครค sisรครคnkirjautumisalgoritmien ohittamiseen, tietojen hakemiseen, lisรครคmiseen sekรค pรคivittรคmiseen ja poistamiseen.
- SQL-injektiotyรถkaluja ovat SQLMap, SQLPing ja SQLSmack jne.
- Hyvรค suojauskรคytรคntรถ SQL-lausetta kirjoitettaessa voi auttaa vรคhentรคmรครคn SQL-injektiohyรถkkรคyksiรค.








