Жуки ColdFusion Skakunof Alex Хакер, номер #083, стр. 083-068-3 <cfquery name="qGetItemDetail" datasource="..."> SELECT * FROM Item WHERE ItemID=#URL.ItemID# </cfquery> Радуйся, если БД является MSSQL Server: ты раздобыл практически готовый шелл, поскольку стандартная процедура MSSQL xp_cmdshell с радостью исполнит любой твой каприз. То есть после небольшого изменения URL'а на www.server.org?ItemID=5;exec%20master..xp_cmdshell%20"net%20user%20petya%20password%20/add запустится процедура xp_cmdshell и добавит нового юзера. Как бороться с этим недугом? Очень просто: нужно проверять и экранировать входные данные, использовать своих stored procedures вместо кусков SQL ( «перенос логики на сторону сервера БД» или «создание легкого клиента»), а также использование специального тэга <cfqueryparam>, который позволяет передать в запрос данные, четко указав их тип и максимальную длину. [№2: прямой вызов темплейтов] Нельзя сказать, что это будет работать только для ColdFusion'а, и все-таки. Принцип простой - напрямую вызвать скрипт, который обычно сам по себе не вызывается, а имеет какую-то чисто служебную цель; например, есть такая практика в программировании: выносить запросы к базе в отдельные файлы - так почему бы этим не воспользоваться? Трудности две: узнать имя нужного файла и суметь использовать его в своих целях, ведь править код никто не даст. Самым простым решением является изучение готовых проектов и использование найденных багов. Для примера, часто для ColdFusion-проектов используется такая надстройка, как FuseBox, которая за счет хитрого наименования, разбиения и расположения файлов существенно облегчает процесс разработки (хорошая вещь, имеет реализацию для РНР). Исходники общедоступны и ждут твоего анализа. Сложность в том, что сорцы могут быть закодированы такой утилитой, как CFEncode - она идет в стандартной поставке сервера и реализует DES-шифрование. Но курс «Кодирование информации» сейчас идет даже в средней школе, поэтому ниже есть ссылка на исходник проги CFDecode, которую один наш нехороший соотечественник пытается в скомпилированном виде продавать по 18 буказоидов. Как бороться - запросы и прочие важные файлы рекомендуется выносить в недоступную через браузер папку. Кроме этого, в специальный темплейт application.cfm, который вызывается при запросе любого файла, можно вставить проверку пути к вызываемому файлу. [№3: получение абсолютного пути] Считается, что уровень критичности такого недосмотра админа весьма низкий, но хакеру такая инфа может оказаться весьма кстати. Дело в том, что если запросить у сервера, работающего под IIS, файл, состоящий из имени MS-DOS-устройства (NUL, PRN, и др.) и окончания .dbm, то сервер выдаст ошибку с указанием абсолютного пути к искомому файлу, который должен был бы лежать в web root-папке. Для примера, запрос http://national.unitedway.org/nul.dbm вернет страницу с ошибкой, представленной на рисунке 1. Опыт показывает, что часто плохо настроенный сервер ведет себя примерно так же при запросе любой несуществующей страницы, но этот способ использует специфику настройки веб-сервера. |