第四章-CSRF

第四章-CSRF

CSRF
Cross Site Request Forgery
跨站请求伪造

4-1. 概述

CSRF两大关键点:

跨站点的请求

请求是伪造的

攻击样例关键点:

跨域发出了一个GET请求

可以无JavaScript参与

请求是身份认证后的

4-2.类型

HTML CSRF攻击

** CRSF请求由HTML元素发出**
- 能设置src/href等链接地址的标签都可以发起一个GET请求。
- 可通过JavaScript生成的标签对象或CSS对象发起GET请求。
- 发起POST请求只能通过form提交的方式。

JSON HiJacking攻击

攻击过程是CSRF,不过是对AJAX响应中最常见的JSON数据类型进行的劫持攻击。

JSON有两种格式
  • 字典格式
    {
    "id": 1,
    "name": "foo",
    "email": "foo@gmail.com
    }
  • 列表格式
    ["foo","xoo","coo"]
  • JSON数据如果直接以字典形式返回直接在浏览器中显示会报错,原因是浏览器以为"{" 开头的脚本应当是一串代码块。所以JSON数据一般如下方式处理:
    eval("("+JSON_DATA+")"); //前后加上圆括号

  • 以列表形式返回的JSON数据是一个Array对象
    注:曾经可通过劫持Array数据来进行JSON HiJacking攻击,如今此攻击失效。

Flash CSRF攻击

两要点:
- 跨域获取隐私数据

  • 跨域提交数据操作
    跨域发起的POST/GET请求对浏览器来说合法,于Flash亦同。
<!--HTML CSRF形式进行国内某微博发消息CSRF漏洞利用-->
<form action="http://t.xxx.com/article/updatetweet" mothod="post">
<input type="hidden" name="status" value="html_csrf_here."/>
</form>
<script>document.forms[0].submit();</script>

//Flash CSRF实现
import flash.net.URLRequest;
function post(msg){
    var url = new URLRequest("http://t.xxx.com/article/updatetweet");
    var _v = new URLVariables();
    _v = "status="+msg;
    url.method = "POST";//POST方式提交
    url.data = _v;
    sendToURL(url);//发送
}
post('flash_csrf_here');

4-3. 危害

  • 篡改目标网站上的用户数据
  • 盗取用户隐私数据
  • 作为其他攻击向量的辅助攻击手法
  • 传播CSRF蠕虫
harmoc

发表评论

电子邮件地址不会被公开。 必填项已用*标注