SQL Injection Tutorial: Opi esimerkin avulla

Sisällysluettelo:

Anonim

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äsittelyyn.

Mikä on SQL-injektio?

SQL Injection on hyökkäys, joka myrkyttää dynaamiset SQL-lauseet kommentoidakseen lauseen tiettyjä osia tai liittämällä ehdon, joka on aina totta. Se käyttää hyväksi huonosti suunniteltujen verkkosovellusten suunnitteluvirheitä hyödyntääkseen SQL-lauseita haitallisen SQL-koodin suorittamiseen.

Tässä opetusohjelmassa opit SQL Injection -tekniikat ja kuinka voit suojata verkkosovelluksia tällaisilta hyökkäyksiltä.

  • Kuinka SQL-injektio toimii
  • Hakkerointi: SQL injektoi verkkosovellus
  • Muut SQL Injection -hyökkäystyypit
  • Automaatiotyökalut SQL-injektioon
  • Kuinka estää SQL-injektiohyökkäykset
  • Hakkerointi: Käytä Havjia SQL-injektioon

Kuinka SQL-injektio toimii

SQL-injektiolla suoritettavat hyökkäykset vaihtelevat tietokantamoottorin tyypin mukaan. Hyökkäys toimii dynaamisilla SQL-käskyillä . Dynaaminen käsky on käsky, joka luodaan ajon aikana käyttämällä verkkolomakkeen tai URI-kyselymerkkijonon parametrisalasanaa.

Tarkastellaan yksinkertaista verkkosovellusta, jolla on kirjautumislomake. HTML-lomakkeen koodi näkyy alla.

TÄSSÄ,

  • Yllä oleva lomake hyväksyy sähköpostiosoitteen ja salasana lähettää ne sitten PHP-tiedostoon nimeltä index.php.
  • Sillä on mahdollisuus tallentaa kirjautumisistunto evästeeseen. Olemme päättäneet tämän muista_me-valintaruudusta. Se lähettää tiedot lähettämismenetelmällä. Tämä tarkoittaa, että arvot eivät näy URL-osoitteessa.

Oletetaan, että taustalla oleva lause käyttäjätunnuksen tarkistamiseksi on seuraava

VALITSE * KÄYTTÄJÄT MISSÄ email = $ _POST ['email'] JA salasana = md5 ($ _ POST ['password']);

TÄSSÄ,

  • Yllä oleva lause käyttää taulukon $ _POST [] arvoja suoraan puhdistamatta niitä.
  • Salasana salataan MD5-algoritmilla.

Esittelemme SQL-injektiohyökkäyksen sqlfiddle-sovelluksella. Avaa URL-osoite http://sqlfiddle.com/ selaimessasi. Saat seuraavan ikkunan.

Huomaa: sinun on kirjoitettava SQL-käskyt

Vaihe 1) Syötä 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 ('This email address is being protected from spambots. You need JavaScript enabled to view it.',md5('abc'));

Vaihe 2) Valitse Koontimalli

Vaihe 3) Syötä tämä koodi oikeaan ruutuun

valitse * käyttäjistä;

Vaihe 4) Valitse Suorita SQL. Näet seuraavan tuloksen

Oletetaan, että käyttäjän tarvikkeet Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. ja 1234 salasanana. Tietokantaan suoritettava lausunto olisi

SELECT * FROM users WHERE email = ' Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. ' JA salasana = md5 ('1234');

Yllä olevaa koodia voidaan hyödyntää kommentoimalla salasanaosa ja lisäämällä ehto, joka on aina totta. Oletetaan, että hyökkääjä antaa seuraavan syötteen sähköpostiosoitekenttään.

Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. ' TAI 1 = 1 RAJA 1 - ']

xxx salasanalle.

Luotu dynaaminen lause on seuraava.

SELECT * FROM users WHERE email = ' Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. ' TAI 1 = 1 RAJA 1 - '] JA salasana = md5 (' 1234 ');

TÄSSÄ,

  • Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. päättyy yhdellä lainauksella, joka täydentää merkkijonon lainauksen
  • TAI 1 = 1 RAJA 1 on ehto, joka on aina totta ja rajoittaa palautetut tulokset vain yhteen tietueeseen.
  • - 'AND… on SQL-kommentti, joka poistaa salasanaosan.

Kopioi yllä oleva SQL-käsky ja liitä se SQL FiddleRun SQL Text -ruutuun alla esitetyllä tavalla

Hakkerointi: SQL injektoi verkkosovellus

Meillä on yksinkertainen verkkosovellus osoitteessa http://www.techpanda.org/, joka on alttiina SQL Injection -hyökkäyksille vain esittelyä varten. Yllä oleva HTML-lomakekoodi otetaan sisäänkirjautumissivulta. Sovellus tarjoaa perusturvan, kuten sähköpostikentän puhdistamisen. Tämä tarkoittaa, että yllä olevaa koodia ei voida käyttää kirjautumisen ohittamiseen.

Tämän kiertämiseksi voimme sen sijaan hyödyntää salasanakenttää. Alla oleva kaavio näyttää vaiheet, joita sinun on noudatettava

Oletetaan, että hyökkääjä antaa seuraavan syötteen

  • Vaihe 1: Syötä Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. sähköpostiosoitteena
  • 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 = ' Tämä sähköpostiosoite on suojattu spamboteilta. Tarvitset JavaScriptin käyttääksesi sitä. ' JA salasana = md5 ('xxx') TAI 1 = 1 -] ');

Alla oleva kaavio kuvaa, että lause on luotu.

TÄSSÄ,

  • Lauseke olettaa älykkäästi, että käytetään md5-salausta
  • Viimeistelee yhden lainauksen ja sulkulistan
  • Liittää lauseeseen ehdon, joka on aina totta

Yleensä onnistunut SQL Injection -hyökkäys yrittää useita erilaisia ​​tekniikoita, kuten yllä esitetyt, onnistuneen hyökkäyksen suorittamiseksi.

Muut SQL Injection -hyökkäystyypit

SQL-injektiot voivat aiheuttaa enemmän haittaa kuin vain kirjautumisalgoritmien välittäminen. Jotkut hyökkäyksistä sisältävät

  • Poistetaan tietoja
  • Tietojen päivittäminen
  • Lisätään tietoja
  • Suoritetaan komentoja palvelimella, joka voi ladata ja asentaa haitallisia ohjelmia, kuten troijalaisia
  • Vie arvokkaita tietoja, kuten luottokorttitiedot, sähköposti ja salasanat hyökkääjän etäpalvelimeen
  • Käyttäjän kirjautumistietojen saaminen jne

Yllä oleva luettelo ei ole tyhjentävä; se vain antaa sinulle käsityksen siitä, mitä SQL-injektio

Automaatiotyökalut SQL-injektioon

Edellä olevassa esimerkissä käytimme manuaalisia hyökkäystekniikoita, jotka perustuivat laajaan SQL-tietämykseemme. On olemassa automaattisia työkaluja, jotka auttavat sinua suorittamaan hyökkäykset tehokkaammin ja mahdollisimman lyhyessä ajassa. Näitä työkaluja ovat

  • SQLSmack - https://securiteam.com/tools/5GP081P75C
  • SQLPing 2 - http://www.sqlsecurity.com/downloads/sqlping2.zip?attredirects=0&d=1
  • SQLMap - http://sqlmap.org/

Kuinka estää SQL-injektiohyökkäykset

Organisaatio voi ottaa käyttöön seuraavan käytännön suojautua SQL Injection -hyökkäyksiltä.

  • Käyttäjän syötteisiin ei pitäisi koskaan luottaa - ne on aina puhdistettava, ennen kuin niitä käytetään dynaamisissa SQL-käskyissä.
  • Tallennetut menettelyt - nämä voivat kapseloida SQL-käskyt ja käsitellä kaikkia syötteitä parametreina.
  • Valmistellut lauseet - valmiit lauseet toimimaan luomalla ensin SQL-käsky ja käsittelemällä sitten kaikki lähetetyt käyttäjätiedot parametreina. Tällä ei ole vaikutusta SQL-käskyn syntaksiin.
  • Säännölliset lausekkeet - niitä voidaan käyttää mahdollisten haitallisten koodien havaitsemiseen ja poistamiseen ennen SQL-lauseiden suorittamista.
  • Tietokantayhteyden käyttäjän käyttöoikeudet - vain tarvittavat käyttöoikeudet tulisi antaa tileille, joita käytetään yhteyden muodostamiseen tietokantaan. Tämä voi auttaa vähentämään sitä, mitä SQL-käskyt voivat suorittaa palvelimella.
  • Virheilmoitukset - niiden ei tule paljastaa arkaluontoisia tietoja ja virheiden tarkkaa sijaintia. Yksinkertaiset mukautetut virheilmoitukset, kuten “Valitettavasti, meillä on teknisiä virheitä. Tekniseen ryhmään on otettu yhteyttä. Yritä myöhemmin uudelleen ”voidaan käyttää virheen aiheuttaneiden SQL-käskyjen näyttämisen sijaan.

Hakkerointi: Käytä Havijia SQL-injektioon

Tässä käytännön tilanteessa aiomme käyttää Havij Advanced SQL Injection -ohjelmaa verkkosivujen etsimiseen haavoittuvuuksien varalta.

Huomaa: virustentorjuntaohjelma voi ilmoittaa sen luonteensa vuoksi. Lisää se poissulkemisluetteloon tai keskeytä virustorjuntaohjelma.

Alla olevassa kuvassa näkyy Havijin pääikkuna

Yllä olevaa työkalua voidaan käyttää verkkosivuston / sovelluksen haavoittuvuuden arviointiin.

Yhteenveto

  • SQL Injection on hyökkäystyyppi, joka hyödyntää huonoja SQL-käskyjä
  • SQL-injektiota voidaan käyttää kirjautumisalgoritmien ohittamiseen, tietojen noutamiseen, lisäämiseen sekä päivittämiseen ja poistamiseen.
  • SQL-injektointityökalut sisältävät SQLMapin, SQLPingin ja SQLSmackin jne.
  • Hyvä tietoturvakäytäntö kirjoitettaessa SQL-käskyjä voi auttaa vähentämään SQL-injektiohyökkäyksiä.