Автоматический поиск уязвимостей в скриптах

  1. <?php
  2.  
  3. /* findrisk.php */
  4.  
  5. set_time_limit(0);
  6. ini_set("set_time_limit",0);
  7. ini_set("memory_limit", "128M");
  8.  
  9. function _readdir($d,&$files)
  10. {
  11. global $opendir;
  12. $dir = opendir ($d);
  13. while ( $file = readdir ($dir))
  14. {
  15. if (( $file != ".") && ($file != ".."))
  16. {
  17. $opendir=$d."/".$file;
  18. if(filetype($opendir)=="dir")
  19. {
  20. _readdir($opendir,&$files);
  21. }
  22. else
  23. {
  24. $files[] = $opendir;
  25. }
  26. }
  27. }
  28. closedir ($dir);
  29. }
  30. _readdir(".",&$files);
  31.  
  32. $exp = array(
  33. 'file_put_contentss*(',
  34. 'fwrites*(',
  35. 'fputs*(',
  36. 'evals*(',
  37. 'systems*(',
  38. '<frame[^>] ',
  39. '<iframe[^>] '
  40. );
  41.  
  42. $regexp = '/.{15}b('.implode($exp,"|").')b.{15}/Uis';
  43. foreach ($files as $index)
  44. {
  45. $content = file_get_contents($index);
  46. if(preg_match_all($regexp,$content,$match))
  47. {
  48. //print_r($match);
  49. echo "<b>".$index."</b>";
  50. for($j=0;$j<count($match[0]);$j )
  51. {
  52. $match[0][$j] = htmlspecialchars($match[0][$j]);
  53. $match[1][$j] = htmlspecialchars($match[1][$j]);
  54. $text = str_replace($match[1][$j], "<font color=\"#FF0000\"><b>".$match[1][$j]."</b></font>", htmlspecialchars($match[0][$j]));
  55. echo "<br>".$text;
  56. }
  57. echo "<br><br>";
  58.  
  59. }
  60. }
  61.  
  62. ?>
Задача: найти шелл или другой уязвимый скрипт на сервере.
В ручную это займёт большое количество времени, поэтому прибегнем к помощи php. Для начала нужно рекурсивно собрать ссылки на все существующие файлы, а далее мы проверим каждый скрипт на наличее вредоносного кода и при необходимости уберём его с нашего сервера.

Реклама

Мы в соцсетях

tw tg yt gt