0x01
CSRF攻击方式
一:HTML csrf攻击:
- 利用HTML元素发出GET请求
带src属性的html标签都可以跨域发起GET请求
- <link href="…">
- <img src="…">
- <iframe src="…">
- <meta http-equiv="refresh" content="0; url=…">
- <script src="…">
- <video src="…">
- <audio src="…">
- <a href="…">
- <table background="…">....................
- POST请求攻击
需用表单提交方式,标签可由js动态生成
<script>
new Image().src = 'http://www.goal.com/…';
</script>
二. JSON Hijacking攻击
JSONP:是Web前端的JavaScript跨域获取数据的一种方式。
基本原理是利用了 HTML 里 <script></script> 元素标签,远程调用 JSON 文件来实现数据传递。如要在 a.com 域下获取存在 b.com 的 JSON 数据
当用户通过身份认证之后,前端会通过jsonp的方式从服务端获取该用户的隐私数据,然后在前端进行一些处理,如个性化显示等,这个jsonp的调用接口如果没有做相应的防护,就容易受到JSON劫持攻击
条件:这个JSON劫持漏洞需要你暴露出JSON服务(指JSON服务地址被攻击者知道)并且进行如下操作:
- 返回敏感的数据
- 返回一个JSON数组
- 响应一个GET请求
- 发送请求的浏览器启用了JavaScript(很有可能)
- 发送请求的浏览器支持defineSetter方法
关于某些情形下的绕过
-
有种防御方案是验证json文件调用的来(referer),主要利用了 <script> 远程加载 JSON 文件时会发送 Referer ,在网站输出 JSON 数据时判断 Referer 是不是白名单合法的就可以进行防御。
-
Referer过滤不严谨以及空Rerferer
空情形:通过跨协议调用js时发送到http请求里为空referer eg:
可使用<iframe>调用js伪协议来实现空referer
- 随机token:某些token可以暴力循环破解
-
更多的是组合攻击 callback可定义导致安全问题
-
Content-Type 与xss漏洞
callback未进行过滤
直接就能导致xss漏洞
0x02
实例:
一:利用html元素发出get请求
以DVWA(medium)为例:
在用户登路状态下可更改密码,进行修改操作时还检测了referer参数,抓包在referer参数中可发现ip地址(这里是本地),在构造csrf网页时所包含的referer信息包含被攻击ip
构造网页
引诱自己访问=-=便可成功修改掉密码
二:复现:POST(phpok4.2.100添加管理员)
本地部署了phpok后进入后台可查看编辑管理员:
编辑网页
在管理员登录的状态下诱导其访问该页面
成功添加一名管理员
之后使用添加的系统管理员身份登录后台,风格管理中添加模板文件
抓包修改后缀为.php上传成功,并且页面显示了文件夹路径
在后台找到文件并编辑成木马文件即可getshell
0x03
关于防御
- 验证Referer;
有些请求不需要referer
- 使用验证码;
影响用户体验
- 使用CSRF token;
随机性不够好或通过各种方式泄露,此外,在大型的服务中需要一台token生成及校验的专用服务器,需要更改所有表单添加的字段,有时效性的问题。
- 限制Session生命周期。
缓解csrf。只是降低csrf攻击成功率
- 一个看不懂的新方法。
当表单提交时,用JavaScript在本域添加一个临时的Cookie字段,并将过期时间设为1秒之后在提交,服务端校验有这个字段即放行,没有则认为是CSRF攻击。
token之所以可以防御CSRF,是因为攻击者无法使用JavaScript获取外域页面中的token值,必须要遵守同源策略;而临时Cookie的原理是:Cookie只能在父域和子域之间设置,也遵守同源策略,攻击者无法设置该Cookie
eg:复现的简单demo:
前端test.html页面中有三个按钮:第一个是正常的表单提交;第二个是添加临时Cookie后提交表单;第三个是以hook submit事件来添加临时Cookie并提交
服务端
执行normal看到只有xampp设置的一个cookie
而执行后两个,则可看到添加的临时cookie
但由于这种防御策略还没有被大规模使用,所以无法确定其是否真实有效。所以我也不去研究啦
JSON HIJACKING的防御:
1、限制 Referer 、部署一次性 Token 等。
2、按照JSON 格式标准输出 Content-Type 及编码( Content-Type : application/json; charset=utf-8 )。
3、过滤 callback 函数名及 JSON 里数据的输出。
4、限制对 JSONP 输出 callback 函数名的长度
5、在 Callback 输出之前加入其他字符(如:/**/、回车换行)这样不影响 JSON 文件加载,又能一定程度预防其他文件格式的输出。
以及 Gmail 早起使用 AJAX 的方式获取 JSON ,听过在输出 JSON 之前加入 while(1) ;这样的代码来防止 JS 远程调用。
0x04
CSRF蠕虫
基于它的传播性,需要获取每个用户的请求参数数据
- 利用服务端脚本
- json 劫持
啊这个我还不知道怎么复现,还得学习学习=-=
0x05
Flash与Actionscript一点点问题
有一个通常在网站根目录存在的文件crossdomain.xml。
该配置文件中的“allow-access-from domain”用来配置哪些域的Flash请求可以访问本域的资源。如果该项值为“*”,则表示任何与的Flash都可以访问。当存在这样的配置时,攻击者可以利用ActionScript脚本轻松突破同源策略的限制。