#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>