Pull to refresh

Comments 19

Реклама Nemesida WAF?
Логичнее было бы использовать ОРМ, а WAF тут недавно обсирали с примерами.
Все нормально!

В 2017 мы только приступили к разработке Nemesida WAF, на тот момент действительно, были «детские болячки». Если на самом деле интересна точность его работы в 2021 году, можете почитать в статье Я твой WAF payload шатал.

Послушайте, этот чёс становится уже неприличным.
Я сначала хотел написать про техническую неграмотность статьи, но тут дело даже не в этом.
Тут даже попытки нет написать технический текст, а просто механический спам, когда для новой статьи просто берется половина старой и разбавляется копипастой из гугля. Ну увольте уже этого копирайтера, мало того что он в теме не разбирается от слова "совсем" — он же русским языком не владеет:


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

Какие еще "объекты"? Чего и у кого они требуют? При чем здесь инъекции?
Здесь совсем ничего не говорится про то, каким образом хранимая процедура может обеспечить защиту (не говоря уж про то, в каких случаях не сможет), а какой-то бубнёж про многократное использование запросов.


Сам чеклист — это обычная бессмысленная копипаста, в которой перепутаны уязвимость, её использование, и "минимизация последствий". При том что к защите имеет отношение только первое. И которая которая не дает четких указаний, а перечисляет несколько путанных, противоречащих друг другу, и неполных рекомендаций. Вот наличие таких статей как раз и приводит к появлению уязвимостей, поскольку читатель не получает четкой картины, а только какие-то невнятные пассы руками, и наверняка допустит ошибку, пытаясь реализовать противоречивые рекомендации.


Уязвимость — это сама возможность изменить код запроса. С ней и надо бороться.
А все эти "Соблюдение условия WHERE", "объединение запросов", "комментирование" — это, во-первых, далеко не полный список, но главное — это разные варианты эксплуатации этой уязвимости. И бороться с ними — столь же интеллектуальное занятие, как "бороться" с каждой каплей дождя отдельно вместо того чтобы открыть зонтик.


Рекомендации невнятные и технически неграмотные. Следует ли применять все перечисленные пункты вместе? (спойлер: нет). Список неполный и не гарантирует защиту. Какие-то мифические функции типа mysqli($str). В кучу навалена защита от инъекций, минимизация последствий, и заведомо неэффективные способы типа WAF (который, являясь черным списком, по определению не гарантирует защиту) Код в примерах написан так, что автор явно видит его впервые в жизни, не понимая ни одной написанной строчки. Вот это прям серьёзно? Давать другим рекомендации, не понимая смысла того что пишешь?

Вижу ответ понимающего человека)))) Быть может Вы ответите более развёрнуто? Возможны ли такие инъекции без знания структуры БД и кода отображения? или всё таки должна быть какая то крыса внутри?
Хотелось бы узнать как будет проходить sql-инъекция, если передача, скажем, логина и пароля проводилась бы поэтапно и привязывалась бы к сессии(через куки)?

Точно так же. При чем здесь сессии и куки? Инъекция — это про данные, а не про транспорт

правильно ли я понимаю, что без знания структуры БД, даже если сайт полностью состоит из sql дыр, будет достаточно сложно, а может даже не возможно? В общем нужен какой то «крот» изнутри?

Неправильно. В статье есть даже пример

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

В статье есть пример, как через инъекцию получить структуру

В общем поддержу предыдущего оратора. Копипаста от непонимающего
Если говорить про MySQL или MariaDB, то для определения структуры БД, то есть, получения списка таблиц, мы можем обратиться к специальной БД information_schema. Она доступна по умолчанию начиная с версии MySQL 5+ и вряд ли вы уже встретите БД ниже этой версии. Так вот, для определения структуры БД используем в нашем запросе:
union select null,null,table_name,null from information_schema.tables --

и в ответе веб-приложения мы увидим список всех таблиц, в том числе и системных. Чтобы не отображать системные таблицы, которые редко будут представлять интерес, можно видоизменить запрос:
union select null,null,table_name,null FROM information_schema.tables WHERE table_schema=database() --

В таком случае будут показаны только те таблицы, которые присутствуют в текущей базе данных. Стоит также отметить, что для разных СУБД синтаксис будет отличаться, но так или иначе везде можно встретить information_schema или его аналог для просмотра структуры всех БД.
В конце концов можно воспользоваться специализированными инструментами типа SQLmap
теория понятна
вопрос практики
Либо знание структуры либо получается банальный подбор
union select null,null,table_name,null FROM information_schema.tables WHER
вы не можете с уверенностью сказать что 3е поле не int, тем более не можете утверждать что в интересующей вас выборке 4 поля
вы так же не можете с уверенностью сказать что оно вообще выводится

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


А целом-то да, эксплуатация инъекций — это чаще всего унылый подбор и перебор.

Все верно, нельзя быть уверенным, что в таблице будет именно 4 поля. Но никто не мешает использовать «order by» для определения их количества. Начните с команды, допустим, order by 60 и на каждой итерации проверки уменьшайте значение вдвое, пока веб-приложение не начнет нормально реагировать на запрос. Можете посмотреть наглядно как это происходит в самой статье, раскрыв спойлер «Проверка с помощью order by».
Что касается типов данных, то вы также правы, но отчасти. Даже если в каком-то поле используется определенный тип данных, то ничто не мешает использовать во всех полях значение NULL, суть которого кроется в его названии. Более подробно про это значение можете ознакомиться в статье на Википедии
И да, верно подсказали, что зачастую поиск и эксплуатация SQL-инъекций — это как унылый перебор таблиц, если union based используется, так и не менее унылый посимвольный перебор для дампа информации из бд в случае blind SQLi.
Sign up to leave a comment.