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äätelleet tämän remember_me-valintaruudusta. Se käyttää post-metodia tietojen lähettämiseen. Tämä tarkoittaa, että arvoja ei näytetä URL.

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ä sqlfiddle-komennolla. Avaa URL 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ökaluihin kuuluvat SQLMap, SQLPingja SQLSmack jne.
  • Hyvä suojauskäytäntö SQL-lausetta kirjoitettaessa voi auttaa vähentämään SQL-injektiohyökkäyksiä.

Tiivistä tämä viesti seuraavasti: