Atac de tip SQL Injection

|

Cu totii invatam din greseli. E greu la inceput, toate vin spre tine ca niste avalanse..important e sa tii capul sus si mai ales sa fii responsabil (asta deosebeste defapt un om matur in gandire de un pusti). Legat de ce s-a intamplat cu recentul atac asupra magaziunului, imi permit sa fac o mica paranteza: cand eram mic, imi placea sa instalez un troian Hack'a'Tack pe calculatoarele celor cu care vroiam sa ma joc de-a D-zeu. Era distractiv...le dadeam eject la CD-ROM, le trimiteam mesaje pe desktop, practic puteam sa controlez orice, inclusiv sistemul de fisiere. Pe vremea aceea, cei carora le povesteam ma intrebau de ce nu le-am formatat HDD-ul...eh...lucrurile au evoluat. Inainte informatia poate nu era atat de importanta ca acum. De la distractia de a sterge fisiere (care practic se rezuma doar la fun), tehnologia si mentalitatea oamenilor rau intentionati au evoluat la lucruri mult mai profitabile, care, de ce nu, pot avea legatura cu click fraud, hit inflation attack, phising, email spoofing etc.
Ca sa trec direct la subiect un atac de tip SQL Injection (ceea ce a suferit recent magazinul liveMag) este un atac ce vizeaza vulnerabilitatea aplicatiei, pentru a putea ajunge la baza de date si a o manipula.
Mai multe informatii puteti gasi aici http://www.bloombit.com/Articles/2008/05/ASCII-Encoded-Binary-String-Automated-SQL-Injection.aspx
Pentru cei care aveti in spate o baza de date de tip SQL Server si ati avut supriza de a observa ca toate campurile si inregistrarile au fost concatenate cu un sir de caractere ( Ex: ), puteti rula urmatorul script, ce indeparteaza toate aparitiile unui anumit sir de caractere ( sir initializat in variabila @injection ):

DECLARE @table varchar(255)
DECLARE @column varchar(255)
DECLARE @rowValue varchar(5000)
DECLARE @injection varchar(200)
SET @injection = ''

DECLARE tableCursor 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 /* Nvarchar */ OR
[b].[XType] = 167 /* varchar */)
OPEN tableCursor
FETCH NEXT FROM tableCursor INTO @table,@column
WHILE (@@FETCH_STATUS = 0)
BEGIN
EXEC('DECLARE tableRowCursor CURSOR FOR SELECT ' + @column + ' FROM ' + @table + ' WHERE ' + @column + ' LIKE ''%' + @injection + '%'' ')
OPEN tableRowCursor
FETCH NEXT FROM tableRowCursor INTO @rowValue
WHILE (@@FETCH_STATUS = 0)
BEGIN
SET @rowValue = REPLACE(@rowValue,@injection,'')
EXEC('UPDATE ' + @table + ' SET ' + @column + '=''' + @rowValue + ''' WHERE CURRENT OF tableRowCursor')
--print 'UPDATE ' + @table + ' SET ' + @column + '=''' + @rowValue + ''' WHERE CURRENT OF tableRowCursor'
FETCH NEXT FROM tableRowCursor INTO @rowValue
END
CLOSE tableRowCursor
DEALLOCATE tableRowCursor
print 'Table healed - ' + @table
print 'Column healed - ' + @column
FETCH NEXT FROM tableCursor INTO @table, @column
END
CLOSE tableCursor
DEALLOCATE tableCursor

Recomandarile noastre pentru utilizatori ar fi ca indiferent pe ce site-uri navigati, sa aveti instalat pe calculator un anti-virus, un firewall si un anti-spyware (nu se stie niciodata de unde sare "iepurele"), iar pentru owneri ai aplicatiilor web sa faceti back-up permanent.



Cosmin N

1 comentarii:

janna spunea...

Thanks so much for the compliment on my card.
Happy Holidays.
Janna