理论基础
-
CSRF漏洞介绍
跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
-
CSRF漏洞原理
攻击者通过一些技术手段欺骗用户的浏览器去访问一个用户自己曾经认证过的网站并执行一些操作(如发邮件,发消息,甚至财产操作如转账和购买商品)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞:简单的身份验证只能保证请求是发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
-
CSRF成因拓展之同源策略
1995年,同源策略由Netscape公司引入浏览器。目前,所有浏览器都实行这个策略。最初,他的含义是指:A网页设置的Cookie,B网页不能打开,除非这两个网页同源。
所谓同源指的是三个相同:协议相同、域名相同、端口相同。
- CSRF攻击流程
- 用户正常登录web服务,并一直保持在线。
- 服务器返回用户凭证Session,并将其保存在Cookie中。
- 攻击者生成payload,并放置在用户可访问的地方。
- 攻击者诱导用户点击在第3步放置的链接,此时用户一直在线,且是用同一浏览器打开(保证Cookie未失效)。
- 用户点击恶意链接。
- 恶意链接向服务器请求,由于用户Cookie未失效,就携带用户Cookie访问服务器。
- 服务器收到请求,此时用户Cookie未失效,并判定为用户发起的正常请求,并做出响应。
-
CSRF漏洞危害
非法操作、数据泄露、拒绝服务等。
- CSRF与XSS的区别
-
攻击方式不同:
- CSRF攻击利用Web应用程序对请求的不完全验证,攻击者通过欺骗用户在已经登录的Web应用程序中执行恶意操作。
- 而XSS攻击则是通过在Web页面中注入恶意脚本来实现攻击,当用户浏览受到攻击的页面时,恶意脚本会被执行,从而盗取用户的信息或执行其他恶意操作。
-
目标不同:
- CSRF攻击的目标是利用用户的身份执行恶意操作,例如,在用户不知情的情况下,利用用户的账户进行转账或修改密码等操作。
- 而XSS攻击的目标则是窃取用户的信息,例如,窃取用户的cookie、用户名和密码等敏感信息。
-
防御方式不同:
-
CSRF攻击的防御需要验证请求的来源和使用随机令牌等方法进行身份验证,避免未经授权的操作。
-
而XSS攻击的防御需要对输入的数据进行过滤和编码,避免恶意脚本的注入。
-
-
- CSRF漏洞防御
- 添加校验Token或CSRF Token
- 检查Referer字段
- 添加其他自定义字段作为前端二次验证,例如时间戳
- 令牌同步模式(Synchronizer token pattern)
- 使用验证码或其他二次验证方式
- 使用SameSite Cookie
实践学习
漏洞环境以Pilot靶场为例:下载地址与部署教程
-
进入漏洞页面,登录
admin
账号: -
抓包,点击确认修改按钮:
-
发现是GET请求;删除请求头中
Referer和Origin
字段,不影响发包;且认证信息通过Cookie存储,而不是Token,很容易造成GET型的CSRF。 -
在Burp中右键请求包,选择相关工具中的生产CSRF POC,修改参数
phone
的值为114514,点击在浏览器中测试: -
复制链接后,在第一步登录admin后的浏览器页面中打开,发现修改成功:
-
回到漏洞页面,重新登录后,发现数据已经被修改: