XSS学习笔记(1)

开始学习XSS漏洞的相关知识,在网上看了一些关于XSS漏洞的帖子、博文等,但总感觉并没有真正地理解它,因此做个笔记,整理一下这些知识。首先贴上两个很经典的帖子:

1、Web安全测试之XSS

2、XSS的原理分析与解剖

这两个帖子其实已经把XSS的基本知识都涉及到了,但可能是我刚开始学Web安全的原因吧,小白的我看过之后总觉得还缺点什么,并没有真正理解XSS。后来读了《XSS跨站脚本攻击剖析与防御》,它几乎把XSS的前世今生前因后果都讲到了,我这才感到豁然开朗,把知识都串联起来了。这里主要讲XSS的一些基本概念和两个简单的例子,我认为这在理解XSS的原理上是非常重要的,方便以后经常复习。

参(zhai)考(chao)书(zi):《XSS跨站脚本攻击剖析与防御》

 

一、概念

1、跨站脚本(Cross-SiteScripting,XSS)是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML和客户端JavaScript脚本)注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

2、XSS攻击就是将非法的JavaScript、VBscript等脚本注入到用户浏览的网页上执行,而Web浏览器本身的设计是不安全的,它只负责执行JavaScript等脚本语言,而不会判断代码本身是否对用户有害。

 

二、XSS的分类

1、反射型XSS

反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型是最常见、使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中。

反射型XSS的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的URL,当受害者点击这些专门设计的链接时,恶意JavaScript代码会直接在受害者主机上的浏览器执行。它的特点是只在用户单击时触发,且只执行一次,非持久化,故称反射型跨站式脚本。此类XSS通常出现在网站的搜索栏、用户登录入口等地方,常用来窃取客户端Cookies或进行钓鱼欺骗。

反射型XSS的危害往往不如持久型XSS,因为恶意代码暴露在URL中,且时刻要求用户单击方可触发,稍微有点安全意识的用户可轻易看穿该链接是不可信任的。但恶意URL暴露的问题,可通过各种编码转换解决,可用十进制、十六进制、ESCAPE等各种编码形式迷惑用户,缺乏安全意识的用户往往很轻易便掉进陷阱里。

 

2、持久型XSS

持久型跨站脚本(Persistent Cross-site Scripting)也即存储型跨站脚本(StoredCross-site Scripting),比反射型跨站脚本更具威胁性,且可能影响到Web服务器自身的安全。

此类XSS不需用户单击特定URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意JavaScript代码的页面就会执行恶意代码。

持久型XSS一般出现在网站的留言、评论、博客日志等交互处,恶意脚本被存储到客户端或服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。


三、XSS Cheat Sheet

XSSCheat Sheet罗列了各种各样的XSS代码,这些代码在不同的浏览器,不同的应用场景、不同的环境下均有跨站触发的可能。它几乎涵盖了目前所有可能触发的XSS的测试用例,是现今最完整的。网址:http://ha.ckers.org/xss.html


四、XSS的简单发掘

1、反射型XSS发掘

网页中输入框(搜索栏,文本框等)输入测试代码XSS<XSS>’”,点击提交,没有用户输入过滤机制的网站会显示XSS ’”的结果,而有用户输入过滤的网站会提示诸如“不能输入< > /等字符”的信息(弹窗通知)。

若网站无用户输入过滤,则可输入完整的XSS代码<script>alert(‘XSS’)<script>,提交后,浏览器界面上弹出了一个内容为XSS的对话框。此时浏览器地址栏上的链接中就包含刚才输入的XSS代码了。因此可以证实该网站存在一个反射型的XSS。

漏洞成因:对输入的keyword的过滤中,忽略了对<>等关键字符的过滤,导致用户可任意注入HTML标记来引发XSS。


活生生的例子1:某大学图书馆书目查询系统反射型XSS漏洞(FireFox下测试)

测试代码:

XSS<>'"

输出结果:


网页代码:


注意网址中已经含有了“ XSS<XSS>'" ”这个字符串,而网页下面显示的却是“ 检索词:XSS ‘“ ”,这就是没有对<>标签进行过滤,网页不能把<>中的内容显示出来。在网页源代码中,浏览器把<XSS>识别为html标签,并且自动在后面添加了一个</xss>关闭标签,当然这两个“标签”没有显示出来。


测试代码:

<script>alert('hello')</script>

 输出结果: 

网页代码:

此时网页弹出了一个弹窗,内容是hello,网址中含有<script>alert('hello')</script>这样一串字符,从网页的源代码中也可看出,浏览器把这一串输入当做是JavaScript脚本来执行了。

我一开始用Chrome浏览器,第二个测试中没有弹出弹窗,后来想想可能是Chrome浏览器安全性较高,把弹窗屏蔽掉了。后来试了FireFox,360安全浏览器和Edge浏览器,都弹出了弹窗。

 

2、持久型XSS发掘

一个典型的持久型XSS漏洞:网站留言处输入<script>alert(‘XSS’)</script>,提交后被写入网页代码,管理员查看该页时触发。有时遇见XSS没有顺利执行,反而被浏览器显示出来的情况,极有可能是程序对这条XSS代码进行的转义。例如用<textarea>。此时修改XSS:

</textarea><script>alert(‘XSS’)</script><textarea>

两个<textarea>分别用来关闭语句前面和后面的<textarea>标记。这样就能成功在管理员查看该页时触发XSS。

漏洞成因:没有过滤有害字符。


活生生的例子2:某网站留言处的持久型XSS漏洞(2016-04-17补充)

我找到了学长以前做的一个网站来测试。首先查看其留言区的代码,发现并没有对输入进行过滤,而且刚好留言区是用<textarea>标签来标识的,因此我就请他配合做了下面的实验。感谢锋帅^_^

网页代码:


这里在网站的留言区就使用了<textarea>标签,且留言者无需注册和认证,是个容易利用的漏洞。

测试代码:

</textarea><script>alert('hello')</script><textarea>
后台结果:


留言者在提交留言后,就是将这段代码写入了网站的服务器,这样在管理员在进入这条留言的页面时,浏览器就会触发执行其中的JavaScript代码,弹出“hello”的弹窗。这样就证明了该网站存在持久型XSS漏洞。如果管理员不从后台把这条留言删除,那么每一次当他进入这个留言的页面时都会触发执行恶意代码弹出弹窗,因此称之为“持久型”。

如果脚本的目的不是一个简单的弹窗而是获取管理员cookie并发送到攻击者的服务器,那么就能在管理员查看这条留言时获得管理员的cookie,从而以管理员的身份登入网站后台并获得网站信息、数据库等。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值