Ich wurde mit der Wartung einer gemeinnützigen Website beauftragt, die kürzlich Opfer eines SQL-Angriffs wurde. Jemand hat ein Formular auf der Site ausgenutzt, um jedem verfügbaren textähnlichen Feld in der Datenbank Text hinzuzufügen (varchar, nvarchar usw.), das, wenn es als HTML gerendert wird, eine JavaScript-Datei enthält und ausführt.
Eine Google-Suche nach der URL zeigt an, dass es sich um E-Mail-Spammer aus Rumänien oder China handelt, aber das ist momentan nicht wichtig.
Ich ging durch und entfernte die Informationen manuell aus den Textfeldern, die auf den meisten sichtbaren und beliebten Seiten auf der Website gerendert wurden, aber ich bin neugierig, was der beste programmatische Weg wäre, den Text aus den anderen Textfeldern zu entfernen auf der Website.
Offensichtlich gibt es noch mehr zu tun (die Site gegen SQL-Injections zu härten, etwas wie Markdown anstelle von HTML zu verwenden usw.) und ich arbeite daran, aber vorläufig ist das, was ich wirklich brauche, ein guter Weg den injizierten Text programmgesteuert entfernen. Ich weiß, was der genaue Text ist, es ist jedes Mal das Gleiche, und es wird immer an das Ende eines beliebigen Textfelds angehängt. Ich kann es mir nicht leisten, den gesamten HTML-Code in der Datenbank zu entfernen, und ich weiß nicht, wann genau das passiert ist, sodass ich nicht einfach zu einem Backup zurückkehren kann. Außerdem befindet sich die Site auf Shared Hosting und ich kann keine Verbindung mit der Datenbank direkt mit SQL Server-Tools herstellen. Ich kann jedoch Abfragen dagegen ausführen. Wenn es also eine Möglichkeit gibt, eine SQL-Aktualisierungsanweisung mit dem Effekt "Hey, finde alle Textfelder in allen Tabellen in der gesamten Datenbank und tu das, um sie zu bereinigen" zu erstellen, wäre das Beste.
Wenn Sie davon ausgehen, dass Sie demselben Angriff zum Opfer gefallen sind wie alle anderen, dann ist der Code von SQLMenace in der Nähe. Bei diesem Angriff werden jedoch verschiedene Skript-URLs verwendet. Sie müssen daher anpassen, um sicherzustellen, dass sie mit der URL übereinstimmen, die Sie in Ihrer Datenbank sehen.
Ich habe darüber auch geschrieben , und mein Lösungscode enthielt a generische Bereinigung
Ein wichtiger Punkt ist, dass Sie zuerst die Website herunterfahren müssen. Im Moment bieten Sie Ihren Nutzern aktiv Malware an, und dies könnte später zu rechtlichen Problemen führen. Stellen Sie eine Platzhalterseite auf, damit Ihre Nutzer nicht im Dunkeln gelassen werden, sondern weiterhin Malware bereitstellen. Dann können Sie die Site reparieren, um sicherzustellen, dass sie nicht mehr für die Injektion anfällig ist. Der einfachste Weg, für diesen speziellen Angriff auszuführen, besteht darin, sysobjects / syscolumns-Berechtigungen für Ihren Web-Benutzer einfach zu deaktivieren, aber Sie möchten auch mehr durch die Bereinigung machen oder es ist nur eine Frage der Zeit bis du wieder geknackt bist. Dann können Sie den bereitgestellten Code verwenden, um die Site zu bereinigen und sie live zu speichern.
Dies kehrt das um, auch wäre es ratsam, die sysobject-Berechtigungen von dem Benutzernamen, mit dem Ihre Site läuft, wegzunehmen und die Eingabe natürlich zu bereinigen
%Vor%Ich habe vor einer Weile hierüber geschrieben: Microsoft Hat Tools zum Beheben von SQL-Injection-Angriffen freigegeben
Tags und Links sql sql-server database security