Как вы уже видели, сервер базы данных из Интернета напрямую не доступен, а на внешний сервер установлены все исправления, изза чего он неуязвим перед всеми известными атаками. На этом этапе моей целью является расширение привилегий, чтобы стать внутренним пользователем (желательно высокопривилегированным) на одной из систем сетимишени. Для этого я воспользуюсь внедрением SQLкода. Опираясь на эту методику, я отправлю серверу базы данных ряд команд, чтобы он коечто для нас сделал. Я не могу подключиться непосредственно к серверу базы данных, поэтому я просто укажу ему, чтобы он сам установил для меня соединение, только перед этим я создам во внешней сети слушатель портов.
Прежде чем я смогу отдавать команды серверу базы данных, нужно установить коекакие программы на Webсервер. Это важно, потому что, вообще говоря, хакерские утилиты по умолчанию в операционной системе не устанавливаются. Для этого можно использовать TFTP (Trivial File Transfer Protocol) - протокол, не требующий установления логических соединений и применяемый в основном для загрузки бездисковых рабочих станций. Клиентское приложение TFTP устанавливается на все системы Windows по умолчанию (за исключением Windows Server 2003 с Service Pack 1 и более поздних версий), поэтому, если его никто не удалил, оно будет доступным. Так как система уязвима перед атакой с внедрением SQLкода, я могу отдать серверу базы данных команду загрузить из сети программу netcat по протоколу TFTP. Netcat - это сетевая утилита, похожая на telnet, но отличающаяся от нее отсутствием аутентификации и гораздо большей универсальностью. Она свободно доступна в Интернете и даже входит в состав многих дистрибутивов UNIX и Linux. Ее часто используют хакеры, поэтому оставлять ее в системе без крайней необходимости нельзя.
Этот этап атаки основан на вызове хранимой процедуры xp_cmdshell, которая устанавливается в SQL Server по умолчанию и применяется для выполнения команд ОС. (Расширенная процедура xp_cmdshell - мощное средство, доступное по умолчанию только системным администраторам. Разработчики SQL Server не рекомендуют разрешать ее выполнение другим пользователям. Кроме того, некоторым системным администраторам эта процедура не нужна. В SQL Server 2005 она устанавливается только по требованию, что создает дополнительный уровень безопасности. Заметьте, что в сценарии, описываемом в этой статье, Webприложение подключается к базе данных в контексте учетной записи sa, т. е. взломщик является системным администратором.) Я воспользуюсь этой процедурой для запуска TFTP и закачки моих утилит на сервер базы данных. В большинстве сред потребность в процедуре xp_cmdshell возникает редко, поэтому ее можно заблокировать для защиты от атаки, которую я как раз сейчас и провожу. После закачки netcat на сервер я указываю этой утилите создать сокет, после чего передаю его как stdin, stdout и stderr в вызове cmd.exe. Звучит сложно, но работает прекрасно. Результат - установление исходящего соединения, позволяющего передавать через сокет команды с помощью командной оболочки. Теперь в моем распоряжении есть командная оболочка на удаленном компьютере:
c:\>nc -l -p 12345
Microsoft Windows 2000 [Version 5.00.2195]
(C) Copyright 1985-2000 Microsoft Corp.
C:\WINNT\system32>hostname
hostname
PYN-SQL
Итак, я получил первую точку опоры, сделав очередной шаг к захвату сети. Я расширил свои привилегии, став внутренним пользователем вместо удаленного анонимного. Чтобы узнать тип пользователя, я должен сначала загрузить в систему остальные утилиты. Я воспользуюсь ими для расширения локальных привилегий в случае надобности, а также для взлома остальных систем сети. Эти утилиты также можно передать, используя tftp.exe. После этого я могу проверить свои учетные данные на взломанной системе:
C:\warez>whoami
whoami
NT_AUTHORITY\SYSTEM
Ну вот, я уже и LocalSystem! То есть SQL Server выполнил процедуру xp_cmdshell в контексте LocalSystem, и я полностью взломал внутренний сервер базы данных. Можно приступать к взлому других систем.