CSRF漏洞原理攻击与防御

CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。

CSRF运用最多的地方就是一些钓鱼网站,目的可以是为了获取某网站的管理员权限或者一些危险请求(比如说银行卡转账),burpsuite可以将抓的包进行更改,生成为CSRF PoC,作用是用户一访问html或者其他网址(如果是php可以重定向),受害者就会重复发送一个请求包

拿我博客的注册页面为例

(超硬核打码)

生成的CSRF就长这样

将代码保存到html打开就可以执行

可以看见用户组没有叫ssss的用户

点击之后就有了

因为受害者浏览器记录了登录的账号,有了账号的cookie,此html必须由受害者执行并且使用的是与注册网站相同的浏览器,所以相应的应用场景为将修改后的html文件放到钓鱼网站目录,用户访问后会自动执行SSRF,也就是自动创建受害者网站的管理员账户,因为各个平台的发包规则不同,有的平台SSRF PoC可以一直用,有的会对注册信息进行加密,这里只谈无防护的CSRF利用

防御方法

检查Referer字段

Referer 是 HTTP 协议中的一个请求头部,它记录了请求来源的信息(URL 地址)。当用户的浏览器访问一个页面时,请求头会包含 Referer 字段,告诉服务器用户是从哪个网页跳转过来的。这个字段在身份验证、防盗链等应用场景中非常关键。如果是正常创建用户那么Referer肯定是本站,如果是钓鱼网站则不通过

可以通过后端的Referer来判断该数据包

Referer可以分为全部对比额匹配对比,全部对比意思是Referer必须是该网站,逻辑上没有漏洞,条件对比是只有检测到有网站这个字段就可以绕过,可以将源网站作为钓鱼网站后的假目录进行绕过比如

Referer: http://hack.com/8.9.10.11/1.html

一般情况下条件对比也无法利用,因为如果是域名访问的化目标必须是http://xxxx.com/

//无法作为目录所以检测失败

当然有些逻辑错误,即使修改请求头使Referer留空也能正常绕过

检查Referer字段并不是完全有效,攻击者可以通过XSS跨站和上传html文件使其Referer来源来自受害者的网站,直接无视检测

CsrfToken

Token是开发者的防护手段,还拿创建用户为例,创建用户时POST包里不仅包含这账号密码等信息还包含一个Token,它相当于给当前POST包打了一个标签,这个标签相当于一个检测机制,只有Token发送的Token和生成POST包的一摸一样才能CSRF检测通过。

 如:_wpnonce_create-user=9726b96c11  

但是Token几乎是无时无刻更新的,刷新表单,间隔一定时间,不同用户/浏览器访问都会刷新当前Token,攻击者只能得到当前的Token也就无法通过验证。现在大部分网站都在用这种验证方式,能利用这种漏洞多半是逻辑写的不严谨

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇