Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #83, НОЯБРЬ 2005 г.

Жуки ColdFusion

Skakunof Alex

Хакер, номер #083, стр. 083-068-2


В основном, сервер ColdFusion работает под виндами (есть реализации под Solaris, Linux, Cobalt, HP-UX), и ColdFusion умеет работать с реестром, данными виндовой доменной аутентификации, ini-файлами и прочими фишками.

Говорят, что писать на ColdFusion невероятно просто, так как он вмещает в себя огромное количество функций самого различного назначения. Что больше всего радует - наличие удобных функций для работы с массивами, структурами (именованными массивами) и списками. Также впечатляет удобная контекстная справка и несколько других бонусов типа авто-подстановки атрибутов или закрывающего тэга, встроенных в такие редакторы, как HomeSite и ColdFusion Studio.

Далее следует отметить одну особенность работы c CFML. Наряду с другими языками, он поддерживает многократное использование кода, оформленного в виде пользовательской функции, но кроме этого предусмотрен механизм определения собственных тэгов (custom tags): если в функции значения передаются позиционно (скажем, в функции открытия файла первым параметром всегда идет строковое имя файла, а вторым - режим работы), то вызов кастом-тэга строится на именовании параметров-атрибутов - это очень похоже на обычный html-тэг с несколькими атрибутами вроде ширины и цвета, только за поведение такого тэга отвечает программист. В принципе, кастом-тэг - закономерное введение для тэгового языка.

Сталкивался ли ты в РНР с чем-нибудь вроде $$var? Это выражение называется «переменная переменная» (variable variable), то есть результатом следующего кода будет «666»:

$var="foo";

$foo=666;

echo $$var;

Если в РНР этим, похоже, мало кто пользуется, то в ColdFusion такая фишка встречается довольно часто. Для этого имя переменной нужно окружить символами «#» («паунд»). Так, например, у тебя есть десять переменных вида x1, x2,…, x10. Пройтись по ним можно так:

<cfloop index = "i" from = "1" to = "10">

<cfset "x#i#" = "var " & i>

</cfloop>

В принципе, это удобная фича, но если перегнуть палку, то мозг начинает кипеть. Во всяком случае, если в .cfm файле ты хочешь написать html-константу цвета типа "#0000ff", то паунд нужно экранировать - "##0000ff", иначе задолбишься искать ошибку.

Любимый тернарный оператор вида x==y ? «x равен y»: «x не равен y» есть и здесь, только в CFML перед скобками нужно написать «IIF» и не забыть, что оба выходных выражения будут выполнены. Есть одно важное отличие от РНР - вызов непроинициализированной переменной приводит к ошибке. Вот теперь, когда у тебя в голове от всего вышесказанного выстроилась стройная и четкая каша, можно приступить к рассмотрению уязвимостей.

[№1: sql-injection]

Прежде чем разбираться с тем, как в ColdFusion работает sql-injection, нужно уяснить, что для работы с БД используется парный тэг <cfquery>, внутри которого простым текстом вставляется SQL-запрос. Допустим, при запросе страницы www.server.org?ItemID=5 выполняется следующий код:

Назад на стр. 083-068-1  Содержание  Вперед на стр. 083-068-3