SQL-i süstimise õpetus: kuidas õppida näitega
Mis on SQL-i süstimine?
SQL-i süstimine on rünnak, mis mürgitab dünaamilisi SQL-lauseid, et kommenteerida avalduse teatud osi või lisada tingimus, mis on alati tõene. See kasutab ära halvasti kujundatud veebirakenduste disainivigu, et kasutada ära SQL-lauseid pahatahtliku SQL-koodi käivitamiseks.
Andmed on infosüsteemide üks olulisemaid komponente. Organisatsioon kasutab klientidelt andmete hankimiseks andmebaasipõhiseid veebirakendusi. SQL on struktureeritud päringukeele akronüüm. Seda kasutatakse andmebaasis olevate andmete toomiseks ja töötlemiseks.
Kuidas SQL-i süstimise rünnak töötab?
SQL-i süstimise abil sooritatavate rünnete tüübid sõltuvad andmebaasimootori tüübist. Rünnak töötab dünaamiliste SQL-lausetega. Dünaamiline avaldus on avaldus, mis genereeritakse käitamise ajal, kasutades veebivormi või URI päringustringi parameetrite parooli.
SQL-i süstimise näide
Vaatleme lihtsat sisselogimisvormiga veebirakendust. HTML-vormi kood on näidatud allpool.
<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>
SIIN,
- Ülaltoodud vorm aktsepteerib e-posti aadressi ja parooli, seejärel saadab need aadressile a PHP faili nimega index.php.
- Sellel on võimalus salvestada sisselogimisseanss küpsisesse. Oleme selle järeldanud märkeruudust Remember_me. See kasutab andmete esitamiseks postitamismeetodit. See tähendab, et väärtusi ei kuvata URL-is.
Oletame, et kasutaja ID kontrollimiseks mõeldud taustprogrammi avaldus on järgmine
SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
SIIN,
- Ülaltoodud avaldus kasutab väärtusi
$_POST[]
massiivi otse ilma neid desinfitseerimata. - Parool krüpteeritakse MD5 algoritmi abil.
Illustreerime SQL-i süstimise rünnakut sqlfiddle'i abil. Avage URL http://sqlfiddle.com/ oma veebibrauseris. Näete järgmise akna.
Märkus: peate kirjutama SQL-laused
Step 1) Sisestage see kood vasakpoolsesse paani
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'));
Step 2) Klõpsake käsul Skeemi koostamine
Step 3) Sisestage see kood parempoolsesse paani
select * from users;
Step 4) Klõpsake käsul Käivita SQL. Näete järgmist tulemust
Oletame, et kasutaja tarvikud admin@admin.sys ja 1234 paroolina. Andmebaasi vastu täidetav avaldus oleks
SELECT * FROM users WHERE email = 'admin@admin.sys' AND password = md5('1234');
Ülaltoodud koodi saab ära kasutada, kommenteerides parooliosa ja lisades tingimuse, mis jääb alati tõeseks. Oletame, et ründaja sisestab e-posti aadressi väljale järgmise sisendi.
xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ]
xxx parooli jaoks.
Loodud dünaamiline avaldus on järgmine.
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' OR 1 = 1 LIMIT 1 -- ' ] AND password = md5('1234');
SIIN,
- xxx@xxx.xxx lõpeb ühe jutumärgiga, mis lõpetab stringi jutumärgi
OR 1 = 1
LIMIT 1 on tingimus, mis on alati tõene ja piirab tagastatud tulemusi ainult ühe kirjega.- — ' JA … on SQL-i kommentaar, mis välistab parooliosa.
Kopeerige ülaltoodud SQL-lause ja kleepige see sisse SQL FiddleKäivitage SQL-i tekstikast, nagu allpool näidatud
Häkkimistegevus: SQL-i sisestage veebirakendus
Meil on lihtne veebirakendus aadressil http://www.techpanda.org/ mis on SQL Injectioni rünnakute suhtes haavatav ainult tutvustamise eesmärgil. Ülaltoodud HTML-vormi kood on võetud sisselogimislehelt. Rakendus pakub elementaarset turvalisust, näiteks meilivälja desinfitseerimist. See tähendab, et meie ülaltoodud koodi ei saa kasutada sisselogimisest möödahiilimiseks.
Sellest mööda saamiseks võime selle asemel kasutada paroolivälja. Allolev diagramm näitab samme, mida peate järgima
Oletame, et ründaja annab järgmise sisendi
- 1. samm: sisestage e-posti aadressiks xxx@xxx.xxx
- 2. samm: sisestage xxx') VÕI 1 = 1 — ]
- Klõpsake nuppu Esita
- Teid suunatakse armatuurlauale
Loodud SQL-lause on järgmine
SELECT * FROM users WHERE email = 'xxx@xxx.xxx' AND password = md5('xxx') OR 1 = 1 -- ]');
Allolev diagramm illustreerib avalduse genereerimist.
SIIN,
- Väide eeldab arukalt, et kasutatakse md5 krüptimist
- Lõpetab ühe jutumärgi ja sulgsulgu
- Lisab väitele tingimuse, mis jääb alati tõeseks
Üldiselt proovib edukas SQL-i süstimise rünnak eduka rünnaku läbiviimiseks kasutada mitmeid erinevaid tehnikaid, nagu ülaltoodud.
Muud SQL-i süstimise rünnakute tüübid
SQL-i süstid võivad teha rohkem kahju kui lihtsalt sisselogimisalgoritmide läbimine. Mõned rünnakud hõlmavad
- Andmete kustutamine
- Andmete värskendamine
- Andmete sisestamine
- Käskude täitmine serveris, mis võivad alla laadida ja installida pahatahtlikke programme, näiteks troojalasi
- Ründaja kaugserverisse väärtuslike andmete (nt krediitkaardiandmed, meilid ja paroolid) eksportimine
- Kasutajate sisselogimisandmete hankimine jne
- SQL-i süstimine küpsiste põhjal
- Veapõhine SQL-i süstimine
- Pime SQL-i süstimine
Ülaltoodud loetelu ei ole ammendav; see lihtsalt annab teile aimu, mida SQL Injection on
SQL-i sisestamise automatiseerimistööriistad
Ülaltoodud näites kasutasime käsitsi ründetehnikaid, mis põhinesid meie laialdastel teadmistel SQL-i kohta. On olemas automatiseeritud tööriistad, mis aitavad teil rünnakuid tõhusamalt ja võimalikult lühikese aja jooksul sooritada. Need tööriistad hõlmavad
- SQLMap – http://sqlmap.org/
- JSQL-i süstimine - https://tools.kali.org/vulnerability-analysis/jsql
Kuidas vältida SQL-i süstimise rünnakuid
Organisatsioon võib enda kaitsmiseks SQL-i süstimise rünnakute eest võtta kasutusele järgmise poliitika.
- Kasutaja sisendit ei tohiks kunagi usaldada – Enne dünaamilistes SQL-lausetes kasutamist tuleb see alati puhastada.
- Salvestatud protseduurid - need võivad SQL-lauseid kapseldada ja kogu sisendit käsitleda parameetritena.
- Koostatud avaldused - ettevalmistatud avaldused tööle, luues esmalt SQL-lause, seejärel käsitledes kõiki esitatud kasutajaandmeid parameetritena. See ei mõjuta SQL-lause süntaksit.
- Regulaaravaldised – neid saab kasutada potentsiaalse kahjuliku koodi tuvastamiseks ja selle eemaldamiseks enne SQL-lausete käivitamist.
- Andmebaasiühenduse kasutaja juurdepääsuõigused – kasutatud kontodele tuleks anda ainult vajalikud juurdepääsuõigused ühenduda andmebaasiga. See võib aidata vähendada SQL-lausete võimet serveris täita.
- Veateated – need ei tohiks paljastada tundlikku teavet ja täpselt, kus viga ilmnes. Lihtsad kohandatud veateated, näiteks „Vabandust, ilmnevad tehnilised vead. Tehnilise meeskonnaga on ühendust võetud. Proovige hiljem uuesti” saab kasutada tõrke põhjustanud SQL-lausete kuvamise asemel.
Häkkimistegevus: kasutage SQL-i sisestamiseks Havijit
Selles praktilises stsenaariumis kasutame veebisaidi haavatavuste otsimiseks programmi Havij Advanced SQL Injection.
Märkus: teie viirusetõrje programm võib selle olemuse tõttu märgistada. Peaksite selle lisama välistamiste loendisse või peatama viirusetõrjetarkvara.
Allolev pilt näitab Haviji peaakent
Ülaltoodud tööriista saab kasutada veebisaidi/rakenduse haavatavuse hindamiseks.
kokkuvõte
- SQL-i süstimine on ründetüüp, mis kasutab ära halbu SQL-lauseid
- SQL-i süstimist saab kasutada sisselogimisalgoritmidest möödahiilimiseks, andmete toomiseks, sisestamiseks ning värskendamiseks ja kustutamiseks.
- SQL-i sisestamise tööriistade hulka kuuluvad SQLMap, SQLPing ja SQLSmack jne.
- Hea turvapoliitika SQL-lause kirjutamisel võib aidata vähendada SQL-i süstimise rünnakuid.