web基础漏洞-csrf
1、介绍
csrf,cross site request forgery跨站请求伪造。
- 用户登录目标域,获取cookie的登录凭证,保存到本地浏览器。不存在直接或间接token
- 攻击者基于社工,使得用户在同一浏览器下访问其所控制的网站
- 该网站伪造请求,提交到目标域,这个过程自动或强制携带本地浏览器存储的cookie
- 目标域接收请求后,只验证了cookie而未验证referer或origin,导致执行成功
- 如果伪造的请求是获取信息,返回后,攻击者控制的网页可能将其发送到攻击者的服务器
2、场景
csrf针对的是非静态的接口,比如获取信息,或者提交增删改操作。
2.1 一般请求
- 由html元素或css直接请求时,无论是否跨域,浏览器会自动携带目标域cookie
- 主要区别是form表单可以实现post方法,以及请求体部携带数据。而其它只能是get方法,url携带数据
- 用于执行增删改操作,而不能进行获取数据
<link href=''>
<img src=''>
<img lowsrc=''>
<img dynsrc=''>
<meta http-equiv='refresh' content='0; url='>
<iframe src=''></iframe>
<frame src=''>
<script src=''></script>
<bgsound src=''>
<embed src=''>
<video src=''>
<audio src=''>
<a href=''>
<table background=''>
...
<form action='' method=''></form>
css
@import ''
background:url('')
2.2 jsonp
- 有三种jsonp形式,无论是否跨域,浏览器会自动携带目标域cookie。jsonp - 挖洞404 - 博客园 (cnblogs.com)
- get请求
- 可以获取数据并转发到攻击者服务器
2.3 ajax跨域
- 设置withCredentials为true,强制携带cookie
- 可以是任意请求方法
- 服务端接收之后,即有可能处理
- 响应如果动态设置access-control-allow-origin,可以将响应的数据转发给攻击者
- 需要考虑浏览器策略
2.4 ajax转为非ajax
如果ajax请求的体部为空,或者体部是url参数形式,则可以尝试转为非ajax的请求,从而直接携带目标域cookie。
2.5 flash
了解即可。
3、漏洞防护
- 设置token,注意不要设置在cookie字段中
- cookie设置samesite属性不为None
- 严格检查referer或origin字段
- ajax,如果需要设置access-control-allow-origin字段时,严格检查
4、测试&绕过
(1)注意测试的请求必须是cookie作为登录凭证,无直接或间接token。需要检查cookie的samesite属性不为none。且必须是动态接口,需要进行登录凭证验证
(2)如果测试的请求中存在token,可以先测试该token是否有效。其次考虑对token的爆破或猜解。有时候,可以基于其它csrf先获取token。
(3)由于防护可以选择referer或origin,因此测试csrf时,必须同步测试referer和origin
- 未检查,则直接主域名测试
- 检查referer整体是否包含,篡改将当前合法的referer值作为参数拼接到referer的末尾
- 检查域名部分是否包含特定子字符串,篡改将合法的域名子字符串作为子域名
- 检查主域名以及前后.关键字符,篡改顶级域名
- 检查是否以主域名以及顶级域名结尾,篡改主域名拼接任意前缀
(4)分析
- 快速检查时,基于响应体部字符长度判断
- ajax,可以检查access-control-allow-origin字段是否改变
- 但根本上来说,还是检查请求操作的资源是否成功
5、实战经验
在过去的csrf实战中,有两个漏洞值得单独提列:
(1)测试目标基于一个域名进行登录,获取登录凭证cookie。然后获取口令,跳转到其它域名,该口令作为登录凭证然后获取到跳转域名下的登录凭证cookie。
这个过程中,可以基于csrf获取口令,从而实现账号权限控制。
(2)测试目标是购物车csrf获取相关信息,但是请求中携带间接的token,即订单编号。
这个过程中,先csrf获取到一个新的订单编号,基于该订单编号去获取购物车下的地址信息。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战