Otra solucion mucho mejor que esa y que he probado esta noche, apenas tarda 2 segundos en limpiar toda la base de datos.
El tema era muy simple, saber como infecta y hacer lo mismo pero al reves. La infección se basa en inyectar codigo a todas las tablas y todos los campos a base de un procedimiento almacenado (que en el caso actual ellos mismos activan desde la URL).
Los pasos son:
Crea un nuevo procedimiento almacenado y pon esto (cambia usuario por tu nombre de usuario en SQL):
**copia**
ALTER PROCEDURE usuario.limpieza AS
DECLARE @T varchar(255), @C varchar(255);
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(
'update ['+@T+'] set ['+@C+'] = left(
convert(varchar(8000), ['+@C+']),
len(convert(varchar(8000), ['+@C+'])) - 6 -
patindex(''%tpircs<%'',
reverse(convert(varchar(8000), ['+@C+'])))
)
where ['+@C+'] like ''%<script src=http://www.adw95.com/b.js></script>'''
);
FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;
**fin copia**
Guarda el procedimiento y lo ejecutas, 3 segundos y listo base de datos limpia.
Ahora viene lo divertido... como se cuela?? Por lo que he visto Microsoft indica que no es un problema suyo y que somos nosotros los que programamos mal con ASP dejando abiertas las bases de datos. En efecto a mi me ocurria esto en tan solo 2 modulos de toda la web (por despistes), como arreglarlo estas son las normas básicas:
-Abre la base de datos siempre en adOpenForwardOnly , adLockReadOnly (que es por defecto como se abre un recordset)
-Siempre que abres una base de datos cierra y libera memoria, no te olvides de cerrar ninguna
-A ser posible utiliza aperturas y cierres de bases de datos en Procedures que solo el servidor es capaz de usar al crear la web
Suerte
Cita:
Iniciado por edude Ya esta. Gracias por la ayuda. Al final me cree un codigo nuevo, aun que he utilizado algunas cosas del tuyo. Esto es lo que hice, por si alguien también quiere aprovecharlo:
Gracias de nuevo, un saludo,
edude.