Csrf漏洞简介

Csrf

简介

  • Cross-site request forgery)跨站请求伪造:也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。通过伪装来自受信任用户的请求来利用受信任的网站。

  • 在跨站请求伪造(CSRF)攻击里面,攻击者通过用户的浏览器来注入额外的网络请求,来破坏一个网站会话的完整性。而浏览器的安全策略是允许当前页面发送到任何地址的请求,因此也就意味着当用户在浏览他/她无法控制的资源时,攻击者可以控制页面的内容来控制浏览器发送它精心构造的请求。

  • 说白一点儿就是可以劫持其他用户进行一些请求,但与XSS不同,XSS是利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。举个最简单的例子,比如直接请求‘http://a.com/del.php?id=1’可以删除id为1的账号,但只有管理员有这个权限,于是,有人在其他某个网站页面加入‘’再把这个页面发送给管理员,只要管理员打开这个页面,浏览器就会利用当前登录的管理员的权限发出这个请求,就能删掉账户。

原因

  • csrf漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf脚本或包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)。这个操作不是用户真正想要执行的。

利用条件

  • 了解站点
  • 具有当前cookie
  • 目标站点没有对用户第二授权

CSRF 类型

按请求类型,可分为 GET 型和 POST 型。

按攻击方式,可分为 HTML CSRF、JSON HiJacking、Flash CSRF 等。

HTML CSRF

利用 HTML 元素发出 CSRF 请求,这是最常见的 CSRF 攻击。

HTML 中能设置 src/href 等链接地址的标签都可以发起一个 GET 请求,如:

<link href="">
<img src="">
<img lowsrc="">
<img dynsrc="">
<meta http-equiv="refresh" content="0; url=">
<iframe src="">
<frame src="">
<script src=""></script>
<bgsound src=""></bgsound>
<embed src=""></bgsound>
<video src=""></video>
<audio src=""></audio>
<a href=""></a>
<table background=""></table>
......

还有 CSS 样式中的:

@import ""
background:url("")
......

也可使用表单来对 POST 型的请求进行伪造。

<form action="http://www.a.com/register" id="register" method="post">
  <input type=text name="username" value="" />
  <input type=password name="password" value="" />
</form>
<script>
  var f = document.getElementById("register");
  f.inputs[0].value = "test";
  f.inputs[1].value = "passwd";
  f.submit();
</script>
Flash CSRF

Flash 也有各种方式可以发起网络请求,包括 POST。

import flash.net.URLRequest;
import flash.system.Security;
var url = new URLRequest("http://target/page");
var param = new URLVariables();
param = "test=123";
url.method = "POST";
url.data = param;
sendToURL(url);
stop();

Flash 中还可以使用 getURLloadVars 等方式发起请求。

req = new LoadVars();
req.addRequestHeader("foo", "bar");
req.send("http://target/page?v1=123&v2=222", "_blank", "GET");

浏览器的cookie机制

  • 分为持久性和临时cookie,区别在于持久性发送时制定了时效,即Expire字段

示例

  • 搭建好环境后可以使用burp来构造HTML文件

检测

手工检测
  • CSRF只能通过用户的正规操作进行攻击
  1. 先检测比较敏感的功能如修改密码,发表留言,转账等
  2. 编写CSRF POC 构造HTML去实验
工具检测
  • CSRFTester

防御

  1. 二次确认
  • 类似于二次验证码等
  1. Token验证
  • 通常在cookie中存储
  • 详细步骤如下
    1. 每次登陆随机生成一段字符串,并存储于Session中
    2. 在敏感操作中加入隐藏标签,value即为Session中保存的字符串
    3. 提交请求后,对比token值
    4. 更新token值

注意

  • 测试CSRF的时候需要考虑浏览器问题,每一个浏览器的cookie机制是不完全相同的
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值