介绍
跨站脚本攻击:是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。其英文全称为Cross Site Scripting,原本缩写应当是CSS,但为了和层叠样式表(Cascading Style Sheet,缩写为CSS )有所区分,安全专家们通常将其缩写成XSS。故跨站脚本攻击又称XSS攻击。
跨站脚本攻击实际是一种恶意代码执行的方式。通常情况下,黑客通过“HTML注入”行为篡改网页,插入了恶意脚本,让用户在浏览网页的时候浏览器行为可以被控制。主要原因在于网站对于用户提交的数据过滤不严格,导致问题产生。
本质
XSS攻击本质上是对HTML页面的注入攻击
判断点:
1.判断是否有漏洞点
2.构造合适的利用方式
XSS攻击的受害者是访问过包含XSS恶意代码页面的用户,故输入内容需要在用户页面上进行展示才能展开XSS攻击。一般的留言板、评论栏系统我们能根据经验轻松地判断出输出点的位置,若在一些不常见的系统中,我们可以使用将输入内容在回显页面中进行搜索来确定输出位置。
分类
•反射型XSS
–该类型只是简单地将用户输入的数据通过URL的形式直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。
•存储型XSS
–Web应用程序会将用户输入的数据信息保存在服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击效果。
•基于DOM的XSS
–严格意义上来讲,基于DOM的XSS跨站脚本攻击并非按照“数据是否保存在服务器端”来划分,其从效果上来说也算是反射型XSS。但是这种XSS实现方法比较特殊,是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击,故单独分类。
审查点
使用浏览器的“审查元素”功能来分析网页源码,如下图,发现此处输出内容在一对多行文本框标签中。而该标签中的即使出现了js脚本,也是不会被浏览器所执行的。所以,我们的跨站代码就需要先闭合前面的标签。这里,我们使用下面的测试代码:
</textarea><script>alert(/xss/)</script>
在测试XSS的过程中,不只有
"><iframe src="">
<SCRIPT SRC = "">
<IMG SRC = "">
快速查测漏:
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0d%0a//</stYle/</titLE/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
强过滤手段-降低用户输入非法字符
可用伪协议进行绕过
使用格式:
Data:资源类型;编码,内容
click me
其中base64编码的内容是
在firefox老版本下能触发并获取当前用户cookie。在chrome下有由于默认为空域,则此语句会失效,但利用此方法标准的弹框等其他行为依然可执行。
HTML编码基础
HTML编码是一种用于表示问题字符以将其安全并入HTML文档的方案。也是解决跨站脚本(XSS)攻击的有效手段。
HTML命名方式:以&开头,分号结尾的,例如“<”的编码是“<”
字符编码:十进制、十六进制ASCII码或unicode字符编码,样式为“&#数值;”,例如“<”可以编码为“<”和“<”
当攻击Web应用程序时,HTML编码主要在探查XSS漏洞时发挥作用。如果应用程序中返回用户的内容未被修改,那么它易于受到攻击;但是如果它对危险字符做HTML编码,也许比较安全。
利用特殊的HTML属性、JavaScript API 构造注入点
如果页面出现直接引用参数的问题:
<a href=“<%= escapeHTML(getParameter(“redirect_to”)) %>”>跳转…
这里页面可利用redirect_to表示要重定向的请求地址。如果未做过滤,如下例:
http://xxx/?redirect_to=javascript:alert(‘XSS’)
那么实际a标签会构造成:
登录
点击a标签,直接弹窗。
XSS测试流程
XSS利用方式汇总
结合其他漏洞,可实现更多的利用方法:
1、CSRF+XSS
2、XSS dos攻击
HTML 针对cookie的安全标签:httponly
Secure
浏览器的XSS filier机制:
浏览器监测当前的请求中是否有XSS语句,并且与对应的响应包进行比对。如果出现相同则认为是恶意脚本,会直接进行过滤。
反射型XSS无法进行持久存储,只是在早期的邮件钓鱼中进行利用。
反射型XSS可被扫描器发现
前端渲染及前端框架的防护思路
浏览器先加载一个静态 HTML,此 HTML 中不包含任何跟业务相关的数据。
然后浏览器执行 HTML 中的 JavaScript。
JavaScript 通过 Ajax 加载业务数据,调用 DOM API 更新到页面上。
除此之外,VUE可利用V-text/html等方式来制定加载内容的渲染方式,也就是在上述第三点时进行处理,并且可尝试使用在线过滤库,进行全方位的处理。
https://jsxss.com/zh/index.html