Frage

Ich wurde mit der Pflege einer gemeinnützigen Website beauftragt, die kürzlich Opfer eines SQL-Injection-Angriffs wurde.Jemand hat ein Formular auf der Website ausgenutzt, um jedem verfügbaren textähnlichen Feld in der Datenbank (varchar, nvarchar usw.) Text hinzuzufügen, der, wenn er als HTML gerendert wird, eine JavaScript-Datei einschließt und ausführt.

Eine Google-Suche nach der URL zeigt, dass sie von E-Mail-Spammern aus Rumänien oder China stammt, aber das ist im Moment nicht wichtig.

Ich habe die Informationen aus den Textfeldern, die auf den meisten sichtbaren und beliebtesten Seiten der Website angezeigt werden, durchgesehen und manuell entfernt. Ich bin jedoch neugierig, wie sich der Text am besten programmgesteuert aus den anderen Textfeldern der Website entfernen lässt .

Offensichtlich muss noch mehr getan werden (die Site gegen SQL-Injections absichern, so etwas wie Markdown verwenden, anstatt HTML zu speichern usw.), und ich arbeite daran, aber vorerst brauche ich wirklich einen guten Einstieg und den eingefügten Text programmgesteuert entfernen.Ich kenne den genauen Text, er ist jedes Mal derselbe und wird immer an das Ende eines Textfelds angehängt.Ich kann es mir derzeit nicht leisten, den gesamten HTML-Code aus der Datenbank zu entfernen, und ich weiß nicht genau, wann das passiert ist, daher kann ich nicht einfach auf eine Sicherung zurückgreifen.Außerdem befindet sich die Site auf Shared Hosting und ich kann mit SQL Server-Tools keine direkte Verbindung zur Datenbank 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 tue dies, um sie zu bereinigen“ zu konstruieren, wäre das die am besten.

War es hilfreich?

Lösung

Stellen Sie die Daten aus einem aktuellen Backup wieder her.

Andere Tipps

Ich war Opfer und Sie können es zum Aufräumen verwenden

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

Angenommen, Sie sind dem gleichen Angriff zum Opfer gefallen wie alle anderen, dann ist der SQLMenace-Code naheliegend.Allerdings verwendet dieser Angriff eine Reihe unterschiedlicher Skript-URLs, sodass Sie ihn anpassen müssen, um sicherzustellen, dass er mit der URL übereinstimmt, die Sie in Ihrer Datenbank sehen.

Ich habe auch darüber geschrieben, und mein Lösungscode enthielt eine allgemeinere Bereinigung.

Ein wichtiger Punkt ist, dass das allererste, was Sie tun müssen, ist Nehmen Sie die Website ab.Im Moment stellen Sie Ihren Benutzern aktiv Schadsoftware zur Verfügung, und das könnte Ihnen später rechtliche Probleme bereiten.Richten Sie eine Platzhalterseite ein, damit Ihre Benutzer nicht im Dunkeln tappen, aber verbreiten Sie nicht ständig Malware.Anschließend können Sie die Site reparieren, um sicherzustellen, dass sie nicht mehr anfällig für Injektionen ist.Der einfachste Weg, das zu tun für diesen speziellen Angriff besteht darin, einfach die Sysobjects/Syscolumns-Berechtigungen für Ihren Webbenutzer zu deaktivieren, aber Sie sollten auch eine gründlichere Bereinigung durchführen, sonst ist es nur eine Frage der Zeit, bis Sie erneut geknackt werden.Anschließend können Sie den bereitgestellten Code verwenden, um die Site zu bereinigen und wieder online zu schalten.

Dadurch wird das umgekehrt. Außerdem wäre es ratsam, dem Benutzernamen, mit dem Ihre Website ausgeführt wird, die Sysobject-Berechtigungen zu entziehen und natürlich die Eingaben zu bereinigen

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

Darüber habe ich vor einiger Zeit hier geschrieben: Microsoft hat Tools zur Abwehr von SQL-Injection-Angriffen veröffentlicht

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top