Není tomu tak dávno, co jsem byl napaden hackery. Provozuji naše rodinné stránky na vlastní doméně a měl jsem dojem, že nikomu nevadím. Dojem byl však špatný.
Stránky jsou psané v PHP a využívají MySQL databázy pro úložiště příspěvků. Jak se ukázalo, má znalost zabezpečení PHP není slavná. Pomocí slabého místa (stránka vkládala další script, jehož adresa se předávala pomocí nezabezpečeného formuláře) se někdo napojil a spustil vlastní PHP script. Ten natáhl na můj web 2 phisingové stránky (Bank of America a PayPal) a různě je poschovával do všech možných adresářů.
Problém jsem zjistil hned ten den, protože mám stránky kódované v UTF-8 a díky tomu, že jejich script si pozměnil i index.php, bylo na první polhed jasné, že se něco děje (rozsypaný čaj místo diakritiky).
Jejich stránky jsem smazal a na bezpečnostní díru pověsil pastičku. Stačilo jen 24 hodin počkat a útok se opakoval, ale tentokrát jsem se smál já. Získal jsem IP adresu, skript který se měl spustit a údaje o počítači pachatele. Vše jsem předal jak na PayPal, tak na Bank of America.
Největším překvapením bylo, když jsem po týdnu kontroloval přístupy na můj web a zjistil jsem, že počet unikátních přístupů na mnou smazané stránky přesáhl 300 za den. Inu BFU se najdou všude :-)
Nejjednodušší pastičku bych viděl asi takto:
if($_POST['obsah_formulare'] == 'ocekavany_vyraz') {
ob_start();
print '<pre>'.print_r($_SERVER,1).'</pre>'.EOL;
print '<pre>'.print_r($_POST,1).'</pre>'.EOL;
$sBody = ob_get_clean();
$fw = fopen('log.txt','a');
fwrite($fw,$sBody);
fclose($fw);
}
Vkladani jinych scriptu pomoci formularu je jedna z nejkrasneji napadnutelnych chyb. Nejradeji mam PHP script typu:
include $_REQUEST['url']; :D
Gwyn.
By me zajimalo jak a proc by vas napadli vyvojari kernelu;o)
http://www.root.cz/clanky/hacker-kdo-to-je/
[4][6] Význam slov se v průběhu času mění. Tak jako mnoho jiných, i slovo HACKER získalo mimo svého původního významu (kterým ale NEBYL vývojář kernelu, i když každý kernelový vývojář pravděpodobně byl či je hackerem v původním smyslu toho slova). Věřím, že ai vy dva nepoužíváte všechna slova pouze v jejich původním významu. Jistě znáte slovo "letoun" - a asi byste se divili, kdybych tvrdil, že používáte divnou terminologii, protože toto slovo původně znamenalo živočicha schopného létat...
taky by me zajimalo co to bylo za chybu, nebot dostat vlastni soubory na vzdaleny server neni zas tak jednoduche (zvlast, pokud clovek ma stranky "vlastni" vyroby a neda se dostat k jejich zdrojovemu kodu), co vim, tak takto napadene servery byly diky zcizeni uctu na ftp pristup
[7] Ano ale problem je, ze temer vsichni programatori (kteri jsou toho slova hodni) stale pouzivaji (a podle vseho i nadale budou pouzivat) slovo hacker v puvodnim smyslu slova. Pokud tedy postujete na Rootu, bylo by vhodne dodrzovat ten vyznam, ktery zdejsi ctenari ocekavaji.
no pokud se includuje skript ze vzdaleneho serveru, tak tento skript je i interpretovan na tom vzdalenem serveru a tudiz nemuze nic udelat na tom "napadenem" - pouze u uzivatele se stranka jevi s trochu jinym obsahem a muze neco napachat, treba za pomoci javaskriptu, ktery se tam takto da vpasovat a na puvodni strance nebyl
[13] za predpokladu, ze includovany soubor nema priponu php a nebo ze na vzdalenem serveru vubec php interpret nebezi si napadeny server stahne nezpracovany skript a ten pak spusti - viz security warning na http://cz.php.net/include/
[9][12] Souhlasím s tím, že skutečnost, že páni novináři si vymyslí slovo nebo existujícímu z neznalosti dají jiný význam, by nemělo znamenat, že budeme tu chybu papouškovat dále.
Nicméně jistě není ideální ani varianta, že člověka, který z neznalosti použil nesprávnou verzi, jízlivě setřeme či s pocitem vlastní převahy zesměšníme (zejména pokud tím dáme najevo, že sami ve významu toho slova nemáme jasno). "Buď konzervativní v tom, co odesíláš, a liberální v tom, co přijímáš," říká se v jednom dnes již polozapomenutém dokumentu zvaném Netiketa.
[16] To nepochybně nikoli; nicméně si uvědomme, že velmi dlouho platilo, že cracker musel být zároveň i hackerem (i sociální inženýrství je jistý druh hacku). Pes kočkou nebyl nikdy. A nepochybuji o tom, že pro každé slovo používáte jeho precizní význam, a to i v oblastech, kde si jste sám ne stoprocentně jistý.
Výslovně ale přiznávám, že pohybujeme-li se v prostředí, kde je zvykem rozdíl mezi pojmy dodržovat, je jeho nerespektování možno považovat za "fouks pas", jak říkáme my fonetici :-)
Ahoj, zajimavej clanek - sem to sel hned zkontrolvat na nasich servrech :)
Jek sem tak jeste googloval, nasel jsem tento clanek: http://blog.php-security.org/archives/45-PHP-5.2.0-and-allow_url_include.html
Koukam, ze s tema includama v PHP to nebude zas tak slavne.
Pracuji v oblasti vzdělávání dospělých pro jednu nadnárodní společnost. IT jsem vystudoval a mám jako koníčka. V Linuxové komunitě se pohybuji od roku 2006. Začal jsem na Madrivě a od roku 2010 jsem na Ubuntu ;-)