Решил ради интереса посветить день обзору сайтов банков.
Первый из таких стал официальный сайт Россельхос Банка (реклама дала о себе знать :) ), следующий Русский стандарт банк, далее Альфа-Банк.
Целью было не взломать или добиться вывода какой-либо секретной информации, а просто проверить на сколько хорошо сделаны официальные сайты банков.
Россельхос Банк
Сайт работает на CMS Bitrix
Ошибки.
Первое, что бросилось мне в глаза — модуль вывода новостей, ибо там есть параметры выбора года, месяца, дня и ещё кол-во новостей на одной странице.
Выбор даты.
В адресной строке, указав год 200 и месяц 20 я увидел, что не было сообщений об ошибке и более того — эти данные появились в селекте на странице, а значит входящие данные выводятся на странице.
Далее решил проверить возможность SQL инъекции — неудачно.
Следующим шагом была проверка на XSS — вот тут уже стало интересно.
Спец. символы не экранируются и html символы не преобразуются в html сущности, а значит можно внедрить любой код.
К сожалению (или к счастью банка) все попытки внедрить такие XSS как вызов алерта или iframe не удались, так как в первый тег вставлялся пробел.
Входящие данные:
20"></option></select><script>
На выходе:
20"></option></select><sc ript>
Максимум, что можно сделать, это вставить картинку или ссылку (без вызова js кода).
Ограничение кол-ва новостей.
Следующим шагом была проверка ограничения, на странице можно выбрать от 5 до 20 новостей.
Но как вы уже, наверно, понял — ограничение можно обойти.
Вы можете спокойно указать 100000 новостей, после чего на сайте появятся все новости.
Ссылки на новости.
На странице новостей также увидел, что у ссылок на новости странное окончание.
Все попытки манипуляции с этой переменной провалились, хотя подозреваю, что если бы был включен Register_Globals, то можно было бы выполнить XSS.
Дальше решил перейти на страницу пресс-центра, там увидел подобную ошибку, но уже без переменной $page
Решил и на этой странице произвести манипуляции — удачно. При передачи переменной page через GET всё содержание переменной вывелось в ссылке, но двойная кавычка была преобразована.
Ответ.
Ответ последовал через несколько часов, поблагодарили и поинтересовались откуда такая забота об их банке :)
Сами ошибки были исправлены, примерно, через 3-4 дня, кроме вывода всех новостей, видимо, не посчитали это ошибкой.
Русский стандарт банк
CMS сайта не узнавал.
XSS
Суть XSS уязвимость оказалась в том, что параметр из GET запроса передаётся в код страницы в нескольких местах, но самое главное — в js код.
В этом js коде определяется переменная requestUri (отвечает за адрес текущей страницы), но при передачи параметров нет экранирования одинарной кавычки, что позволяет нам выполнить произвольный js код.
Дальше не стал проверять сайт, ибо этого уже достаточно.
Ответ.
Русский стандарт решил не отвечать на моё сообщение, но дыру закрыли.
Альфа-Банк
Мельком посмотрел многострадальный Альфа-Банк, а именно поддомен идея.альфабанк — тоже нашёл XSS, единственное, что помешало успешно выполнить код это слеш, он воспринимается как разделитель, т.к. параметры передавался через GET (idea.alfabank.ru/accepted/page88
Автор: shapeshifter08