Обложка канала

Кавычка

9725 @webpwn

Ломать - не строить

Кавычка

4 года назад
Открыть в
#api #params #tool Помимо брутфорса директорий, на проекте также важно находить и проверять скрытые параметры. Разработчики могли оставить функции для их обработки на сервере, но на клиентской части код удалить. Также может возникать уязвимость Mass Assignment, где разработчик создал структуру, а злоумышленник может её заполнить, угадав названия полей с помощью перебора.
public class User {
   private String userid;
   private String password;
   private String email;
   private boolean isAdmin;
}

Чтобы правильно и эффективно находить такие вещи, нам нужен подход или утилита. Самые известные вот эти две: Param Miner и Arjun Первая это плагин для BurpSuite. Вторая — консольная утилита на Python. Относительно недавно, появилась новая консольная утилита x8 Она написана на языке Rust, разработчиком является багхантер @sh1y0 Около 40% уязвимостей на h1 он нашёл с её использованием К слову, багхантеры за рубежом не стесняются встраивать её в свои конвейеры для поиска уязвимостей. На мой взгляд, данная тула наиболее эффективна, и сейчас мы разберёмся почему. 1. Arjun, в отличие от x8, имеет фиксированное значение параметров при брутфорсе (по умолчанию 500). Это значит, что в запросе из вордлиста будут отсылаться сразу 500 параметров: /?param1=test&param2=test&...&param500=test Проблема здесь заключается в том, что многие серверы будут отдавать 414 URI Too Long, либо банально игнорировать последние 200 параметров. Таким образом, даже если в вашем текстовом файле есть нужный параметр — он не будет найден. 2. Ещё одним важным отличием являются функции сравнения ответов на странице. Arjun сохраняет тело первого ответа и сравнивает с ответом нового запроса. Если есть разница — выводит сообщение о том что параметр влияет на ответ. Естественно, проблема здесь очевидна, содержимое в ответе может быть всегда динамическим. Например, в теле ответа иногда встроен datetime. x8 лишён данной проблемы, из-за наличия специальных тестовых запросов, которые нужны для выявления динамических строк — исключая их таким образом из поиска.
HTTP/1.1 200 OK
Content-Length: 18

<html>
- Time 13:36:23

<id="test">

Как видно из примера, строка которая содержит время, исключена и помечена как динамическая.
HTTP/1.1 200 OK
Content-Length: 37

<html>
- Time 13:37:48

+ <id="admin_param">

Здесь x8 понимает, что параметр найден из-за изменений в теге id. 3. Arjun поддерживает методы только GET и POST, а Param Miner не умеет искать рекурсивным поиском. Кроме того, в x8 есть гибкая настройка отправки параметров — концепция шаблонов и injection pointов, которая отсутствует в других инструментах. Вообще, автор создал табличку, где сравнивает все три решения sh1yo.art/x8stats/ Так можно оценить эффективность работы на реальных сайтах. Пример использования: x8 -u "https://example.com/" -w <wordlist>