Как вы уже видели, сервер базы данных из Интернета напрямую не доступен, а на внешний сервер установлены все исправления, из­за чего он неуязвим перед всеми известными атаками. На этом этапе моей целью является расширение привилегий, чтобы стать внутренним пользователем (желательно высокопривилегированным) на одной из систем сети­мишени. Для этого я воспользуюсь внедрением 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 Ser­ver по умолчанию и применяется для выполнения команд ОС. (Расширенная процедура 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, и я полностью взломал внутренний сервер базы данных. Можно приступать к взлому других систем.