CSRF学习报告

0x01

CSRF攻击方式

一:HTML csrf攻击:

  1. 利用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="…">....................
  1. 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 是不是白名单合法的就可以进行防御。
  1. Referer过滤不严谨以及空Rerferer
    空情形:通过跨协议调用js时发送到http请求里为空referer eg:



    可使用<iframe>调用js伪协议来实现空referer

  2. 随机token:某些token可以暴力循环破解
  • 更多的是组合攻击 callback可定义导致安全问题
  1. 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蠕虫

基于它的传播性,需要获取每个用户的请求参数数据

  1. 利用服务端脚本
  2. json 劫持
    啊这个我还不知道怎么复现,还得学习学习=-=

0x05

Flash与Actionscript一点点问题

有一个通常在网站根目录存在的文件crossdomain.xml。
该配置文件中的“allow-access-from domain”用来配置哪些域的Flash请求可以访问本域的资源。如果该项值为“*”,则表示任何与的Flash都可以访问。当存在这样的配置时,攻击者可以利用ActionScript脚本轻松突破同源策略的限制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://www.91ri.org/tag/fuzz-bug 通常情况下,有三种方法被广泛用来防御CSRF攻击...
    jdyzm阅读 4,231评论 0 5
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,816评论 1 45
  • CSRF & CORS 下面转的两篇文章分别说明了以下两个概念和一些解决方法: 1. CSRF - Cross-S...
    Elvis_zhou阅读 749评论 0 4
  • 百度百科中的CSRF CSRF(Cross-site request forgery)跨站请求伪造,也被称为“On...
    Smi1e_阅读 3,756评论 1 9
  • CSRF定义 CSRF,即(Cross-site request forgery), 中文名为跨站请求伪造。是一种...
    Yixi_Li阅读 481评论 0 1