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