【Web篇】(6.3) ❀ 09. 跨站脚本 - 存储型XSS ❀ FortiWeb 攻防演练

  【简介】跨站脚本(Cross-site scripting,简称:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。从而使目标计算机收到危害。


  存储型XSS

  存储型XSS攻击是指注入的脚本永久存储在目标服务器上的攻击,例如在数据库、消息论坛、访问者日志、注释字段等中。受害者在请求存储时从服务器检索恶意脚本、信息。存储型XSS有时也称为持久性或Ⅰ型 XSS。

  安全等级 - Low

  将DVWA的安全等级切换到Low。

    ① 选择【XSS (Stored)】,在Name和Message输入内容,点击【Sign Buestbook】,下面会显示刚才输入的内容。点击【View Source】,查看数据库源代码。

    ② 分析源码,可以看到有使用三个函数: trim() 函数移除字符串两侧的空白字符或其他预定义字符,预定义字符包括\0、\t、\n、\x0B、\r以及空格,可选参数charlist支持添加额外需要删除的字符;stripslashes() 函数删除字符串中的反斜杠;mysql_real_escape_string() 函数会对字符串中的特殊符号(\x00,\n,\r,\,',",\x1a)进行转义。

  可以看到,对输入并没有做XSS方面的过滤与检查,且存储在数据库中,因此这里存在明显的存储型XSS漏洞。

    ③ Name字段输入Test,Message字段输入 <script>alert(123456)</script> ,点击【Sign Guestbook】。

    ④ 可以看到有弹出视窗,显示指定的内容。

  安全等级 - Medium

  将安全等级升级为中级。

    ① 分析源码,可以看到有使用 strip_tags() 函数剥去字符串中的HTML、XML以及PHP的标签,但允许使用<b>标签; addslashes() 函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。

  可以看到,由于对 message 参数使用了 htmlspecialchars() 函数进行编码,因此无法再通过 message 参数注入XSS代码,但是对于name参数,只是简单过滤了<script>字符串,仍然存在存储型的XSS。

    ② Name字段的输入长度限制为最多十个字符。

    ③ Burpsuite抓包,改为 <script>alert(123456)</script>,点击【Forward】。 

  ④ 一样会显示弹出框。

  还可以修改为

  双写绕过: <sc<script>ript>alert(123456)</script>

  大小写混淆绕过 <ScRipt>alert(123456);</ScRipt>

  使用非 script 标签:<img src=1 οnerrοr=alert(123456)>

  以上抓包修改数据Forward后,均能成功弹窗。

  通常有一些方式可以测试网站是否有正确处理特殊字符:

  ><script>alert(document.cookie)</script>
  ='><script>alert(document.cookie)</script>
  "><script>alert(document.cookie)</script>
  <script>alert(document.cookie)</script>
  <script>alert (vulnerable)</script>
  %3Cscript%3Ealert('XSS')%3C/script%3E
  <script>alert('XSS')</script>
   <img src="javascript:alert('XSS')">
  <img src="http://xxx.com/yyy.png" οnerrοr="alert('XSS')">

  安全等级 - High

  将安全等级升级为高级。

    ① 分析源码,可以看到这里使用正则表达式过滤了<script>标签,但是却忽略了img、iframe等其它危险的标签,因此name参数依旧存在存储型XSS。

    ② Burpsuite抓包,改为 <img src=1 οnerrοr=alert(12456)>,点击【Forward】。 

      ③ 依然会显示弹出框。

  安全等级 - Impossible

  将安全等级升级为不可能。

    ① 分析源码,可以看到,由于对 message 和 name 参数都使用了 htmlspecialchars() 函数进行编码,因此无法再通过 message 和 name 参数注入XSS代码。

  FortiWeb 防护

  FortiWeb可以阻止这一类的攻击。

   ① 这次我们访问192.168.1.128,也就是经过FortiWeb保护的DVWA,安全选择Low,输入一段注入代码,看看会发生什么。

    ② 访问被FortiWeb成功的阻止了。

     ③ 登录FortiWeb,选择菜单【日志和报表】-【攻击】,点击【添加过滤器】。

    ④ 选择【消息ID】。

    ⑤  选择阻止页面上显示的消息ID。

    ⑥ 显示XSS攻击被FortiWeb阻止了。如果有了FortiWeb,这样大部分因为代码产生的漏洞安全问题,就可以有效的解决了。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞塔老梅子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值