我们只熟悉写入型csrf,像修改用户信息……今天介绍一下读取型CSRF,使用DoraBox这个靶场来演示一波!
JSONP劫持
现在所有支持JavaScript的浏览器都使用同源策略,才诞生了JSONP(JSON with padding),远程调用json文件来实现数据传递的技术,它的特点是可以跨域读取数据。
以DoraBox中JSONP劫持模块为例子:
观察代码:
如果callback为空,则输出json格式的info;
如果callback值不为空,则对这个值做一个过滤后输出json格式的info。
构造如下jsonp.html:
打开链接,获取到json值,即获取到用户敏感信息。
修复建议
对refer进行限制;
打乱响应主体内容;
使用token;
CORS跨域资源读取
CORS允许浏览器向跨域服务器发出XmlHttpRequest请求,CORS与JSONP的区别:是JSONP的升级版,JSONP只能通过get方式请求,CORS支持get和post请求。
CORS跨域原理:向header中注入Access-Control-Allow-Origin服务端过判断请求头中的参数是否被允许的域来决定请求源是否有权限获取数据。
以DoraBox中CORS跨域资源读取为例子:
查看响应头:
*表示所有的请求源的所有形式的请求,都被允许访问数据,这样也就造成了一个跨域读取敏感信息的漏洞。
构造如下cors.html,创建XMLHttpRequest对象为xhr,通过ajax的onreadystatechange判断请求状态,如果请求已完成,且相应已就绪,则弹出返回文本。
访问cors.html,触发cors漏洞,如下:
修复建议:
加强对access-control-allow-orign的控制;
Flash跨域劫持
假设a.com有一个SWF文件,这个文件是想要获取 b.com 的 userinfo 的返回响应主体,SWF首先会看在 b.com 的服务器目录下有没有 crossdomain.xml 文件,如果没有就会访问不成功,如果有 crossdomain.xml ,则会看crossdomain.xml 文件的内容里面是否设置了允许 a.com 域访问,如果设置允许了,那么 a.com 的SWF文件就可以成功获取到内容。所以要使Flash可以跨域传输数据。
其中,b.com下的crossdomain.xml文件内容如果是如下的,那么就存在Flash跨域问题。
修复建议:
加强对access-access-from的控制;
到这里,大家是不是对读取型CSRF(JSONP劫持、CORS跨域资源读取、Flash跨域劫持)有更深的了解呢?请各位师傅多多指教!