安全小课堂第三期 (202012) - CSRF

1. CSRF 基本概念

CSRF(Cross-site request forgery)跨站请求伪造,黑客利用已经登录的用户,诱使其访问或者登录某个早已构造好的恶意链接或者页面,然后在用户毫不知情的情况下,以用户的名义完成了非用户本意的非法操作。这种攻击我们也被称为 "One Click Attack" 或者 Session Riding,通常缩写为 CSRF 或者 XSRF,是一种对网站的恶意利用行为。与 XSS 攻击相比,CSRF 攻击往往不大流行 (因此对其进行防范的资源也相当稀少) 和难以防范,所以被认为比 XSS 更具危险性。

2. CSRF 理解

其实一个CSRF漏洞攻击的实现,其需要由"三个部分"来构成。 

(1) 有一个无需后台验证的前台或后台数据修改或新增请求的漏洞存在; 

(2) 伪装数据操作请求的恶意链接或者页面; 

(3) 诱使用户主动访问或登录恶意链接,触发非法操作;

2.1 第一部分:漏洞的存在

如果需要 CSRF 攻击能够成功,首先就需要目标站点或系统存在一个可以进行数据修改或者新增操作,且此操作被提交后台后的过程中,其未提供任何身份识别或校验的参数。后台只要收到请求,就立即下发数据修改或新增的操作; 
以上漏洞情况的存在,出现比较多的场景有用户密码的修改、购物地址的修改或后台管理账户的新增等等操作过程中。

2.2 第二部分:漏洞利用的伪装

CSRF 漏洞存在了,如果需要真正的被利用,还需要对 "修改或新增" 数据操作请求的伪装,此时恶意攻击者只要将伪装好的“数据修改或新增”的请求发送给被攻击者,或者通过社工的方式诱使被攻击者在其 cookie 还生效的情况下点击了此请求链接,即可触发 csrf 漏洞,成功修改或新增当前用户的数据信息,如修改当前用户的密码、又或者是当前用户为后台管理员,触发漏洞后新增了一个后台管理员。

2.3 第三部分:用户非本意的操作

当前用户在不知情的情况下,访问了黑客恶意构造的页面或在链接,即在非本意的情况下完成黑客想完成的 "非法操作",实现了对当前用户个人信息的恶意操作。

2.4 CSRF 漏洞理解小结

攻击者利用此类漏洞伪装了一个链接或者 html 页面,诱使被攻击者在登录的情况下 ( 即当前 cookie 有效的情况下)点击了此伪装请求,随后在用户不知情的情况下完成了对当前用户数据的修改或者新增操作,而被修改的信息可能是用户的密码、关键信息又或者新增后台管理员等。

3. CSRF 场景

角色信息修改之 CSRF 漏洞场景

1. 新建角色 test
安全小课堂第三期 (202012) - CSRF

2. 修改角色信息,并用 burpsuite 工具拿到修改角色信息请求修改角色参数
安全小课堂第三期 (202012) - CSRF

3. 修改角色名称 test001,重新生成请求连接,并执行请求
安全小课堂第三期 (202012) - CSRF
安全小课堂第三期 (202012) - CSRF
安全小课堂第三期 (202012) - CSRF
安全小课堂第三期 (202012) - CSRF

4. 角色名称修改成功
安全小课堂第三期 (202012) - CSRF

4. 漏洞修复方案

(1)来源校验
使用http请求头中referer来源,对客户端源进行身份校验,此方法早期使用比较多,但是仍然容易被绕过,所以这里并不建议使用。

(2)用户token 校验 
添加基于当前用户身份的有效tokens随机验证机制,即在向后端提交数据操作请求时,添加基于当前用户的随机token校验值,此种校验方法当前使用比较多;

(3)当前用户密码验证 
在修改关键信息时,要求当前用户输入其自身的密码,以验证当前用户身份的真伪,防止未授权的恶意操作;

(4)添加验证机制 
在请求数据的提交前,需填写验证码信息提交,以增加对用户来源的有效验证,防止恶意未授权的操作产生。