#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¶m2=test&...¶m500=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>
Помимо брутфорса директорий, на проекте также важно находить и проверять скрытые параметры. Разработчики могли оставить функции для их обработки на сервере, но на клиентской части код удалить.
Также может возникать уязвимость 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¶m2=test&...¶m500=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>