Pregunta

Se me asignó la tarea de mantener un sitio web sin fines de lucro que recientemente fue víctima de un ataque de inyección SQL.Alguien aprovechó un formulario en el sitio para agregar texto a cada campo similar a texto 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 con sede en Rumania o China, pero eso no es lo importante en este momento.

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

Obviamente hay más por hacer (reforzar el sitio contra inyecciones SQL, usar algo como Markdown en lugar de almacenar HTML, etc.) y estoy trabajando en eso, pero por el momento lo que realmente necesito es una buena manera de hacerlo. y eliminar mediante programación el texto inyectado.Sé cuál es el texto exacto, es el mismo siempre y siempre se agrega al final de cualquier campo de texto.No puedo darme el lujo de eliminar todo el HTML de la base de datos en este momento y no sé exactamente cuándo sucedió esto, así que no puedo simplemente volver a una copia de seguridad.Además, el sitio tiene alojamiento compartido y no puedo conectarme a la base de datos directamente con las herramientas de SQL Server.Sin embargo, puedo ejecutar consultas en él, por lo que si hay alguna forma de construir una declaración de actualización de SQL en el sentido de "buscan todos los campos de texto en todas las tablas de toda la base de datos y hacen esto para limpiarlos", esa sería la solución. mejor.

¿Fue útil?

Solución

Restaure los datos de una copia de seguridad reciente.

Otros consejos

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)))

Suponiendo que haya sido víctima del mismo ataque que todos los demás, entonces el código de SQLMenace está cerca.Sin embargo, ese ataque utiliza varias URL de secuencias de comandos diferentes, por lo que tendrás que personalizarlo para asegurarte de que coincida con la URL que estás viendo en tu base de datos.

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

Un punto importante es que lo primero que debes hacer es eliminar el sitio.En este momento estás entregando activamente malware a tus usuarios, y eso podría ponerte en una solución legal más adelante.Coloque una página de marcador de posición para que sus usuarios no queden en la oscuridad, pero no siga publicando malware.Luego puedes arreglar el sitio para asegurarte de que ya no sea vulnerable a la inyección.La forma más sencilla de hacerlo. para este ataque en particular es simplemente deshabilitar los permisos de sysobjects/syscolumns para su usuario web, pero también querrá hacer una limpieza más exhaustiva o es solo cuestión de tiempo hasta que vuelva a estar descifrado.Luego puede usar el código proporcionado para limpiar el sitio y volver a ponerlo en funcionamiento.

Esto revertirá eso, también sería prudente quitarle los permisos de sysobject al nombre de usuario con el que se ejecuta su sitio y, por supuesto, desinfectar la entrada.

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

Escribí sobre esto hace un tiempo aquí: Microsoft ha lanzado herramientas para abordar los ataques de inyección SQL

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top