CSRF漏洞原理及利用
文章目录
- 一、同源策略
- 1.应用
- 2. 同源的比较
- 二、跨站请求伪造
- 1.漏洞成因
- 2. 漏洞危害
- 3. 攻击流程
- 4. CSRF三要素
- 5.漏洞类型
- (1)GET型CSRF
- (2)POST型CSRF
- 6.漏洞修复
- 7.XSS与CSRF组合攻击
一、同源策略
同源策略是浏览器的核心安全机制,主要限制不同源的文档或脚本对当前文档的读取、修改等操作,以防止恶意网站窃取数据(如Cookie、LocalStorage)或执行未授权操作(如表单提交、DOM操作)。
1.应用
常见应用场景:限制跨域AJAX请求、阻止跨域访问DOM元素、控制跨域Cookie共享等。
目的:隔离不同源的内容,保护用户数据安全和网站正常运行。
2. 同源的比较
“同源”指两个URL的协议、域名、端口三者完全相同,任一不同则为“不同源”。
示例(以http://example.com:80/path
为基准):
- 同源:
http://example.com:80/path2
(协议、域名、端口均相同) - 不同源:
https://example.com:80/path
(协议不同:http vs https)http://sub.example.com:80/path
(域名不同:主域 vs 子域)http://example.com:8080/path
(端口不同:80 vs 8080)
二、跨站请求伪造
跨站请求伪造(CSRF)是一种利用用户已认证身份发起非预期操作的攻击。攻击者诱导用户在已登录目标网站的情况下,访问包含恶意代码的页面或点击链接,使浏览器在用户不知情时,以其身份向目标网站发送伪造请求(如转账、修改信息等),利用用户的登录状态绕过验证,完成未授权操作,危害用户数据安全或财产安全。
1.漏洞成因
CSRF漏洞的核心成因是目标网站对请求的来源合法性缺乏有效验证,仅依赖用户的登录状态(如Cookie)来确认请求权限。
- 浏览器在发送请求时,会自动携带目标网站的Cookie(即使请求来自其他域名),导致网站无法区分请求是用户主动发起,还是第三方恶意诱导。
- 若网站的关键操作(如转账、修改信息)未验证请求的真实来源(如Referer、CSRF Token等),攻击者即可利用这一特性伪造请求。
2. 漏洞危害
- 用户权限滥用:攻击者以用户身份执行非预期操作,如转账、修改密码、绑定恶意手机号、发布不良内容等。
- 数据安全风险:可能导致用户个人信息泄露、账号被盗用,甚至财产损失(如金融类网站)。
- 网站信誉受损:用户因非自身操作遭受损失后,可能对网站的安全性产生质疑,影响平台公信力。
3. 攻击流程
- 用户登录目标网站:用户成功登录A网站(如银行网站),浏览器保存A网站的登录Cookie。
- 攻击者诱导操作:用户在未退出A网站的情况下,被诱导访问攻击者控制的恶意网站B(或点击包含恶意代码的链接)。
- 发送伪造请求:恶意网站B向A网站发送一个伪造的请求(如转账请求),浏览器自动携带用户在A网站的登录Cookie。
- 目标网站执行操作:A网站因验证了用户的登录状态(Cookie有效),误认为是用户主动操作,从而执行该伪造请求。
4. CSRF三要素
- 操作
你想让受害者做什么,转账、修改密码等。 - 认证
基于cookie的会话处理,因为要携带Cookie进行访问,其他认证字段是无法携带的,所以需要那个应用程序仅通过cookie进行会话处理。 - 没有不可预测的参数
因为要事先构造请求,所以不能含有不可预测的参数,比如密码等。
5.漏洞类型
根据请求的方式不同,可以分为GET型CSRF和POST型CSRF。
(1)GET型CSRF
- 受害者A(admin/password)登录了网站,网站里有修改密码的功能。
- 攻击者B(smithy/passwrod)也登录网站获取网站里修改密码的参数,因为同样的网站同等级的用户里面的功能是一样的。
- 攻击者B将构造好的链接发送给受害者A(如果网站存在存储型的XSS漏洞,还可以将链接插入进去),受害者A在没有退出网站的情况下点击了链接,则密码无意中被修改了。
(2)POST型CSRF
- 攻击者视角:
- 登陆成功后,进入个人中心编辑资料。
- 找到有修改操作的数据包,抓包并构造恶意请求。
构造好之后诱使受害者访问该文件。
- 受害者视角:
受害者也在网站上有账号(没有的话注册一个),然后受害者在登录网站的情况下在同一个浏览器打开该文件,受害者的个人信息就被修改了。
6.漏洞修复
-
验证请求来源(Referer检查)。由于CSRF攻击的请求实际来自攻击者控制的恶意网站(如B网站),其请求头中的Referer字段会显示该恶意网站地址。通过设置合法来源的白名单,服务器可校验Referer是否在白名单内,若不在则判定为可疑请求并拒绝,以此阻断来自第三方的伪造操作。
-
添加Token验证机制。CSRF攻击能成功,核心在于利用了浏览器自动携带的用户登录Cookie。为突破这种“仅靠Cookie认证”的缺陷,可在请求中额外加入一个随机生成的Token(以参数形式传递),并在服务器端对应验证。服务器通过拦截器检查请求中是否包含有效Token,若缺失或Token不匹配,则判定为可能的CSRF攻击并拒绝处理,从而通过“Cookie+Token”的双重验证确保请求合法性。
7.XSS与CSRF组合攻击
XSS 与 CSRF 的组合攻击,本质是利用两种攻击的互补性突破防御限制,让攻击更隐蔽、更高效。具体来说,两者的特性能够互相弥补对方的短板,形成 “1+1>2” 的攻击效果。
- 攻击者(admin)在存在xss漏洞的A网站上注入恶意代码。
- 当用户点击之后,进入攻击者提前写好的网站B,触发网站B中的恶意代码。
<img src=“http://网站A/test.php?password_new=123123&password_conf=123123&Change=Change#”/>
这时候由于用户带有A网站的认证信息,B网站利用用户此时的请求,篡改GET或POST表单内的参数,在用户不知情的情况下请求A网站,完成修改密码等恶意操作。