Читаем Защити свой компьютер на 100% от вирусов и хакеров полностью

Внедрение операторов LDAP (LDAP Injection). Атаки этого типа направлены на веб-серверы, создающие запросы к службе LDAP на основе данных, вводимых пользователем. Упрощенный протокол доступа к службе каталога (Lightweight Directory Access Protocol, LDAP) – открытый протокол для создания запросов и управления службами каталога, совместимыми со стандартом X.500. Протокол LDAP работает поверх транспортных протоколов Интернет (TCP/UDP). Веб-приложение может использовать данные, предоставленные пользователем для создания запросов по протоколу LDAP при генерации динамических веб-страниц. Если информация, полученная от клиента, должным образом не верифицируется, атакующий получает возможность модифицировать LDAP-запрос. Причем запрос будет выполняться с тем же уровнем привилегий, с каким работает компонент приложения, выполняющий запрос (сервер СУБД, веб-сервер и т. д.). Если данный компонент имеет права на чтение или модификацию данных в структуре каталога, злоумышленник получает те же возможности. В листинге 1.11 представлен пример кода, который может быть подвержен атаке данного вида.

Листинг 1.11. Уязвимый код с комментариями

line 0: html

line 1: body

line 2: %@ Language=VBScript %

line 3: %

line 4: Dim userName

line 5: Dim filter

line 6: Dim ldapObj

line 7:

line 8: Const LDAP_SERVER = "ldap.example"

line 9:

line 10: userName = Request.QueryString("user")

line 11:

line 12: if( userName = "" ) then

line 13: Response.Write("bInvalid request. Please specify a valid user name/bbr")

line 14: Response.End

line 15: end if

line 16:

line 17:

line 18: filter = "(uid=" + CStr(userName) + ")" " searching for the user entry

line 19:

line 20:

line 21: "Creating the LDAP object and setting the base dn

line 22: Set ldapObj = Server.CreateObject("IPWorksASP.LDAP")

line 23: ldapObj.ServerName = LDAP_SERVER

line 24: ldapObj.DN = "ou=people,dc=spilab,dc=com"

line 25:

line 26: 'Setting the search filter

line 27: ldapObj.SearchFilter = filter

line 28:

line 29: ldapObj.Search

line 30:

line 31: 'Showing the user information

line 32: While ldapObj.NextResult = 1

line 33: Response.Write("")

line 34:

line 35: Response.Write("buUser information for: " + ldapObj.AttrValue(0) + "/u/bbr")

line 36: For i = 0 To ldapObj.AttrCount-1

line 37: Response.Write("b" + ldapObj.AttrType(i) +"/b: " + ldapObj.AttrValue(i) + "br" )

line 38: Next

line 39: Response.Write("")

line 40: Wend

line 41: %

line 42: /body

line 43: /html

Обратите внимание, что имя пользователя, полученное от клиента, проверяется на наличие в этой строке пустого значения (строки 10-12). Если в переменной содержится какое-то значение, оно используется для инициализации переменной filter (строка 18). Полученное значение используется для построения запроса к службе LDAP (строка 27), который исполняется в строке 29. В приведенном примере атакующий имеет полный контроль над запросом и получает его результаты от сервера (строки 32-40).

Выполнение команд операционной системы (OS Commanding). Атаки этого класса направлены на выполнение команд операционной системы на веб-сервере путем манипуляции входными данными. Если информация, полученная от клиента, должным образом не верифицируется, атакующий получает возможность выполнить команды операционной системы. Они будут выполняться с тем же уровнем привилегий, с каким работает компонент приложения, выполняющий запрос (сервер СУБД, веб-сервер и т. д.). Пример: язык Perl позволяет перенаправлять вывод процесса оператору open, используя символ | в конце имени файла:

#Выполнить "/bin/ls" и передать

#результат оператору

open Open (FILE, "/bin/ls|")

Веб-приложения часто используют параметры, которые указывают на то, какой файл отображать или использовать в качестве шаблона. Если этот параметр не проверяется достаточно тщательно, атакующий может подставить команды операционной системы после символа | . Предположим, приложение оперирует URL следующего вида: http://example/cgi-bin/showInfo.pl?name=Johntemplate=tmp1.txt.

Изменяя значение параметра template, злоумышленник дописывает необходимую команду (/bin/ls) к используемой приложением:

http://example/cgi-bin/showInfo.pl?name=Johntemplate=/bin/ls|

Большинство языков сценариев позволяет запускать команды операционной системы во время выполнения, используя варианты функции exec. Если данные, полученные от пользователя, передаются этой функции без проверки, злоумышленник может выполнить команды операционной системы удаленно. Следующий пример иллюстрирует уязвимый PHP-сценарий:

exec("ls-la $dir",$lines,$rc);

Используя символ ; (UNIX) или (Windows) в параметре dir, можно выполнить команду операционной системы:

http://example/directory.php?dir=%3Bcat%20/etc/passwd

В результате подобного запроса злоумышленник получает содержимое файла /etc/ passwd.

Перейти на страницу:

Похожие книги

1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих
1С: Управление небольшой фирмой 8.2 с нуля. 100 уроков для начинающих

Книга предоставляет полное описание приемов и методов работы с программой "1С:Управление небольшой фирмой 8.2". Показано, как автоматизировать управленческий учет всех основных операций, а также автоматизировать процессы организационного характера (маркетинг, построение кадровой политики и др.). Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, формировать разнообразные отчеты, выводить данные на печать. Материал подан в виде тематических уроков, в которых рассмотрены все основные аспекты деятельности современного предприятия. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов. Все приведенные в книге примеры и рекомендации основаны на реальных фактах и имеют практическое подтверждение.

Алексей Анатольевич Гладкий

Экономика / Программное обеспечение / Прочая компьютерная литература / Прочая справочная литература / Книги по IT / Словари и Энциклопедии