web基础漏洞-csrf

1、定义

csrf,cross script request forgery跨站请求伪造,攻击者借用用户的登录凭证,伪造请求提交到凭证对应网站,服务端未经过请求来源检查而默认信任,造成危害。

具体的,(1)受害者用户在登录目标网站A后,(2)攻击者基于社工手段使其在同主机同浏览器环境下,访问攻击者控制的网站B,(3)网站B的页面伪造请求通过该浏览器提交到网站A,同时携带对网站A保存在浏览器中的cookie登录凭证,(4)使得网站A的服务端接收后认为是用户自身发送,且是登录后经过身份验证,(5)从而造成危害,数据库增删改或文件操作,或数据查询返回。

  • 登录后测试
  • cookie或session作为登录凭证
  • 没有直接或间接的token,是否为一次性token不影响。(如果token服务端不检查,或者可以从其它处获取也不影响)
  • 登录凭证cookie没有samesite属性设置,或者说设置的值为None
  • 如果登录凭证cookie为secure属性,设置时要求必须在https协议中传送
  • 未严格检查referer和origin字段

2、分类

2.1 html元素和css

  • html元素发出请求,或者css发出请求,默认自动携带目标域cookie,可以跨域
  • 危害只能是提交请求后,服务端进行增删改操作,对于服务端返回,该类型csrf无法获取并转发给攻击者
  • 常见的场景是
    • 取消或添加关注、收藏、点赞
    • 对账号信息进行编辑,比如修改昵称,修改登录或联系的手机号、邮箱,修改密码
    • 增删改评论、文章或其它数据
    • 上传图片或其它资源
  • 一般是get请求,表单form可以是get或post请求
  • url、cookie或请求体部中携带参数,指向资源的编号。对于账号信息这类用户唯一的资源,可以不用资源编号
<link href="">
<img src="">
<img lowsrc="">
<img dynsrc="">
<meta http-equiv="refresh" content="0;url=">
<iframe src="">
<frame src="">
<script src="">
<bgsound src="">
<embed src="">
<video src="">
<audio src="">
<a href="">
<table background="">
...

<!-- css样式中-->
@import ""
background:url("")
...

还可以通过js动态生成的标签对象或css对象发起的get请,而发出post请求只能通过form提交方式。

2.2 json hijacking

json劫持 - 挖洞404 - 博客园 (cnblogs.com)

2.3 csrf与ajax

 https://www.cnblogs.com/wd404/p/17481789.html

2.4 flash csrf

flash同样遵循同源策略,发起的csrf是基于actionscript脚本,可以

  • 跨域获取隐私数据
  • 跨域提交数据操作

3、防护

(1)refresh和origin

对于开发来说,这两个字段都可以作为csrf检查,选一即可。

而对测试来说,则需要对两个字段都同步进行测试,即hostname相同。

(2)token

使用token作为登录凭证,可以有效防止csrf。但需要注意,不要将token保存到cookie中,否则无效

(3)cookie的samesite

设置cookie的samesite属性不为None,而是Strict或Lax,可以有效防止csrf

4、发现

(1)登录凭证

存在cookie字段,且登录凭证cookie是必要的,samesite为None。没有直接或间接的token值

  • 重放请求,根据响应字符长度测试是否包含一次性token
  • 根据响应字符长度是否变化,二分法删除cookie测试。(一般,在同一站点下或同一目录下的必要cookie一致)

(2)referer和origin测试

  • 样本,referer:http.//www.xx.com/xxx
  • 测试origin: http://www.xx.com.abcxx.com
  • 测试referer: http://www.xx.com.abcxx.com/xxx?referer=http.//www.xx.com/xxx

对于cors,主要测试响应头部是否包含access-control-allow-origin和Access-Control-Allow-Credentials字段,以及access-control-allow-origin是否包括origin的hostname字段

对于一般csrf,主要测试响应体部的字符长度是否发生变化。

当然,以上两者并不完全准确,进一步的需要由人工分析响应内容,尤其是对于增删改操作来说,响应并不能绝对反应是否执行成功

 

posted @ 2023-10-21 19:23  挖洞404  阅读(9)  评论(0编辑  收藏  举报