У нас есть сообщество здесь, в Rails снова драма .
Первоначальный отчет. Существуют такие методы, как find_by_*, которые проецируются на модели, например, в find_by_title и find_by_id. Их можно использовать вот так find_by_id(params[:id], выберите: «ПОЛЬЗОВАТЕЛЬСКИЙ SQL») Но обычно их используют вот так find_by_id(параметры[:id]) И SQL-инъекция происходит, если params[:id] содержит {:select => «CUSTOM SQL»} — опции также могут быть в первом аргументе.
Обратите внимание: :select — это символ, а не «select» (строка).
Это означает, что трюк Эid[select]=SQL не сработает, поскольку ключ будет строкой.
И вообще, params — это хеш типа HashWithIndependentAccess. В его ключах в принципе не может быть символов, потому что.
все они уничтожаются при создании.
Есть такой гем authlogic, обычно он использует find_by_token(token), где token — это объект из сессии (который хранится в куках и подписан session_secret).
Чтобы записать в него :select => «SQL», нужно знать session_secret, поэтому уязвимость встречается крайне редко.
Вся эта идея с SQL-инъекцией CVE не стоит и выеденного яйца! И какова цель поста? ДоС! Я просто начал копать дальше, потому что Я уже давно использую альтернативные входы .
Rails по умолчанию принимает три типа request.body: XML, JSON, x-www-form-urlencoded. Подавляющее большинство приложений используют последний, это строка вида key=val&key2=val2. Но если клиент отправляет необходимый Content-Type, то автоматически будет использоваться другой парсер — XML/JSON и даже YAML, но он отключается по умолчанию.
А XML — гибкая вещь.
Пример: если вы отправите
тогда код find(params[:id]) будет выполнен так же, как и find(:all) Или<id type="symbol">all</id>
<id type="yaml">---.
</id>
Пользовательский ввод превращается в символы — символы не удаляются сборщиком мусора.
Этим скриптом из консоли браузера можно «обидеть» рельс приложения (скрипт был удален, чтобы скрипткиддис не использовался).
Попробуйте на локальном хосте и понаблюдайте за памятью рубинового процесса.
патч для application.rb, отключающий альтернативные парсеры ActionDispatch::ParamsParser::DEFAULT_PARSERS={} P.S. но это не все (существует возрождение старого CVE с [1, nil] через полезную нагрузку JSON/XML) Теги: #ruby #xml #егор хомяков #информационная безопасность #ruby #ruby на рельсах
-
Datatalks #8: Исследование Пользователей
19 Oct, 24 -
Feedburner Подружился С Google Adsense
19 Oct, 24 -
Основы Копирайтинга Для Push-Уведомлений
19 Oct, 24