PHP scripts quả là có rất nhiều ứng dụng để khai thác, một trong những cách khai thác đó là dùng nó để viết các shell scripts hay các scripts để gửi mail ra ngoài với mục đích SPAM. Tuy nhiên, để những scripts này trở nên khó phát hiện hơn, mã hóa hay obfucaste là phương pháp được ưa thích.
Đoạn code sau sẽ giúp admin bước đầu tìm kiếm những scripts khả nghi, từ đó kết hợp với nhiều công cụ khác sẽ xác định được chính xác những file “bẩn” cần tìm. Save file dưới dạng find-spam.php và sau đó upload lên website và thực thi thông qua đường dẫn đến nó.
<html><head><title>Find String</title></head><body> <?php // ini_set('max_execution_time', '0'); // ini_set('set_time_limit', '0'); find_files('.'); function find_files($seed) { if(! is_dir($seed)) return false; $files = array(); $dirs = array($seed); while(NULL !== ($dir = array_pop($dirs))) { if($dh = opendir($dir)) { while( false !== ($file = readdir($dh))) { if($file == '.' || $file == '..') continue; $path = $dir . '/' . $file; if(is_dir($path)) { $dirs[] = $path; } else { if(preg_match('/^.*.(php[d]?|txt|js|htaccess)$/i', $path)) { check_files($path); }} } closedir($dh); } } } function check_files($this_file){ $str_to_find[]='base64_decode'; $str_to_find[]='edoced_46esab'; // base64_decode reversed $str_to_find[]='preg_replace'; $str_to_find[]='HTTP_REFERER'; $str_to_find[]='HTTP_USER_AGENT'; if(!($content = file_get_contents($this_file))) { echo("<p>Could not check $this_file You should check the contents manually!</p>n"); } else { while(list(,$value)=each($str_to_find)) { if (stripos($content, $value) !== false) { echo("<p>$this_file -> contains $value</p>n"); } } } unset($content); } ?> </body></html>
Scripts trên sẽ kiểm tra các file .php, .txt, .js, and .htaccess, thông số cần quan tâm ở đây là thời gian thực thi có thể kéo dài nếu số lượng file quá nhiều. Dó đó ta cần điều chỉnh tằng 2 thông số sau lên khoảng 300s:
set_time_limit && max_execution_time