**
此篇系本人两周来学习XSS的一份个人总结,实质上应该是一份笔记,方便自己日后重新回来复习,文中涉及到的文章我都会在末尾尽可能地添加上,此次总结是我在学习过程中所写,如有任何错误,敬请各位读者斧正。其中有许多内容属于相关书籍、文章的部分摘取,如有侵权,请联系我修改。(asp-php#foxmail.com)
**
XSS(Cross-Site Script,跨站脚本)是由于web应用程序对用户的输入过滤不足而产生的一种漏洞。攻击者可以利用网站漏洞把恶意的脚本代码注入到网页之中,当其他用户浏览这些带有恶意代码的网页时就会执行其中的恶意代码,对受害者产生各种攻击。
如果对以上描述还不是很了解的话,可以参考百度百科
在余弦大大和xisigr大大的书籍《Web前端安全技术揭秘》第三章中这样说道:
跨站脚本的重点不在“跨站”上,而应该在“脚本”上...因为这个“跨”实际上属于浏览器的特性,而不是缺陷,造成“跨”的假象是因为绝大多数的XSS攻击都会采用嵌入一段远程或者说第三方域上的脚本资源。
确实,当攻击者的服务器上的js嵌入到受害者的页面,至于接下来的攻击就是关于“脚本”的事了。
2) XSS可以带来哪些危害?对于XSS攻击的危害,大多数的人们却没有正确的认识,实际上攻击者可以利用XSS攻击造成巨大的危害。比如:
网页挂马;
盗取Cookie;
DoS攻击;
钓鱼攻击;
蠕虫攻击;
劫持用户web行为;
结合CSRF进行针对性攻击;
······
这些都是可以利用XSS漏洞来达成的。
3) XSS类型目前的XSS总共可以分为三种类型:
反射型(也叫非持久型)
存储型(也叫持久型)
DOM型
PS:前两种XSS都会与服务器产生交互,后一种不会产生交互。(某安全大佬面试)
反射型XSS
反射型XSS,也称非持久型XSS,最常见也是使用最广的一种。在反射型XSS中,payload一般存在于网页的Url中,只用户单击时触发,只执行一次,非持久化,故称反射型XSS。攻击者发送恶意Url链接让受害者点击(一般会对payload部分进行处理,如:编码转换和短域名跳转)
由于篇幅问题,关于反射型XSS我就不做过多简述。
有的人认为反射型XSS需要用户已经登陆的情况下才能利用,其实不然。我们可以通过反射型xss让浏览器远程嵌入我们的js文件,然后配合浏览器漏洞进行RCE攻击。这里给出个相近的例子:记一次从DOM型XSS到RCE过程。
存储型XSS,也称持久型XSS,攻击者首先将恶意javascript代码上传或存储到漏洞服务器中,只要受害者浏览包含此恶意javascript页面就会执行恶意代码,不需要用户点击特定Url就能执行,故存储型XSS比反射型XSS更具威胁性。--- 《XSS跨站脚本攻击剖析与防御》
存储型XSS与反射型XSS最大的区别就在于提交的XSS代码会储存于服务端,下次再访问目标页面时不用再提交XSS代码。---《Web前端黑客技术揭秘》
许多朋友对反射型XSS和存储型XSS都比较清楚,可是却不太了解什么是DOM型XSS,没关系,看完这里你就应该会对DOM型XSS有个大概认识
DOM,即Document Object Model(文件对象模型)的缩写,关于DOM的概念想了解的朋友可以在百度百科得到相应的解答。
DOM型XSS是如何产生的?我们知道,客户端javascipt是可以访问浏览器的DOM文本对象模型,如果没有经过适当的过滤和消毒,那么应用程序可能会受到基于DOM的XSS攻击。
在刺的《白帽子讲Web安全》是这样讲的:
通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS,也就是DOM型XSS。
举个简单的例子(来自《Web前端黑客技术揭秘》):
<html> ... <script> var a=document.URL; document.write(a.substring(a.indexOf("a=")+2,a.length)); </script> ... </html> 把以上代码保存为1.html,然后打开浏览器访问#a=test
我们知道这是个静态页面,而且#后边的内容并不会传给服务器。
可是这样就不会产生XSS漏洞了吗?如果我们访问
#a=<script>alert(/xss/)</script>
当我们访问上述url时,服务器会返回源代码,我们可以用抓包工具截取,发现与正常访问的页面无差别,可是当浏览器收到源代码时便把HTML文本解析成DOM对象并执行,结果弹出/xss/消息框,感兴趣的朋友可以试试。
具体执行过程如图: 4) XSS的利用方式
前面我们介绍了各种XSS的特点及产生方式,现在我们来说说如何利用这些漏洞。
Cookie窃取