All streams
Search
Write a publication
Pull to refresh

Comments 68

В некоторых банках можно логин менять

- Здесь выдают зарплату? Моя фамилия Итого

- Нет, здесь собирают налоги. Как, говорите, ваша фамилия?

Итого! Итого! Вот дурак, больше всех получает и какой уже раз не приходит!

а так же true, false, "", '', `` etc

Кошмар веб девелоперов - мистер [object Object]

Сообщение: Через NaN минут к вам подъедет [object Object] номер undefined.

NAN это детское питание.

Нан это хлеб по-казахски.

Хм. Это его родителям звонили из школы, а они отвечали «это научит вас экранировать строки»? ))

К сожалению, там мамаша сказала не "строки", а "входные данные". Впрочем, одно другого не сильно лучше, и оставляет огромный простор для добавления дыр. Лучше бы она посоветовала "параметризованные запросы" (и белые списки до кучи).

Да, маленький Бобби дроп.

Древнее зло ;)

Кстати, что за странная повозка?

Renault Megane I Phase II (1999-2002)

Я тупой и ничего не смыслю в веб-разработке. Поясните, допустим, так или иначе, через sql injection, на сервер попала подобная команда. Или там drop table XXX, неважно. Ну и что? Неужели у пользователя есть полномочия на выполнение подобных операций??? Будет сообщение о какой-нибудь ошибке и все.

Бекэнд в 99.9% случаев подключается под юзером с правами на DELETE строк, потому что как-то должна же работать админка, где есть функция удаления записей. Разграничения прав доступа идёт на уровне бекэнда, а не СУБД.

Также очень часто бекэнд имеет право на создание и удаление таблиц, потому что он же и выполняет миграцию схемы данных при обновлении ПО.

Единственное, что DROP DATABASE может не быть, но только если админ заморочился сделать отдельного юзера под бекэнд. Что вовсе не факт, если СУБД обслуживает лишь один бекэнд.

под юзером с правами на DELETE строк, потому что как-то должна же работать админка, где есть функция удаления записей.

Это там, где soft delete не завезли, ну и прочие излишества. Пользователи, права, зачем это все? Бизнесу надо быстрее фичи в прод выкатывать, а то конкуренты обгонят, бггг)

Надеюсь он никогда не будет заполнять анкету на Госуслугах

Я много лет использую логин null или undefined везде, где могу. Это первое, что я пробую при регистрации, и делаю это как раз в надежде столкнуться с чем-то описанным в статье. За всё время ничего не случилось. Только на сайте одного известного онлайн-магазина электроники лет 5 назад получил уведомление о том, что мой ник был изменён модератором сайта.

На одном крупном сайте зарегистрировался с ником admin. В комментарии к посту пришли настоящие админы и долго возмущались занятым мной ником (который оставался свободным всё 10+ лет существования сайта).

Старинный лайфхак. Прийдет хитрый хакер ломать парол админа - а его нет ;)

Странно, что админы не сменили вам принудительно ник через запрос к базе данных. Либо же они не знали просто как это сделать 😅

Странно что они не забанили пользователя как только увидели, а стали выражать возмущение в формате сообщений на форуме.

Вот так люди и живут в нормальных странах, не поверите. Культур-мультур

Значит там работает нормальная валидация на входе или есть черный список зарезервированных имен. Как раз пример того, как надо делать

Вот в такие моменты понимаешь, почему в SQL NULL <> NULL и есть всякие IS DISTINCT FROM

Вот в такие моменты понимаешь, что есть программисты, не знающие основ SQL

Да здесь давно любой может писать, не?

Нынче все ORMом отгораживаются от бесовского SQL :)

Но как?? С чем нужно сравнить строку 'NULL' и как спроектировать базу данных чтобы оно сработало? Те ученые записи, на которых иньекция сработала - были с логином NULL штоле?

Подозреваю, что данные в JSON между сервисами передавались, и в какой то момент "NULL" заменился на NULL, либо наоборот

Ну, если специально не ломать, то в json есть null. Но если даже найти способ сломать - что с чем нужно сравнить?

Зря нас пугают вайбкодингом. Люди руками делают весьма странное.

Так нейросети и учились на "написанном руками"

Опытный программист всегда найдёт, как сломать данные максимально необычным и неочевидным способом )

Не так давно я отправлял строку "NULL" в одну подсистему только потому, что она в этом месте в принципе принимает только строки. Так что случаи бывают разные.

В этом-то и вопрос: с какого перепугу "NULL" вдруг заменился на NULL? Почему ни у кого не заменяется, а здесь заменилось? Из какого места должны расти руки, чтобы заменилось? Что сделать, чтобы не заменялось? Без ответов на эти вопросы статья теряет весь смысл. Остаётся беллетристика "Жила-была девочка, ей пришло письмо". Ну очень интересно

Произошло явно прямо противоположное, в каком-то из мест null вдруг заменился на строку null. Допустить подобную ошибку несложно, достаточно подобрать правильный язык программирования.

Банальное защитное преобразование в строку на JS делает ровно то, что случилось.

Как только встречаются несколько разных языков, появляется масса вариантов.

От банально забытого экранирования данных (например, при "ручной" сборке SQL) до особенностей сериализации/десериализации данных.

В каком-то языке привели null к строке и получится 'NULL' 

В JS, например, null + '' === 'null'

Нужно не только неудачно преобразовать - тут несложно, но и неудачно сравнить.

Скорее всего сравнение как раз правильно сработало, сравнили строку из профиля и "неправильную" строку 'null'

Зашла на аккаунт проверить появились ли у меня в управлении эти домены - нет, это были просто сообщения на почту, которые судя по всему дублировались на мой аккаунт.

Видимо сервис отправки уведомлений ищет адрес почты запросом к БД по логину, а вместо того чтобы обработать null как ошибку, экранирует и делает запрос к БД, а сервис переноса аккаунтов работает по id и по каким то причинам на время изменения данных ставит логин null.

Есть форматы, где null не предусмотрен. Например, url encoded формы. Конечно, по-хорошему, туда и не надо пихать null (а обозначать отсутствие значения отсутствием поля или ещё как-то более однозначно), но если очень хочется... Между тем некоторые сериализаторы делают тупо toString всем полям и, соответственно, null превращается в "null" и дальше едет как строка и становится неотличим от явно переданной строки "null".

Отдает байкой ради рекламы. По ссылке 404.

Ссылка на раскрытый репорт:
https://bugbounty.bi.zone/reports/6777

Но там не 404, а "This is a private report" и к тому же, Program: SBER WILDCARD BUG$ ZONE III

Сомнительно, что на Bug Zone от Сбера нашли уязвимость у TW

Самое важное осталось за кадром. Конкретный механизм этого "иногда превращаются" остался совершенно неясен, а без него ценность статьи близка к нулю.

так blackbox же

Статья показывает метод поиска уязвимостей "понатыкать null/undefined строк туда, где им не место, и посмотреть что будет". Так как это достаточно распространённая ошибка - привод к строке nullable значения, в результате получается "null" неотличимое от переданной строки вручную. И дальше может что-то пойти не так.

Знать внутреннее устройство сервиса при этом не обязательно.

Известная байка, как кто-то умный сделал себе номер на машину NULL (в америке можно любые буквы делать). Задумка была, что камеры не смогут выписать такому номеру штраф. В реальности, хозяину авто приходили все штарфы, где камера не смогла распознать номер.

Играл и проиграл.

В самой статье даже указан конкретно кто.

Эх, на многих сайтах мне отказывают в регистрации по причине "в имени пользователя обязательно должны быть буквы"

почему? Через «а» - «баян», через «о» - «боян». Через два «ф» - «аффтар»

Багбаунти это круто. Но только не в МТС. Я им баг заводил раз 100. И номер мой не NULL. И ситуация стандартная питерский номер в Питере и области через mnp не может дозвониться в РОСТЕЛЕКОМовский номер зарегистрированный в краснодаре и находящийся в Питере. При этом через их же приложение звонок идёт, не mnp номер дозванивается, меняется регион mnp номера и все начинает работать. Напомнило сбер 2000х - вот где карту открывали в то отделение и идите.

Я уже читал где-то эту статью, уверен на 100%. Причем довольно давно.

NULL - не логин, а дырка в валидации. В итоге чужие уведомления летят куда попало

Там проблема скорее в сериализации, что где-то сделали toString значению, которое может быть null. Причём сделали даже не при регистрации, а там где идёт рассылка емейлов. Просто раньше прилетевшую строку null искали в базе и не находили. А теперь нашли соответствующего ей пользователя и отправили ему уведомление.

Баг был и без этого пользователя. Например, емейлы не уходили в каких-то ситуациях, базу лишний раз дергали и т п

Скорее всего где то в коде была конструкция типа SELECT ... WHERE username = ?, и при отсутствии юзернейма в каком-то сервисе туда подставлялся SQL NULL. А база данных при сравнении username = NULL не находила ничего. Но какой то другой сервис, видимо, делал username || '', получал строку 'NULL' и по ней уже находил аккаунт автора

Веселый зоопарк

Так вот зачем нужна фича смены логина) Не для удобства пользователей, а для того, чтобы багхантеры могли занять все зарезервированные имена вроде NULL, None, admin, root и посмотреть, что сломается...

Сколько человек загуглили слово багбаунти?)

Sign up to leave a comment.

Articles