When Compromise Is Not An Option

导航

<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

统计

公告

这里内容虽然还不精彩,但每篇文章都是原创,望大家和我讨论问题。您的每一个评论,都是我的动力,我一定并虚心接受批评和鼓励。
联系方式:
MAIL:
zaluao#gmail.com

与我联系

搜索

 

常用链接

留言簿(1)

我参与的团队

我的标签

随笔分类

文章分类

最新随笔

最新评论

阅读排行榜

评论排行榜

防SQL注入

最近中招<script   src=http://s.see9.us/s.js></script>,比较郁闷,真是猖獗啊,
再回过头来看看代码中的拼接,发现几处Request.QueryString并不是用参数传值,没有做限制,估计就是漏洞点,只有在补充过滤类,来限制了
 1  /// <summary>
 2        /// 过滤SQL注入关键字[post,get]
 3       /// </summary>
 4       /// <param name="pStr"></param>
 5       /// <returns></returns>

 6       public static string  GetQueryStringSafe(string pStr)
 7       {
 8           bool IsValue = true;
 9           if (pStr != null && pStr.Length > 0)
10           {
11               pStr = pStr.ToLower();
12               string strSQLin = "'|and|--|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|&|%20|==|>|<";
13               string[] strSQLinGroup = strSQLin.Split(new char[] '|' }, 23);//23个关键字,有待补充
14               for (int i = 0; i < strSQLinGroup.Length; i++)
15               {
16                   if (pStr.IndexOf(strSQLinGroup[i]) >= 0)//表示存在
17                   {
18                       IsValue = false;
19                       break;
20                   }

21               }

22           }

23           else
24           {
25               IsValue = false;
26           }

27           if (IsValue)
28           {
29               return pStr;
30           }

31           else
32               return "";
33       }
只需要在你用到拼接时,检查一下
其实用重写来做,比较方便和安全,我看网上也有类似方法,但把过滤用StartProcessRequest()来实现,没有必要,并不是每个网页都有SQL操作.
如果中招,数据库中已经被插入字符代码,先删除数据,方法如下:[针对远程数据库,本机数据库,或者自己的主机,直接还原好]
在查询分析器中列出需要删除数据的表,如果某些表不删,在where后加 and a.name <> '不删数据表'
1 select   'truncate   table   '   +a.name+char(13)
2  from     sysobjects   a       
3  where   a.type=   'u'   
4  order   by   a.name   
然后复制查询出的内容,复制到查询分析器中执行
再把以前备份的数据建导进去,不要告诉我你重来没有备份过数据吧

Tag标签: SQL

posted on 2008-05-12 09:06 Zaluao 阅读(1077) 评论(8)  编辑 收藏 网摘 所属分类: .NET SKILL

评论

#1楼  2008-05-12 10:23 置身珠海,学习与奋斗      

为什么不采用参数进行脚本操作呢,这样可以从根本上解决 SQL 注入漏洞   回复  引用  查看    

#2楼  2008-05-12 12:07 wallace.w      

我也中招这个东西,我非常不幸的成了你说的那个从来没有备份数据库的人...   回复  引用  查看    

#3楼 [楼主] 2008-05-12 13:32 泛舟      

@wallace.w
那就更新吧,用注入的方法再清空写入的数据试试
SQL语句如下:
用游标遍历所有表里如下数据类型的字段,然后UPDATE挂马内容。(全部是允许写入字符的字段)

xtype=99 ntext
xtype
=35 text
xtype
=231 nvarchar
xtype
=167 varchar
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
@C=replace(@C,'挂马内容','')
exec('update ['+@T+'] set ['+@C+']= rtrim(convert(varchar,['+@C+'])) ')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
  回复  引用  查看    

#4楼  2008-05-12 16:52 求知无傲      

标记下来,有时间再来看好了。   回复  引用  查看    

#5楼  2008-05-13 02:19 簡簡單單..      

同意1L滴..   回复  引用  查看    

#6楼 [楼主] 2008-05-18 07:49 泛舟      

是的,传参试很简单的防注入了,但如果对没有传参的地方,就需要过滤处理了
1,过滤关键字
2,限制字符长度
3,限制字符类型
基本上和传参一样的功能了   回复  引用  查看    

#7楼  2008-05-22 20:55 P哥 [未注册用户]

我把楼主的做了一些改动:
DECLARE @T varchar(255),
@C varchar(255),
@SQL varchar(4000)
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
set @SQL = 'update ['+@T+'] set ['+@C+'] = rtrim(convert(varchar,substring('+@C+',0,charindex(''"></'','+@C+')))) where charindex(''"></'','+@C+') > 0'
exec(@SQL)
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor   回复  引用    

#8楼  2008-07-07 17:41 cothly [未注册用户]

用正则表达式匹配处理效率高些, 你这样在请求里查找你自己定义的数组字符, 字符多了会慢。   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-12 09:49 编辑过
Google站内搜索

相关文章:


相关搜索:
SQL

相关链接: