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.

SQL Injection

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

SQL-injektio toimii

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

SQL-injektio toimii

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 = 1 RAJA 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

SQL-injektio toimii

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

SQL Lisรครค verkkosovellus

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 โ€” ]

SQL Lisรครค verkkosovellus

  • 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.

SQL Lisรครค verkkosovellus

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

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

Kรคytรค Havijaa SQL-injektioon

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รค.

Tiivistรค tรคmรค viesti seuraavasti: