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

Статья NoSQL-Injection или то, что еще не задрочили

Как я понял также само как и пароль. Использовать или $gt, или $exists, или регуляркой, верно?
Тут нужно использовать именно $gt с поправкой на тип объекта к которому этот оператор применяется, то есть с поправкой на тип ObjectId. Пароль у нас является переменной типа String, я сам немного протупил в начале думая использовать $regex
1657204715513.png

Как мы можем видеть, вместо “password” мы передаем JSON-объект (JSON в JSON`е), в данном объекте присутствует оператор “$gt” (Greater than), которому соответствует пустая строка. Обращаясь к базе данных MongoDB, мы как бы говорим найди строку где “login” = “0xUser” и пароль больше чем пустая строка
 
Гайки на сайте затянули, теперь при изменении данных информация из базы не выводится, при изменении данных мы получаем вот такой респонс
1658327404850.png

без объекта final, что бы сдампить базу нужно было подставлять в пост данные следующий пейлоуд
{"_id": { $gt: "000000000000000000000000" }, "referral_id":""}
В результате чего в ответ мы получали объект который содержал id больше, чем 000000000000000000000000. Сохраняли полученный объект, брали из него _id и вставляли в следующий запрос, то есть следующий наш запрос уже содержал примерно следующий пейлоуд
{"_id": { $gt: "5cb87d97d48853450e1d8da2" }, "referral_id":""}
И так по наклонной, пока не дойдем до самого конца бд
 
Почему такие статьи просто так не пишутся?
Раньше это было часто освещаемой темой на многих форумах.
Просто так не интересно, а это все таки конкурс, в конкурсах интересно участвовать, дух соперничества и все такое
 
Какой софт посоветуете для автоматизации обнаружения и эксплуатации NoSqli?
Данная уязвимость встречалась мною только в результатах appspider от rapid.
Ну и из известного ковырятельного инструментария только nosqlmap
(бурп это да по умолчанию, но semi auto)
 
Какой софт посоветуете для автоматизации обнаружения и эксплуатации NoSqli?
Для обнаружения хз даже, в спарки или инвикти его нету, в бурпе тоже отсутствует, в акуше тоже его не видел, наверное нигде, appsider не использовал ни разу, но рас уж говорите, что там он есть то лучше его и юзать
На счет эксплуатации мне добавить нечего, все как вы и сказали
 
Основные операторы которые мы будем использовать при атаке на веб-приложения:
  • {$gt: 0}
  • {$exists: true}
Хм, интересно. Но такой код не пробило:
JavaScript:
const { login, password } = req.body

if (!login || !password) return res.status(403).json({ message: "Fill in the login and pass fields" })
const user = await UserService.getUser(login, "login")

if (!user) return res.status(403).json({ message: `User ${login} was not found` })

const passwordValidation = bcrypt.compareSync(password, user.password)
if (!passwordValidation) return res.status(400).json({ message: "Password is wrong" })

const token = genToken(user._id, user.role)

return res
  .cookie('token', token, {
    maxAge: 86400000, // 1 day
    httpOnly: true
  })
  .send('OK')
Видимо не прошёл либу bcrypt, которая сравнивает введённый пасс с пошифрованным пассом из базы

P.S. проверил. Да, код на строке
JavaScript:
const passwordValidation = bcrypt.compareSync(password, user.password)
валится в catch
 

Вложения

  • Screenshot_20220819_175057.png
    Screenshot_20220819_175057.png
    19.2 КБ · Просмотры: 35
Последнее редактирование:
Хм, интересно. Но такой код не пробило:
JavaScript:
const { login, password } = req.body

if (!login || !password) return res.status(403).json({ message: "Fill in the login and pass fields" })
const user = await UserService.getUser(login, "login")

if (!user) return res.status(403).json({ message: `User ${login} was not found` })

const passwordValidation = bcrypt.compareSync(password, user.password)
if (!passwordValidation) return res.status(400).json({ message: "Password is wrong" })

const token = genToken(user._id, user.role)

return res
  .cookie('token', token, {
    maxAge: 86400000, // 1 day
    httpOnly: true
  })
  .send('OK')
Видимо не прошёл либу bcrypt, которая сравнивает введённый пасс с пошифрованным пассом из базы

P.S. проверил. Да, код на строке
JavaScript:
const passwordValidation = bcrypt.compareSync(password, user.password)
валится в catch
Все верно, я писал об этом в статье
На этом моменте вопрос “какого хера?” напрашивается сам собой, тут все очень просто. Если сайт не хавает данное выражение, то это значит, что над паролем проводятся какие-то определенные манипуляции, то есть он хэшируется
 
Добрый день хотел выгрузить исходники для тестирования, но столкнулся с проблемой что ссылка на исходники прилагаемая в статье просрочена. Поэтому решил написать сюда, у вас не найдется исходники веб-приложения который использовался в статье?
 
Добрый день хотел выгрузить исходники для тестирования, но столкнулся с проблемой что ссылка на исходники прилагаемая в статье просрочена. Поэтому решил написать сюда, у вас не найдется исходники веб-приложения который использовался в статье?
Добрый день! К сожалению ничего не осталось, я уже затёр все исходники что были
 
Добрый день! К сожалению ничего не осталось, я уже затёр все исходники что были
А есть ли подобные сайты на которых можно потеститься? Чисто например обойти авторизацию или попытаться выгрузить мыла доступные. Свои сайты обыскал, но к сожалению везде безрезультатно. Так же не понял на счет raw. В raw возможно все таки произвести атаку? Или только еcли тело json?
 
А есть ли подобные сайты на которых можно потеститься? Чисто например обойти авторизацию или попытаться выгрузить мыла доступные.
лабы + инфа + солюшены для лаб
плаг если надо

акк сделаешь за 20 секунд. на https://www.fakemail.net/ приходит, пасс от балды и гоняй
 
А есть ли подобные сайты на которых можно потеститься? Чисто например обойти авторизацию или попытаться выгрузить мыла доступные. Свои сайты обыскал, но к сожалению везде безрезультатно. Так же не понял на счет raw. В raw возможно все таки произвести атаку? Или только еcли тело json?
Можно и в raw, я даже больше скажу, уязвимыми могут быть даже куки, все зависит от того как разработчик написал сайт
Потренироваться вроде как можно на OWASP Juice Shop, погугли найдешь
 
лабы + инфа + солюшены для лаб
плаг если надо

акк сделаешь за 20 секунд. на https://www.fakemail.net/ приходит, пасс от балды и гоняй
Зарегался вся фигня, открываю решение, ну что нужно сделать, чтобы триггернуть, проверить, пишет откройте бурп залупу, а где ее взять? Ну в плане, я думал может у них есть какой-то триал или что то такое? Или можно просто предварительно отснифать в браузере или же Fiddler и в условный Postman или тот же Fiddler ебнуть, так?
 
Зарегался вся фигня, открываю решение, ну что нужно сделать, чтобы триггернуть, проверить, пишет откройте бурп залупу, а где ее взять? Ну в плане, я думал может у них есть какой-то триал или что то такое? Или можно просто предварительно отснифать в браузере или же Fiddler и в условный Postman или тот же Fiddler ебнуть, так?
Да любая локальная прокся подойдет, но тебе почему советуют берп, потому как берп тут универсален. Прям огонь.
Качай кряк из любых источников, могу посоветовать pwn3rzs
А могу ничего не советовать, у вас же все "руками", хуле. Прям тайм бэйсед рукаи засекаете.
 


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