Autor | Zpráva | ||
---|---|---|---|
virgo86 Profil |
#1 · Zasláno: 10. 9. 2009, 16:10:22
Dne 9.9.09 moje webové stránky napadl hacker. Přepsal soubor index.php kde mi nechal vzkaz abych si stránky opravil. Mám jednoduchy zdrojový kód, na strankách nepouživám ověření totožnosti takže ani session. Je to moje chyba jako programátora nebo chyba firmy která mi poskytuje webhosting a domenu. Jak se můžu bránit? díky Petr
|
||
Joker Profil |
#2 · Zasláno: 10. 9. 2009, 16:23:52
virgo86:
„Jak se můžu bránit?“ Opravit chyby, které umožnily hacknutí toho webu. Nejlépe i chyby, které by potenciálně mohly umožnit další hacknutí. Toť asi vše, co se bez bližších detailů dá říct. Žádný univerzální kód, něco jako zarid_aby_me_neslo_hacknout(); neexistuje. |
||
virgo86 Profil |
dobře tedy můj kód z jednoho z mých webů. (mimochodem hacker napadl 80% mých stranek, mám je totiž na jednom serveru prostě domeny 3řadu). Kde je chyba...jinak nechci aby někdo vynakladal čas na moje chyby ale nevím čemu se vyvarovat. Vůbec nechápu jak se mohl někdo dostat do mého kódu.
soubor index.php: <?php require_once("fce.php"); titulek('VIRGOnet'); konec(); ?> soubor fce.php <?php function titulek($titulek) { ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <meta name="generator" content="PSPad editor, www.pspad.com"> <link rel="stylesheet" type="text/css" href="index.css"> <title> <?php echo $titulek; ?> </title> </head> <table border="2" align="center" bgcolor=#fbfbfb height="200px" width="800" class="nadpis"> <img src="firnadpis2.png"> <tr><td> <?php web(); ?> </td> <td align="center"> <?php epa(); ?> </td> </tr> <tr><td> <?php osob(); ?> </td><td> <?php benny(); ?> </td> </tr> <?php } function web() { ?> <img src="klavesnice2.jpg" align="left"><h1>Tvorba webových stránek </h1>- Tvorba podle Vaších představ<br />- Pomocí PHP, HTML, FLASH, MYSQL<br />- Za dostupné ceny<br /> <p> <div id="tlacitko"> <a href="http://firma.virgonet.cz">Pokračujte zde...</a> </div> <?php } function epa() { ?> <img src="stud.jpg" align="right"><h1>SPŠ Elektrotechniky & Informatiky Ostrava</h1>- Stránky třídy EP4A<br />- Protokoly, maturitní otázky, chat<br />- Kompletní seznam žáku<br /> <div id="tlacitko"> <a href="http://ep4a.virgonet.cz">Pokračujte zde...</a> </div> <?php } function osob() { /*<form action="http:www.firma.virgonet.cz"> <input type="submit" value="Pokračuj zde"> </form>*/ echo '<img src="oper.png" align="left">'; ?><h1>Virgo web´s</h1>- Rodinné fotoalbum <br />- češtiny, Programy<br />- Vše o Operačních Systémech<br /> <p> <div id="tlacitko"> <a href="http://virgo.virgonet.cz">Pokračujte zde...</a> </div> <?php } function benny() { ?> <img src="ben.jpg" align="right"><h1>Alan Pamada alias BENNY</h1>- Boloňský Psík<br />- Fotografie<br />- Diskuze<br /> <div id="tlacitko"> <a href="http://benny.virgonet.cz">Pokračujte zde...</a> </div> <?php } function menu() { tlacitko('nab','Nabízíme'); tlacitko('ref','Reference'); tlacitko('cenik','Ceník'); tlacitko('neco','Něco o Nás'); tlacitko('kontakt','Kontakt'); echo '</strong>'; echo '</td><td class="editor" rowspan="2" valign="top">'; } function tlacitko($adresa,$nadpis) { echo '<a href="'; echo $adresa; echo '.php">'; echo '<font face="Wingdings" size="4">č</font><strong>'; echo $nadpis; ?></strong></a><br /> <?php } function konec() { ?> </table> <div id="konec"> <img src="desingby.png"> </div> </body> </html> <?php } ?> |
||
avaster Profil |
#4 · Zasláno: 10. 9. 2009, 22:21:35
nenahravas na hosting subory pomocou Total Commandera?
pokial ano tak odporucam zmenit heslo na pristup, a skusit iny program na nahravanie cez FTP.. ..pokial viem tak ziskat udajena FTP z TC je jednoduche pomocou maleho virusu v PC.. |
||
virgo86 Profil |
#5 · Zasláno: 11. 9. 2009, 09:35:35 · Upravil/a: virgo86
„nenahravas na hosting subory pomocou Total Commandera?“
Ne použivám PSpad nebo ruční zadavaní přimo přes prohližeč. Aby mohl hacker změnít mé soubory musí znát moje přistupové údaje nebo to lze nějak obejít? Pomohlo by změnit heslo za nějaké bezpečnější? Nechapu jak ošetřit kód jakým způsobem se dokaže někdo do souboru nabourat pochopim že si ho přečte ale že ho i přepiše:( |
||
Joker Profil |
#6 · Zasláno: 11. 9. 2009, 10:13:00
virgo86:
„Pomohlo by změnit heslo za nějaké bezpečnější?“ Možná ano. Umí ten skript nahrávat soubory na web? Je ve skriptu někde uložené nějaké heslo? |
||
virgo86 Profil |
#7 · Zasláno: 11. 9. 2009, 10:30:32
„Umí ten skript nahrávat soubory na web?“
skript je rozčleněn. mám jeden adresář hlavní který mi otevira po kliknuti další adresaře. v hlavním skriptu nenahravám nic na server ale v jinych ano. Jinak řečeno nahravám sobory jenom textové ale hacker napadl všechny soubrory index.php jak hlavní domenu www tak i poddomeny jako např ep4a.virgonet.cz ale tam taky nic nenahravám. „Je ve skriptu někde uložené nějaké heslo?“ Není pouze přístup k databázi Mysql, heslo pro přístup na ftp nikde není pouze cesta kde se má upload uložit soubor. Ještě jednou se zeptám je to chyba moje někde ve skriptu že se tam hacker dostal (nechci aby někdo hledal chybu to po Vás nechci jen jestly je to možné?). nebo chyba zapezpečení ftp u firmy která mi pronajíma domenu? Ať vím jestly to mám řešit jenom já jako programator těchto stránek nebo to řešit ze serverem. |
||
Joker Profil |
#8 · Zasláno: 11. 9. 2009, 11:43:32
virgo86:
„Ještě jednou se zeptám je to chyba moje někde ve skriptu...“ Potíž je, že my samozřejmě nevíme, jak se tam ten hacker dostal. Teoreticky lze web hacknout přes chybu v PHP: Znám-li chybu umožňující na webu spustit mnou napsaný kód, můžu si na web nahrát i svoje vlastní soubory, případně nahrát skript, který tam ty další soubory dostane. Druhá možnost je nějakým způsobem odchytit nebo zjistit heslo pro FTP. Což jde i nepřímo- jako třeba jeden relativně nedávný případ: Týpek si založil diskusní fórum, kde si u jednotlivých uživatelů ukládal hesla v čitelném tvaru. Následně se pokusil registrovaným uživatelům nabourat e-mailové schránky s heslem z fóra, doufaje, že někteří použili pro fórum stejné heslo jako pro e-mail. Myslím, že tahle historka je docela poučná z pohledu zabezpečení obecně. |
||
Michal Raška Profil * |
#9 · Zasláno: 11. 9. 2009, 13:25:42
Podívej se na http://php.vrana.cz/. Projdi si ten web a pak zkontroluj svůj kód.
A než to vyřešíš, kontroluj stránku Tvého zákazníka. |
||
vynalezce Profil |
#10 · Zasláno: 11. 9. 2009, 14:13:08 · Upravil/a: vynalezce
co takhle hodit sem adresu webu,administrace...
edit ted me napada nemas tam nekde zalohy? edit2:nemas na tech webech administraci? pokud ano chyba bude asi tam |
||
virgo86 Profil |
#11 · Zasláno: 11. 9. 2009, 15:37:18 · Upravil/a: virgo86
ano už vím kde se asi stala chyba.....pro stránky dobrovolných hasičů pro naší vesnici jsem na stranky vložil upload pro soubor informace.doc který slouží jako aktualizace pro nové zprávy pro dva členy sdh je to pod heslem(kdo zná aspoň minimalně php heslo si najde ve skriptu není to tak duležite tak jsem to vyřešil jen podminkou.) potom muže ten člověk vkladat nové aktuality aniž by znál heslo pro ftp. ALE skusil jsem nahrát přes tento upload soubor index.php a světe div se ono to přepsalo soubor na mém webu:) Takže hacker prostě nahral nějakej svůj soubor u mě si přečet cesty k mým poddomenám a všechny je přepsal buď to on nebo nějaký programek jím vytvořený. Doufám že to bude ta chyba.
A teď jak to mužu ošetřit napadlo mě prostě nepříjmat soubory s jinačí připonou než .doc Stačilo by to? skript pro administraci: Vložení hesla: function heslo() { ?> <form action="admin.php" method="post"><strong>Heslo administrátora:</strong> <center> <input name="heslo" type="password" size="15" style="background-color: silver"> <input type="submit" value="POTVRDIT" style="background-color: silver; width:100; cursor: hand"> <?php } ?> admin.php <?php require_once('fce.php'); titulek('admin'); menu(); rss(); if ($heslo!="zapis") { echo '<h1>Zadáno špatné heslo!!<p>Budete přeměrovaní</p></h1><META HTTP-EQUIV="Refresh" CONTENT="3;URL=navs.php">'; exit; } ?> <h1>MENU ADMINISTRATORŮ:</h1> <h2>Ahoj Tome, Tak tady budeme vkládat data na stránky. Heslo znáš ty a já nikdo jiný tak ať to tak zůstane.</h2> <fieldset><legend>Aktuálně</legend> <form enctype="multipart/form-data" action="odber3.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> Náhrat informace na server ze souboru informace.doc:<br /> <input name="userfile" type="file"> <input type="submit" value="Odeslat Soubor"></form> </fieldset> <?php konec(); ?> odber3.php <?php $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT']; $obsah = $_POST['obsah']; require_once('fce.php'); titulek('SDH TUPADLY /ADMIN/'); menu(); rss(); if ($userfile==NULL) { echo '<h1>Na této stránce nemáte opravnění být budete přesměrovaní</h1><META HTTP-EQUIV="Refresh" CONTENT="5;URL=index.php">'; exit; } //nacteni souboru na server $userfile = $HTTP_POST_FILES['userfile']['tmp_name']; $userfile_name = $HTTP_POST_FILES['userfile']['name']; $userfile_size = $HTTP_POST_FILES['userfile']['size']; $userfile_type = $HTTP_POST_FILES['userfile']['type']; $userfile_error = $HTTP_POST_FILES['userfile']['error']; if ($userfile_error > 0) { echo '<h2INFO PRO ADMINA: '; switch ($userfile_error) { case 1: echo 'Soubor přesáhl upload_max_filesize</h2>'; break; case 2: echo 'Soubor přesáhl max. velikost</h2>'; break; case 3: echo 'Soubor je nahrán jen částečně</h2>'; break; case 4: echo 'Soubor se nenahrál</h2>'; break; } exit; } $upfile = "/server1/webs/virgonet.cz/web/sdh/".$userfile_name; if (is_uploaded_file($userfile)) { if (!move_uploaded_file($userfile, $upfile)) { echo '<h2>INFO PRO ADMINA: Soubor nelze přemístit do cílového adresáře</h2>'; exit; } } else { echo '<h1>INFO PRO ADMINA:</h1> <p><h2>Možný útok. </h2>Soubor: '.$userfile_name; exit; } echo '<h1>INFO PRO ADMINA:</h1><p><h2> Soubor byl úspěšně nahrán</h2></p><br /><br />'; $fp = fopen($upfile, 'r'); $contents = fread ($fp, filesize ($upfile)); fclose ($fp); $contents = strip_tags($contents); $fp = fopen($upfile, 'w'); fwrite($fp, $contents); fclose($fp); echo '<strong>Obsah nahraných informací:</strong><br /><hr />'; @ $fp = fopen("/server1/webs/virgonet.cz/web/sdh/".$userfile_name,'r'); if (!$fp) { echo '<h1>INFO PRO ADMINA:</h1><p><h2> Nejsou žádné nové důležité informace</h2></p>'; konec(); exit; } while (!feof($fp)) { $order=fgets($fp, 999); echo $order.'<br />'; } fclose($fp); echo '<br /><hr /></strong>'; konec(); ?> Tato stránka je na sdh.virgonet.cz vím že heslo si každý z Vás dokaže najit tak Vás prosím nepište tam nic. heslo si později až bude web celej a na vlastním serveru předělám do MySQL Tak jdu tedy zkoušet jak to ošetřit pokud máte nějaký šikovný nápad budu jen rád myslím že to pomůže více lidem. Ještě stejně nechápu proč zrovna můj web.....v celém zemi si hacknul mě. co píše tak ten hacker pochazí z východu mimochodem se mužete kouknout na tebis.virgonet.cz to je pořád hacknute protože to nevyuživám. Zatím Vám všem moc děkuji. Jo stránky pana Vrány jsem včera pročital i v knize co mám doma ale konkretní věci zatim nenašel jdu dále studovat. |
||
vynalezce Profil |
#12 · Zasláno: 11. 9. 2009, 16:23:31 · Upravil/a: vynalezce
„teď jak to mužu ošetřit napadlo mě prostě nepříjmat soubory s jinačí připonou než .doc Stačilo by to? “
1. ano ale chce to osetrit poradne 2. jeste by bylo dobre uploadovat to do jednoho adresare a branit se proti vecem jako je ../ 3. chtelo by to pouzit safe mod (pro slozku kazdeho webu) - aby chyba na nem nepostihla zadny dalsi web ani server 4. pokud to jde nejak zablokuj vykonani php pro adresar kam to uploadujes |
||
Calvary Profil * |
#13 · Zasláno: 11. 9. 2009, 16:43:56
Kde máš uložený svoje heslo? V DB? Pokud ano, dá se to hacknout pomocí jednoduchého kódu a když to není ošetřeno, tak se dá přihlásit jako admin.
|
||
virgo86 Profil |
#14 · Zasláno: 11. 9. 2009, 16:56:59
„1. ano ale chce to osetrit poradne “
budu se snažit. postupně Vám ukažu jak jsem to udělal. „2. jeste by bylo dobre uploadovat to do jednoho adresare a branit se proti vecem jako je ../ “ to znamená že nemám používat složky ale vše do hlavního adresáře? „3. chtelo by to pouzit safe mod (pro slozku kazdeho webu) - aby chyba na nem nepostihla zadny dalsi web ani server “ Nevím co je safe mod....mužeš hodit nějakou bližší info a jenom pro mě maličkost co je TOKEN „4. pokud to jde nejak zablokuj vykonani php pro adresar kam to uploadujes“ To může akorat provozovatel serveru kde mám webhosting nebo já? „Kde máš uložený svoje heslo?“ heslo tam neni proste jenom podminka se koukni na začatek skriptu admin.php:) zati mjsem to neřešil teprve se do toho dam ohledně hesla....web neni hotový tak zatim mi to neva. ale podle tebe je lepší heslo ukladat kde? myslíš že když ho uložim do databaze zašifrované že ho lze získat?´ Jdu hledat další informace o safe mod teď jsem dočetl info o CSRF zajimavé ale bude mi dele trvat než to pochopím pravě že nevím co známená ten token |
||
DJ Miky Profil |
#15 · Zasláno: 11. 9. 2009, 21:29:20
Jenom drobnost - to heslo si změň, je tam pořád "zapis" :-).
|
||
Calvary Profil * |
#16 · Zasláno: 12. 9. 2009, 07:47:07
Heslo z DB jde získa, pokud uděláš chybu. Např. uložit údaj do souboru *.inc, jako se mi to povedlo jednou na začátku:) Jinak když to zašifruješ do MD5, tak to může získat 1000 lidí a bude jim to k ničemu. Databázi doporučuju 100%, bez ní se to už dneska nedělá..
|
||
Meris Profil * |
#17 · Zasláno: 12. 9. 2009, 12:25:10
Ahoj,
neukládej samotné do db jen čistou hash hesla, nějak takto: $hash_do_db = md5($heslo); // generovani hashe uloz($hash_do_db); // ulozeni.. Sice nelze zjistit co přesně uživatel zadal, ale ono to není třeba. Spousta webu ukladá hesla jako md5 hash a pokud u jednoho získáš hash, tak jsi schopen najít řetězec který generuje stejnou hash. Pak stačí použít onen řetězec na jiných účtech a je celkem velká šance že se někam dostaneš. Takže používej spíše něco takového: $hash_do_db = md5( $login + $heslo ); // generovani hashe uloz($hash_do_db); // ulozeni.. To sice nezabrání hackerovi se dostat k hashi, ale je mu celkem k ničemu, protože nezíská řetezec, který generuje hash pro původní heslo. Nevím jestli jsem to napsal srozumitelně, když tak se ozvi. |
||
virgo86 Profil |
#18 · Zasláno: 12. 9. 2009, 12:37:00 · Upravil/a: virgo86
„nom drobnost - to heslo si změň, je tam pořád "zapis" :-).“
To ja vím:)¨ Zatim tedy všem děkuji mrknu na to vše |
||
Johnik Profil |
#19 · Zasláno: 12. 9. 2009, 14:36:08
Meris
Podle mě, když už si dokážu zjistit hash hesla z db, tak není problém zjistit si k tomu i login. Pak to dám dohromady jsme tam, kde jsme byli... |
||
meris Profil |
#20 · Zasláno: 13. 9. 2009, 14:28:16
To Johnik:
Je to výrazně složitější, protože hledáš řetězece generující stejnou hash, který začíná stejnými znaky jako login, takových řetězců pak bude s hodně méně, zdali vůbec nějaký. Navíc nemáš zaručeno to, že ten řetězec bude geneovat stejnou hash jako samotné heslo. Ale ok, můžeme být paranoici a udělat něco takového: $hash_do_db = md5( substr($heslo,0,2) + substr($login,0,3) + substr($heslo,3,1) + substr($login,4) + substr($heslo,4)); uloz($hash_do_db); Pak už je dle mého nemožné najít řetězec tak aby generoval stejný hash, ale i zárověn obsahoval stejně umístěné znaky loginu. |
||
meris Profil |
#21 · Zasláno: 13. 9. 2009, 14:28:16 · Upravil/a: meris
omyl při odesílání.
|
||
Časová prodleva: 15 let
|
0