sqli reales protegerse inyeccion injection ejemplos como sql sql-server database security

protegerse - sql injection ejemplos reales



¿Cuál es la mejor manera de limpiar después de una inyección SQL? (4)

Esto revertirá eso, también sería sensato quitar los permisos de sysobject del nombre de usuario con el que se ejecuta su sitio, y desinfectar la entrada del curso.

DECLARE @T VARCHAR(255),@C VARCHAR(4000) DECLARE Table_Cursor CURSOR FOR SELECT a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id and a.xtype=''u'' and (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC(''if exists (select 1 from [''+@T+''] where [''+@C+''] like ''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''') begin print ''''update [''+@T+''] set [''+@C+'']=replace([''+@C+''],''''''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''''','''''''''''''''') where [''+@C+''] like ''''''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''''''''' end'') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

Hace un tiempo escribí sobre esto: Microsoft lanzó herramientas para abordar ataques de inyección SQL

Me encargaron el mantenimiento de un sitio web sin fines de lucro que recientemente fue víctima de un ataque de inyección SQL. Alguien explotó un formulario en el sitio para agregar texto a cada campo de texto similar disponible en la base de datos (varchar, nvarchar, etc.) que, cuando se representa como HTML, incluye y ejecuta un archivo JavaScript.

Una búsqueda en Google de la URL indica que proviene de spammers de correo electrónico basados ​​en Rumania o China, pero eso no es lo importante ahora.

Revisé y eliminé manualmente la información de los campos de texto que se muestran en la mayoría de las páginas visibles y populares del sitio, pero tengo curiosidad sobre cuál sería la mejor forma programática de eliminar el texto de los otros campos de texto en el sitio. .

Obviamente, hay mucho más por hacer (endurecer el sitio frente a las inyecciones de SQL, usar algo como el descuento en lugar de almacenar HTML, etc.) y estoy trabajando en eso, pero por el momento lo que realmente necesito es una buena forma de hacerlo. y eliminar programáticamente el texto inyectado. Sé cuál es el texto exacto, siempre es el mismo y siempre se agrega al final de cualquier campo de texto. No puedo permitirme eliminar todo el código HTML en la base de datos en este momento y no sé exactamente cuándo sucedió esto, así que no puedo retroceder a una copia de seguridad. Además, el sitio está en alojamiento compartido y no puedo conectarme a la base de datos directamente con las herramientas de SQL Server. Sin embargo, puedo ejecutar consultas en su contra, por lo que si hay alguna forma de construir una declaración de actualización de SQL con el efecto de "hey encontrar todos los campos de texto en todas las tablas de toda la base de datos y hacer esto para limpiarlos", esa sería la mejor.


Restaure los datos de una copia de seguridad reciente.


Suponiendo que hayas sido víctima del mismo ataque que los demás, entonces el código de SQLMenace está cerca. Sin embargo, ese ataque utiliza varias URL de script diferentes, por lo que deberá personalizarlo para asegurarse de que coincida con la URL que está viendo en su base de datos.

Escribí sobre eso también , y mi código de solución incluía una limpieza más genérica.

Un punto importante es que lo primero que debe hacer es eliminar el sitio . En este momento está sirviendo activamente malware a sus usuarios, y eso podría ponerlo en una situación legal más adelante. Coloque una página de marcador de posición para que sus usuarios no queden a la intemperie, pero no continúen sirviendo malware. Luego puede arreglar el sitio para asegurarse de que ya no sea vulnerable a la inyección. La forma más sencilla de hacer eso para este ataque en particular es simplemente deshabilitar los permisos de sysobjects / syscolumns para su usuario web, pero también querrá realizar una limpieza adicional o solo es cuestión de tiempo hasta que se resquebraje nuevamente. Luego puede usar el código provisto para limpiar el sitio y regresarlo en vivo.


Fui víctima y puedes usarlo para limpiar

UPDATE Table SET TextField = SUBSTRING(TextField, 1, CHARINDEX(''</title'', TextField) - 1) WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX(''</title'', Textfield, 1) > 0)))