mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/graphql.md']
This commit is contained in:
parent
91fbef409c
commit
b75cee40c3
@ -2,17 +2,17 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Вступ
|
||||
## Introduction
|
||||
|
||||
GraphQL **підкреслюється** як **ефективна альтернатива** REST API, пропонуючи спрощений підхід до запитів даних з бекенду. На відміну від REST, який часто вимагає численних запитів через різні кінцеві точки для збору даних, GraphQL дозволяє отримувати всю необхідну інформацію через **один запит**. Це спрощення значно **вигідне для розробників**, зменшуючи складність їх процесів отримання даних.
|
||||
GraphQL є **ефективною альтернативою** REST API, пропонуючи спрощений підхід для запитів даних з бекенду. На відміну від REST, який часто вимагає численних запитів через різні кінцеві точки для збору даних, GraphQL дозволяє отримувати всю необхідну інформацію через **один запит**. Це спрощення значно **допомагає розробникам**, зменшуючи складність їх процесів отримання даних.
|
||||
|
||||
## GraphQL та безпека
|
||||
## GraphQL і безпека
|
||||
|
||||
З появою нових технологій, включаючи GraphQL, також виникають нові вразливості безпеки. Ключовим моментом є те, що **GraphQL за замовчуванням не включає механізми аутентифікації**. Відповідальність за впровадження таких заходів безпеки лежить на розробниках. Без належної аутентифікації кінцеві точки GraphQL можуть розкривати чутливу інформацію неаутентифікованим користувачам, що становить значний ризик для безпеки.
|
||||
|
||||
### Атаки грубої сили на каталоги та GraphQL
|
||||
### Атаки грубої сили на директорії та GraphQL
|
||||
|
||||
Для виявлення відкритих екземплярів GraphQL рекомендується включення специфічних шляхів у атаки грубої сили на каталоги. Ці шляхи:
|
||||
Для виявлення відкритих екземплярів GraphQL рекомендується включення специфічних шляхів у атаки грубої сили на директорії. Ці шляхи:
|
||||
|
||||
- `/graphql`
|
||||
- `/graphiql`
|
||||
@ -162,13 +162,13 @@ name
|
||||
```
|
||||
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
|
||||
```
|
||||
Останній рядок коду - це запит graphql, який виведе всю метаінформацію з graphql (імена об'єктів, параметри, типи...)
|
||||
Останній рядок коду є запитом graphql, який виведе всю метаінформацію з graphql (імена об'єктів, параметри, типи...)
|
||||
|
||||
.png>)
|
||||
|
||||
Якщо інтроспекція увімкнена, ви можете використовувати [**GraphQL Voyager**](https://github.com/APIs-guru/graphql-voyager) для перегляду всіх опцій у графічному інтерфейсі.
|
||||
|
||||
### Запитування
|
||||
### Запит
|
||||
|
||||
Тепер, коли ми знаємо, який тип інформації зберігається в базі даних, давайте спробуємо **витягти деякі значення**.
|
||||
|
||||
@ -176,11 +176,11 @@ name
|
||||
|
||||

|
||||
|
||||
Зверніть увагу, що тип запиту "_flags_" - це "_Flags_", і цей об'єкт визначається нижче:
|
||||
Зверніть увагу, що тип запиту "_flags_" - це "_Flags_", і цей об'єкт визначається як нижче:
|
||||
|
||||
.png>)
|
||||
|
||||
Ви можете побачити, що об'єкти "_Flags_" складаються з **name** та **value**. Тоді ви можете отримати всі імена та значення прапорів за допомогою запиту:
|
||||
Ви можете побачити, що об'єкти "_Flags_" складаються з **name** та **value**. Тоді ви можете отримати всі імена та значення прапорців за допомогою запиту:
|
||||
```javascript
|
||||
query={flags{name, value}}
|
||||
```
|
||||
@ -202,7 +202,7 @@ query = { hiddenFlags }
|
||||
.png>)
|
||||
|
||||
Схоже, що якимось чином він буде шукати, використовуючи аргумент "_**uid**_" типу _**Int**_.\
|
||||
У будь-якому випадку, ми вже знали, що в розділі [Basic Enumeration](graphql.md#basic-enumeration) було запропоновано запит, який показував нам всю необхідну інформацію: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
|
||||
В будь-якому випадку, ми вже знали, що в розділі [Basic Enumeration](graphql.md#basic-enumeration) було запропоновано запит, який показував нам всю необхідну інформацію: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
|
||||
|
||||
Якщо ви прочитаєте зображення, надане, коли я запускав цей запит, ви побачите, що "_**user**_" мав **аргумент** "_**uid**_" типу _Int_.
|
||||
|
||||
@ -211,15 +211,15 @@ query = { hiddenFlags }
|
||||
|
||||
.png>)
|
||||
|
||||
Зверніть увагу, що я **виявив**, що можу запитати **параметри** "_**user**_" та "_**password**_", тому що якщо я спробую шукати щось, що не існує (`query={user(uid:1){noExists}}`), я отримую цю помилку:
|
||||
Зверніть увагу, що я **виявив**, що можу запитати **параметри** "_**user**_" та "_**password**_", тому що якщо я спробую шукати щось, чого не існує (`query={user(uid:1){noExists}}`), я отримую цю помилку:
|
||||
|
||||
.png>)
|
||||
|
||||
І під час **фази перерахунку** я виявив, що об'єкт "_**dbuser**_" має поля "_**user**_" та "_**password**_.
|
||||
І під час **фази перерахунку** я виявив, що об'єкт "_**dbuser**_" мав поля "_**user**_" та "_**password**_.
|
||||
|
||||
**Трюк з вивантаженням рядка запиту (дякую @BinaryShadow\_)**
|
||||
|
||||
Якщо ви можете шукати за рядковим типом, наприклад: `query={theusers(description: ""){username,password}}` і ви **шукаєте порожній рядок**, це **вивантажить всі дані**. (_Зверніть увагу, що цей приклад не пов'язаний з прикладом з навчальних посібників, для цього прикладу припустимо, що ви можете шукати, використовуючи "**theusers**" за рядковим полем під назвою "**description**"_).
|
||||
Якщо ви можете шукати за рядковим типом, наприклад: `query={theusers(description: ""){username,password}}` і ви **шукаєте порожній рядок**, це **вивантажить всі дані**. (_Зверніть увагу, що цей приклад не пов'язаний з прикладом з навчальних посібників, для цього прикладу припустимо, що ви можете шукати, використовуючи "**theusers**" за полем рядка під назвою "**description**"_).
|
||||
|
||||
### Пошук
|
||||
|
||||
@ -258,7 +258,7 @@ name
|
||||
}
|
||||
}r
|
||||
```
|
||||
Або навіть **відносини кількох різних об'єктів за допомогою псевдонімів**:
|
||||
Або навіть **відносини кількох різних об'єктів, використовуючи псевдоніми**:
|
||||
```javascript
|
||||
{
|
||||
johnsMovieList: searchPerson(name: "John Doe") {
|
||||
@ -289,7 +289,7 @@ name
|
||||
|
||||
.png>)
|
||||
|
||||
У цій конфігурації **база даних** містить **осіб** та **фільми**. **Особи** ідентифікуються за їх **електронною поштою** та **іменем**; **фільми** за їх **іменем** та **рейтинговою оцінкою**. **Особи** можуть бути друзями один з одним і також мати фільми, що вказує на відносини в базі даних.
|
||||
У цій конфігурації **база даних** містить **осіб** та **фільми**. **Особи** ідентифікуються за їх **електронною поштою** та **іменем**; **фільми** - за їх **іменем** та **рейтинговою оцінкою**. **Особи** можуть бути друзями один з одним і також мати фільми, що вказує на відносини в базі даних.
|
||||
|
||||
Мутація для **створення нових** фільмів у базі даних може виглядати як наступна (у цьому прикладі мутація називається `addMovie`):
|
||||
```javascript
|
||||
@ -341,7 +341,7 @@ releaseYear
|
||||
Цю інформацію було взято з [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
|
||||
Аутентифікація через GraphQL API з **одночасною відправкою багатьох запитів з різними обліковими даними** для перевірки. Це класична брутфорс-атака, але тепер можливо відправити більше ніж одну пару логін/пароль за один HTTP запит завдяки функції пакетної обробки GraphQL. Цей підхід обманює зовнішні програми моніторингу швидкості, змушуючи їх думати, що все в порядку і немає бота, який намагається вгадати паролі.
|
||||
|
||||
Нижче ви можете знайти найпростіше демонстраційне запит на аутентифікацію програми, з **3 різними парами електронна пошта/пароль одночасно**. Очевидно, що можливо відправити тисячі в одному запиті таким же чином:
|
||||
Нижче ви можете знайти найпростіше демонстраційне запит на аутентифікацію програми з **3 різними парами електронна пошта/пароль одночасно**. Очевидно, що можливо відправити тисячі в одному запиті таким же чином:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -359,7 +359,7 @@ releaseYear
|
||||
|
||||
### Обхід захисту інспекції GraphQL <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
|
||||
Щоб обійти обмеження на запити інспекції в API, вставка **спеціального символу після ключового слова `__schema`** виявляється ефективною. Цей метод експлуатує загальні недоліки розробників у шаблонах regex, які намагаються заблокувати інспекцію, зосереджуючись на ключовому слові `__schema`. Додаючи символи, такі як **пробіли, нові рядки та коми**, які GraphQL ігнорує, але які можуть не бути враховані в regex, можна обійти обмеження. Наприклад, запит на інспекцію з новим рядком після `__schema` може обійти такі захисти:
|
||||
Щоб обійти обмеження на запити інспекції в API, вставка **спеціального символу після ключового слова `__schema`** виявляється ефективною. Цей метод експлуатує загальні помилки розробників у шаблонах regex, які намагаються заблокувати інспекцію, зосереджуючись на ключовому слові `__schema`. Додаючи символи, такі як **пробіли, нові рядки та коми**, які GraphQL ігнорує, але які можуть не бути враховані в regex, можна обійти обмеження. Наприклад, запит на інспекцію з новим рядком після `__schema` може обійти такі захисти:
|
||||
```bash
|
||||
# Example with newline to bypass
|
||||
{
|
||||
@ -427,13 +427,13 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
|
||||
Зверніть увагу, що зазвичай можливо надіслати **запит** **запиту** також як **GET** **запит**, і токен CSRF може не перевірятися в GET-запиті.
|
||||
|
||||
Також, зловживаючи [**XS-Search**](../../pentesting-web/xs-search/index.html) **атака**, може бути можливим ексфільтрувати вміст з кінцевої точки GraphQL, зловживаючи обліковими даними користувача.
|
||||
Також, зловживаючи [**XS-Search**](../../pentesting-web/xs-search/index.html) **атака**, можливо ексфільтрувати вміст з кінцевої точки GraphQL, зловживаючи обліковими даними користувача.
|
||||
|
||||
Для отримання додаткової інформації **перевірте** [**оригінальний пост тут**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
|
||||
|
||||
## Викрадення WebSocket між сайтами в GraphQL
|
||||
|
||||
Подібно до вразливостей CRSF, зловживаючи GraphQL, також можливо виконати **викрадення WebSocket між сайтами, щоб зловживати аутентифікацією з GraphQL з незахищеними куками** і змусити користувача виконувати несподівані дії в GraphQL.
|
||||
Подібно до вразливостей CRSF, зловживаючи GraphQL, також можливо виконати **викрадення WebSocket між сайтами, щоб зловживати аутентифікацією з GraphQL з незахищеними куками** і змусити користувача виконувати неочікувані дії в GraphQL.
|
||||
|
||||
Для отримання додаткової інформації перевірте:
|
||||
|
||||
@ -459,19 +459,19 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
|
||||
[Зв'язування запитів](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) разом може обійти слабку систему аутентифікації.
|
||||
|
||||
У наведеному нижче прикладі ви можете побачити, що операція - "forgotPassword" і що вона повинна виконувати лише запит forgotPassword, пов'язаний з нею. Це можна обійти, додавши запит в кінець, в даному випадку ми додаємо "register" і змінну користувача, щоб система зареєструвала його як нового користувача.
|
||||
У наведеному нижче прикладі ви можете побачити, що операція - "forgotPassword" і що вона повинна виконувати лише запит forgotPassword, пов'язаний з нею. Це можна обійти, додавши запит в кінець, у цьому випадку ми додаємо "register" і змінну користувача, щоб система зареєструвала його як нового користувача.
|
||||
|
||||
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Обхід обмежень швидкості за допомогою псевдонімів у GraphQL
|
||||
|
||||
У GraphQL псевдоніми є потужною функцією, яка дозволяє **явно називати властивості** під час виконання запиту до API. Ця можливість особливо корисна для отримання **кількох екземплярів одного типу** об'єкта в одному запиті. Псевдоніми можна використовувати для подолання обмеження, яке заважає об'єктам GraphQL мати кілька властивостей з однаковим ім'ям.
|
||||
У GraphQL псевдоніми - це потужна функція, яка дозволяє **явно називати властивості** під час виконання запиту API. Ця можливість особливо корисна для отримання **кількох екземплярів одного типу** об'єкта в одному запиті. Псевдоніми можна використовувати для подолання обмеження, яке заважає об'єктам GraphQL мати кілька властивостей з однаковим ім'ям.
|
||||
|
||||
Для детального розуміння псевдонімів GraphQL рекомендується наступний ресурс: [Псевдоніми](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
Для детального розуміння псевдонімів GraphQL рекомендується наступний ресурс: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
|
||||
|
||||
Хоча основна мета псевдонімів полягає в зменшенні необхідності в численних викликах API, було виявлено ненавмисне використання, при якому псевдоніми можна використовувати для виконання атак грубої сили на кінцеву точку GraphQL. Це можливо, оскільки деякі кінцеві точки захищені обмежувачами швидкості, призначеними для запобігання атакам грубої сили шляхом обмеження **кількості HTTP-запитів**. Однак ці обмежувачі швидкості можуть не враховувати кількість операцій у кожному запиті. Оскільки псевдоніми дозволяють включати кілька запитів в один HTTP-запит, вони можуть обійти такі заходи обмеження швидкості.
|
||||
Хоча основна мета псевдонімів полягає в зменшенні необхідності в численних викликах API, було виявлено ненавмисний випадок використання, коли псевдоніми можуть бути використані для виконання атак грубої сили на кінцеву точку GraphQL. Це можливо, оскільки деякі кінцеві точки захищені обмежувачами швидкості, призначеними для запобігання атакам грубої сили шляхом обмеження **кількості HTTP-запитів**. Однак ці обмежувачі швидкості можуть не враховувати кількість операцій у кожному запиті. Оскільки псевдоніми дозволяють включати кілька запитів в один HTTP-запит, вони можуть обійти такі заходи обмеження швидкості.
|
||||
|
||||
Розгляньте наведену нижче ілюстрацію, яка демонструє, як псевдонімовані запити можна використовувати для перевірки дійсності кодів знижок магазину. Цей метод може обійти обмеження швидкості, оскільки він компілює кілька запитів в один HTTP-запит, потенційно дозволяючи перевірити численні коди знижок одночасно.
|
||||
Розгляньте наведену нижче ілюстрацію, яка демонструє, як псевдонімовані запити можуть бути використані для перевірки дійсності кодів знижок магазину. Цей метод може обійти обмеження швидкості, оскільки він компілює кілька запитів в один HTTP-запит, потенційно дозволяючи перевірити численні коди знижок одночасно.
|
||||
```bash
|
||||
# Example of a request utilizing aliased queries to check for valid discount codes
|
||||
query isValidDiscount($code: Int) {
|
||||
@ -490,7 +490,7 @@ valid
|
||||
|
||||
### Перевантаження псевдонімів
|
||||
|
||||
**Перевантаження псевдонімів** - це вразливість GraphQL, де зловмисники перевантажують запит багатьма псевдонімами для одного й того ж поля, змушуючи бекенд-резолвер виконувати це поле повторно. Це може перевантажити ресурси сервера, що призводить до **Відмови в обслуговуванні (DoS)**. Наприклад, у наведеному нижче запиті те саме поле (`expensiveField`) запитується 1,000 разів, використовуючи псевдоніми, змушуючи бекенд обчислювати його 1,000 разів, що потенційно виснажує ЦП або пам'ять:
|
||||
**Перевантаження псевдонімів** - це вразливість GraphQL, коли зловмисники перевантажують запит багатьма псевдонімами для одного й того ж поля, змушуючи бекенд-резолвер виконувати це поле повторно. Це може перевантажити ресурси сервера, що призводить до **Відмови в обслуговуванні (DoS)**. Наприклад, у наведеному нижче запиті те саме поле (`expensiveField`) запитується 1,000 разів, використовуючи псевдоніми, змушуючи бекенд обчислювати його 1,000 разів, що потенційно виснажує ЦП або пам'ять:
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "Content-Type: application/json" \
|
||||
@ -501,7 +501,7 @@ curl -X POST -H "Content-Type: application/json" \
|
||||
|
||||
### **Пакетування запитів на основі масивів**
|
||||
|
||||
**Пакетування запитів на основі масивів** є вразливістю, коли GraphQL API дозволяє пакетувати кілька запитів в одному запиті, що дозволяє зловмиснику надсилати велику кількість запитів одночасно. Це може перевантажити бекенд, виконуючи всі пакетовані запити паралельно, споживаючи надмірні ресурси (ЦП, пам'ять, з'єднання з базою даних) і потенційно призводячи до **Відмови в обслуговуванні (DoS)**. Якщо немає обмеження на кількість запитів у пакеті, зловмисник може скористатися цим, щоб знизити доступність сервісу.
|
||||
**Пакетування запитів на основі масивів** є вразливістю, коли GraphQL API дозволяє пакетувати кілька запитів в одному запиті, що дозволяє зловмиснику надсилати велику кількість запитів одночасно. Це може перевантажити бекенд, виконуючи всі пакетовані запити паралельно, споживаючи надмірні ресурси (ЦП, пам'ять, з'єднання з базою даних) і потенційно призводячи до **відмови в обслуговуванні (DoS)**. Якщо немає обмеження на кількість запитів у пакеті, зловмисник може скористатися цим, щоб знизити доступність сервісу.
|
||||
```graphql
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
@ -537,9 +537,9 @@ curl -X POST \
|
||||
```
|
||||
А потім **використовуйте деякі з кастомних**.
|
||||
|
||||
### **Вразливість Дублювання Поля**
|
||||
### **Вразливість Дублювання Полів**
|
||||
|
||||
**Дублювання Поля** - це вразливість, коли сервер GraphQL дозволяє запити з однаковим полем, яке повторюється надмірно. Це змушує сервер повторно обробляти поле для кожного випадку, споживаючи значні ресурси (ЦП, пам'ять та виклики до бази даних). Зловмисник може створити запити з сотнями або тисячами повторюваних полів, викликаючи високе навантаження і потенційно призводячи до **Відмови в Обслуговуванні (DoS)**.
|
||||
**Дублювання Полів** - це вразливість, коли сервер GraphQL дозволяє запити з однаковим полем, яке повторюється надмірно. Це змушує сервер повторно вирішувати поле для кожного випадку, споживаючи значні ресурси (ЦП, пам'ять та виклики до бази даних). Зловмисник може створити запити з сотнями або тисячами повторюваних полів, викликаючи високе навантаження і потенційно призводячи до **Відмови в Обслуговуванні (DoS)**.
|
||||
```bash
|
||||
# Test provided by https://github.com/dolevf/graphql-cop
|
||||
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
|
||||
@ -551,15 +551,19 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
|
||||
### Сканери вразливостей
|
||||
|
||||
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Тестування поширених неправильних налаштувань graphql кінцевих точок
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Скрипт для аудиту безпеки GraphQL з акцентом на виконання пакетних запитів та мутацій GraphQL.
|
||||
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Скрипт аудиту безпеки GraphQL з акцентом на виконання пакетних запитів та мутацій GraphQL.
|
||||
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Визначення графіку, що використовується
|
||||
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Інструмент, який можна використовувати для отримання схем та пошуку чутливих даних, тестування авторизації, брутфорс схем та знаходження шляхів до певного типу.
|
||||
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Може використовуватися як автономний інструмент або [розширення Burp](https://github.com/doyensec/inql).
|
||||
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Може використовуватися як CLI клієнт також для автоматизації атак: `python3 graphqlmap.py -u http://example.com/graphql --inject`
|
||||
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Інструмент, який перераховує різні способи **досягнення певного типу в схемі GraphQL**.
|
||||
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Наступник автономного та CLI режимів InQL
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Розширення Burp або скрипт на Python для розширеного тестування GraphQL. _**Сканер**_ є основою InQL v5.0, де ви можете аналізувати кінцеву точку GraphQL або локальний файл схеми інспекції. Він автоматично генерує всі можливі запити та мутації, організуючи їх у структурований вигляд для вашого аналізу. Компонент _**Атакуючий**_ дозволяє вам виконувати пакетні атаки GraphQL, що може бути корисним для обходу погано реалізованих обмежень швидкості: `python3 inql.py -t http://example.com/graphql -o output.json`
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Спробуйте отримати схему, навіть якщо інспекція вимкнена, використовуючи допомогу деяких баз даних Graphql, які запропонують назви мутацій та параметрів.
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): Розширення Burp або скрипт python для розширеного тестування GraphQL. _**Сканер**_ є основою InQL v5.0, де ви можете аналізувати кінцеву точку GraphQL або локальний файл схеми інспекції. Він автоматично генерує всі можливі запити та мутації, організуючи їх у структурований вигляд для вашого аналізу. Компонент _**Атакуючий**_ дозволяє вам виконувати пакетні атаки GraphQL, що може бути корисним для обходу погано реалізованих обмежень швидкості: `python3 inql.py -t http://example.com/graphql -o output.json`
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): Спробуйте отримати схему навіть з вимкненою інспекцією, використовуючи допомогу деяких баз даних Graphql, які запропонують назви мутацій та параметрів.
|
||||
|
||||
### Скрипти для експлуатації поширених вразливостей
|
||||
|
||||
- [https://github.com/reycotallo98/pentestScripts/tree/main/GraphQLDoS](https://github.com/reycotallo98/pentestScripts/tree/main/GraphQLDoS): Збірка скриптів для експлуатації вразливостей відмови в обслуговуванні в уразливих graphql середовищах.
|
||||
|
||||
### Клієнти
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user