SHARE
TWEET

xml_scanner.php

wtfbbq Sep 28th, 2015 2,469 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. //Installation: yum install php-process
  3. ini_set('memory_limit', '-1');
  4. if (!isset($argv[4])) {
  5.     echo "Usage: php " . $argv[0] . " [Class B IP address] [threads] [output file] [allow snitches (0-1)] \r\n";
  6.     exit;
  7. }
  8. function ip_range($from, $to)
  9. {
  10.     $start = ip2long($from);
  11.     $end   = ip2long($to);
  12.     $range = range($start, $end);
  13.     return array_map('long2ip', $range);
  14. }
  15. function get_string_between($string, $start, $end)
  16. {
  17.     $arr = explode($start, $string);
  18.         if (isset($arr[1]))
  19.         {
  20.     $arr = explode($end, $arr[1]);
  21.     return $arr[0];
  22.         }
  23.         else
  24.         {
  25.         return '3.0.0';
  26.         }
  27. }
  28. function partition($list, $p)
  29. {
  30.     $listlen   = count($list);
  31.     $partlen   = floor($listlen / $p);
  32.     $partrem   = $listlen % $p;
  33.     $partition = array();
  34.     $mark      = 0;
  35.     for ($px = 0; $px < $p; $px++) {
  36.         $incr           = ($px < $partrem) ? $partlen + 1 : $partlen;
  37.         $partition[$px] = array_slice($list, $mark, $incr);
  38.         $mark += $incr;
  39.     }
  40.     return $partition;
  41. }
  42. $part        = array();
  43. $array       = ip_range($argv[1] . '.0.0', $argv[1] . '.255.255');
  44. $total_lines = count($array);
  45. $childcount  = $argv[2];
  46. $part        = partition($array, $childcount);
  47.  
  48. $shm_id = shmop_open(23377332, "c", 0666, 1024);
  49. shmop_close($shm_id);
  50. for ($i = 0; $i < $childcount; $i++) {
  51.     $pid = pcntl_fork();
  52.     if ($pid == -1) {
  53.         echo "failed to fork on loop $i of forking\n";
  54.         exit;
  55.     } else if ($pid) {
  56.         continue;
  57.     } else {
  58.         $sem    = sem_get(13377331, 1, 0666, 1);
  59.         $shm_id = shmop_open(23377332, "c", 0666, 1024);
  60.         while (true) {
  61.             $results = count($part[$i]);
  62.             $r       = 0;
  63.             foreach ($part[$i] as $line) {
  64.                 if ($r > $results) {
  65.                     break;
  66.                 }
  67.                 $r++;
  68.                 $ch         = curl_init();
  69.                 $curlConfig = array(
  70.                     CURLOPT_URL => 'http://' . $line . '/xmlrpc.php',
  71.                     CURLOPT_RETURNTRANSFER => 1,
  72.                     CURLOPT_SSL_VERIFYPEER => false,
  73.                     CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6',
  74.                     CURLOPT_FOLLOWLOCATION => 1,
  75.                     CURLOPT_TIMEOUT => 1
  76.                 );
  77.                 curl_setopt_array($ch, $curlConfig);
  78.                 $result = curl_exec($ch);
  79.                 curl_close($ch);
  80.                 if (strpos($result, "XML-RPC server accepts POST requests only.") !== FALSE) {
  81.                     $xml = @file_get_contents('http://' . $line . '/feed/');
  82.                     $p   = xml_parser_create();
  83.                     xml_parse_into_struct($p, $xml, $vals, $index);
  84.                     xml_parser_free($p);
  85.                     if (isset($vals[23]['value'])) {
  86.                         $url = $vals[23]['value'];
  87.                         if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
  88.                             if ($argv[4] == 1) {
  89.                                 file_put_contents($argv[3], $url . ' http://' . $line . '/xmlrpc.php 2 1 6 16 ' . $line . "\r\n", FILE_APPEND);
  90.                             } else {
  91.                                 $contents = @file_get_contents($url);
  92.                                                                 if (strpos($contents, 'meta name="generator" ') !== FALSE)
  93.                                                                 {
  94.                                 $version  = get_string_between($contents, '<meta name="generator" content="WordPress ', '" />');
  95.                                 $array    = explode(".", $version);
  96.                                 if (isset($array[2]) && strlen($array[2]) == 1)
  97.                                     $version = $version . '0';
  98.                                 if (version_compare($version, '3.7.11') < 0) {
  99.                                     file_put_contents($argv[3], $url . ' http://' . $line . '/xmlrpc.php 2 1 6 16 ' . $line . "\r\n", FILE_APPEND);
  100.                                 }
  101.                                                                 }
  102.                             }
  103.                         }
  104.                     }
  105.                 }
  106.                 sem_acquire($sem);
  107.                 $number = shmop_read($shm_id, 0, 1024);
  108.                 $number = intval($number);
  109.                 $number++;
  110.                 shmop_write($shm_id, str_pad($number, 1024, "\0"), 0);
  111.                 sem_release($sem);
  112.             }
  113.         }
  114.         die;
  115.     }
  116. }
  117.  
  118. $sem    = sem_get(13377331, 1, 0666, 1);
  119. $shm_id = shmop_open(23377332, "c", 0666, 1024);
  120. $total  = 0;
  121. while (true) {
  122.     sem_acquire($sem);
  123.     $number = shmop_read($shm_id, 0, 1024);
  124.     $total += $number;
  125.     echo $number . " R/s " . $total . "/" . $total_lines . " Total                              \r";
  126.     shmop_write($shm_id, str_pad("0", 1024, "\0"), 0);
  127.     sem_release($sem);
  128.     sleep(1);
  129.     if ($total_lines < $total) {
  130.         shell_exec('pkill -f "php ' . $argv[0] . ' ' . $argv[1] . ' ' . $argv[2] . ' ' . $argv[3] . ' ' . $argv[4].'"');
  131.         echo "Done\n";
  132.     }
  133. }
  134.  
  135. for ($j = 0; $j < $childcount; $j++) {
  136.     $pid = pcntl_wait($status);
  137. }
  138.  
  139. ?>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top