"; print_r($_GET); print_r($_POST); print_r($_COOKIE); print_r($_SERVER); print_r(apache_request_headers()); print ""; die(); } function debug($msg) { $fp = fopen("/tmp/debug.log", "a"); fwrite($fp, "===\n"); fwrite($fp, $msg); fwrite($fp, "\n"); fclose($fp); } function getUrl($url) { if(isset($_SERVER["PATH_INFO"])) { $url .= $_SERVER["PATH_INFO"]; } $url = parse_url($url); if(!isset($url["port"])) { $url["port"] = 80; if($url["scheme"] == "https") { $url["port"] = 443; } } if(strlen($_SERVER["QUERY_STRING"]) > 0) { $url["path"] = $url["path"] . "?" . $_SERVER["QUERY_STRING"]; } return $url; } function generateRequest($rmeth, $host, $path) { $crlf = "\r\n"; $req = $rmeth . " " . $path . " HTTP/1.0" . $crlf; $headers = apache_request_headers(); if(isset($headers["Host"])) { $req .= "Host: " . $headers["Host"] . $crlf; } if(isset($headers["Cookie"])) { $req .= "Cookie: " . $headers["Cookie"] . $crlf; } if(isset($headers["Cookie2"])) { $req .= "Cookie2: " . $headers["Cookie2"] . $crlf; } if(isset($headers["Referer"])) { $req .= "Referer: " . $headers["Referer"] . $crlf; } if(isset($headers["Content-Length"])) { $req .= "Content-Length: " . $headers["Content-Length"] . $crlf; } if(isset($headers["Content-Type"])) { $val = $headers["Content-Type"]; $val = str_replace("PHPHACK", "", $val); $req .= "Content-Type: " . $headers["Content-Type"] . $crlf; } $req .= $crlf; return $req; } function doProxy($scheme, $rmeth, $host, $port, $path) { $req = generateRequest($rmeth, $host, $path); // Make the HTTP request $fp = fsockopen(($scheme == 'https' ? 'ssl://' : '') . $host, $port); if(!$fp) { die("Could not connect to internal server!"); } fwrite($fp, $req); if($rmeth == "POST") { $fpi = fopen("php://input", "rb"); while(!feof($fpi)) { fwrite($fp, fread($fpi, 1024)); } fclose($fpi); } $headers = array(); $mode = 0; while(is_resource($fp) && $fp && !feof($fp)) { // Parsing headers if($mode == 0) { // Grab a line $line = fgets($fp); if(strlen(trim($line)) != 0) { array_push($headers, $line); } else { $mode = 1; foreach($headers as $header) { header($header); } } } // Body data! else { myPassThru($fp); } } fclose($fp); } function myPassThru($fp) { $data = ""; while(!feof($fp)) { $data .= fread($fp, 1024); } $data = str_replace("enctype=\"multipart/form-data\"", "enctype=\"PHPHACKmultipart/form-data\"", $data); print $data; } function main($basePath) { ///debugAndDie(); $u = getUrl($basePath); $rmeth = $_SERVER["REQUEST_METHOD"]; doProxy($u["scheme"], $rmeth, $u["host"], $u["port"], $u["path"]); } // Run! if(!isset($PROXY)) { die("No forwarding available!"); } main($PROXY); ?>