0基础入门代码审计-4 XSS

admin 2024年8月6日21:02:45评论20 views字数 1313阅读4分22秒阅读模式

0x01 漏洞描述

跨站脚本攻击Cross Site Script是一种将恶意JavaScript代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。

跨站脚本攻击有以下攻击形式:

1、反射型跨站脚本攻击

用户发出一个带有XSS攻击的请求,服务器端接受请求后进行处理并把带有XSS的代码发送给了浏览器,浏览器解析带有XSS的代码,这就造成了XSS攻击,整个过程如同一次反射,因此命名反射型XSS

2、存储型跨站脚本攻击

攻击者利用应用程序提供的录入或修改数据的功能,将数据存储到服务器或用户cookie中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本,所有浏览者都会受到攻击。

3、DOM跨站脚本攻击

由于HTML页面中,定义了一段JS,根据用户的输入,显示一段HTML代码,攻击者可以在输入时,插入一段恶意脚本,最终展示时,会执行恶意脚本。

DOM跨站脚本攻击和以上两个跨站脚本攻击的区别是,DOM跨站是纯页面脚本的输出,只有规范使用JavaScript,才可以防御。

0x02 审计要点

“用户可控数据”可能来源于http请求、数据库、Http Headercookie等,当明确用户可控数据,可以输出至前端页面时,判断代码中是否存在以下防护逻辑,若均不符合,则存在问题的风险递增。

1、前端是否有XSS防护框架,如AngularjsRecatvue.js等,一般这种防护框架在项目设计初期就要考虑到了,上线后再进行改动,不切合实际情况。

2、用户输入数据时是否存在全局参数过滤器?过滤规则是否符合要求?是否存在需过滤和不需过滤两种输出,页面是否控制恰当?

3、输出内容在前端时是否进行恰当的编码(HTMLJS等)?

0x03 典型漏洞代码

0基础入门代码审计-4 XSS

通过上面的代码可以轻松看出,用户输入的变量name没有经过任何处理直接输出到了页面上,如果在name变量的输入框中输入<script>alert(/xss/)</script>输出代码就变成了

echo '<pre>Hello ' . <script>alert(/xss/)</script> . '</pre>';

这样浏览器上就会弹出一个内容为/xss/的窗口。

0x04 防御方案

1、黑名单

0基础入门代码审计-4 XSS

黑名单是最低效的防御方案。这段代码中采用了str_replace函数将变量name中的<script>标签置换为空。在这里我们有两种绕过方式

1)采用大小写绕过<ScRiPt>或者采用双写绕过<scr<script>ipt>

2)采用除<script>标签外的其他标签,例如<img>标签等实现XSS攻击。

2、白名单

白名单就是一种相对可靠一些的过滤方式,如果匹配到规则的事件直接进行拦截,而不采用替换为空的方式。

0基础入门代码审计-4 XSS

3、特殊字符转码为HTML实体

0基础入门代码审计-4 XSS

在这个案例中,采用了htmlspecialchars函数,把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。但在使用htmlspecial函数需要格外注意!该函数的用法如下:

0基础入门代码审计-4 XSS

第二个参数flags编码规则如下:

0基础入门代码审计-4 XSS

注意!flags参数默认状态值编码双引号!

原文始发于微信公众号(反入侵实验室):0基础入门代码审计-4 XSS

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月6日21:02:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   0基础入门代码审计-4 XSShttps://cn-sec.com/archives/2006330.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息