Наверное только абсолютно ленивый человек не знает о таких ресурсах как kolesa.kz и krisha.kz, которые заслуженно считаются наиболее посещаемыми сайтами в своей тематике. Мне очень повезло, ведь мне удалось поработать с ними. И вот небольшой отчет по проверке на стойкость данных ресурсов, опишу некоторые ошибки которые мне разрешили опубликовать.
Хочу сразу заметить, проекты очень большие, наверное самые большие с которыми мне приходилось работать в Казахстане, и опираясь на это могу сказать что разработчики ежедневно проделывают огромную работу по сохранению безопасности своих ресурсов.
И так начнем с XSS которые наверное есть практически во всех ресурсах КазNet'а (да и не только), найти их довольно не сложно.
Пройдя по ссылке "Аналитика", я запустил HTTP Live Header, что бы отслеживать какими данными обменивается браузер с сервером, ничего особенного я не увидел, но решил попробовать внедрить скрипт в поле page (page=1 указывается номер страницы), ничего не получилось, тогда я попробовал выйти за пределы количества страниц, т.е. страниц всего 14, а я указал 30024 (см.рис выше) и опять попробовал внедрить скрипт, и все получилось :)
------------------------------------------
Активная XSS
Активную XSS удалось обнаружить в комментариях т.е. можно было оставить специально сформированный javascript-сценарий, и каждый кто заходит на страницу (где оставлен комментарий) натыкается на выполнение javascript'a. Я хотел сделать редирект на сторонний ресурс, что бы с эмитировать возможность заражения посетителей сайта вредоносным контентом <script>document.location='http://owasp.org';</script>, но наткнулся на использование белых и черных списков, т.е. выходит так что сделать редирект на сторонний ресурс (за пределы сайта) невозможно, почти невозможно.
На помощь к нам пришел base64
<object data="data:text/html;base64,PHNjcmlwdD5kb2N1bWVudC5sb2NhdGlvbj0naHR0cDovL293YXNwLm9yZyc7PC9zY3JpcHQ+"></object>
javascript зашифровали в base64 и таким вот образом удалось обойти фильтрацию URL-адресов. Все что нужно это оставить наш комментарий на интересующей странице и ждать, когда же кто-нибудь зайдет посмотреть объявление.
------------------------------------------
Следующее что удалось обнаружить.
Включение и отключение комментариев чужого пользователя. Ситуация такая, вы разместили объявление но не хотите что бы кто-то комментировал его, и по этой причине отключаете возможность кому-то оставлять комментарии. Так вот отключение комментариев удалось обойти.
С помощью Live HTTP Header, я смог подсмотреть что же происходит при включении и отключении комментариев в личном кабинете, а происходит обращении по адресу:
http://krisha.kz/my/comment-change-status?aid=11230407&status=1
aid=11230407 - номер объявления (можно посмотреть в строке адреса)
status=1 - параметр включения/отключения комментариев (0 - выкл, 1 - вкл)
и вот что в конечном счете мы имеем
Все что было найдено, было отправлено разработчикам, а те в свою очередь быстро, оперативно и качественно все исправили, и это очень приятно, ведь обычно большинству разработчиков (у нас в стране) нет дела до безопасности. А тут я наткнулся на заинтересованность, сразу видно что люди дорожат своим продуктом и имиджем. Более того, мне даже дали добро на публикацию отрывка из моего отчета, хотя обычно я слышу что-то вроде "Если я увижу это в интернете я тебя найду" :)
P.S.
Есть идеи? Пишите: sys32_89@mail.ru
https://vk.com/btuteev