Mein Kollege ist mit seinem Code unsicher und erlaubt einem Benutzer, eine SQL-Datei hochzuladen, die auf dem Server ausgeführt werden soll.
Er löscht alle Schlüsselwörter in der Datei wie "EXEC", "DROP", "UPDATE", "INSERT", "TRUNC"
Ich möchte ihm den Fehler seiner Wege zeigen, indem ich seine EXEC ( @sql )
Mein erster Versuch wird mit 'EXEXECEC (N''SELECT ''You DRDROPOPped the ball Bob!'')'
Aber er könnte das alles in einer Schleife filtern.
Gibt es eine Möglichkeit, den Code meines Kollegen auszunutzen? Oder filtert die Schlüsselwörter genug heraus?
Edit: Ich habe ihn dazu gebracht, seinen Code einzusehen. Wenn der Code ein Schlüsselwort enthält, führt er ihn nicht aus. Ich versuche immer noch herauszufinden, wie man das mit der Binärkonvertierung ausnutzt.
Sagen Sie Ihrem Kollegen, dass er ein Idiot ist.
Machen Sie eine verschleierte SQL-Abfrage , etwa so:
select @sql = 0x44524f5020426f627350616e7473
Dies wird einige Optimierungen erfordern, je nachdem, wie der Rest des Codes aussieht, aber die Idee ist, den Code in hex zu codieren und auszuführen (oder besser, lass ihn ausgeführt werden). Es gibt andere Möglichkeiten, Code zu verbergen, der injiziert werden soll.
Sie haben dort ein riesiges Sicherheitsloch. Der Witz ist, dass dies nicht einmal neu erfunden werden muss. Der richtige Weg, solche Dinge zu verhindern, besteht darin, ein Konto mit den richtigen Berechtigungen zu erstellen und zu verwenden (zB: kann select
Abfragen nur für die Tabellen x, y und z ausführen).
Sehen Sie sich ASCII-codierte / binäre Angriffe an ...
sollte deinen Freund überzeugen, dass er verloren ist ...;)
Und hier einige Hilfe, wie man die Zeichenketten kodiert.
Konvertieren einer Zeichenfolge in HEX in SQL
Tags und Links sql-server validation tsql sql-injection dynamic-sql