1、什么是csrf
- CSRF(Cross Site Request Forgery),中文名称:跨站请求伪造,缩写为CSRF
- 攻击者盗用了你的身份,以你的名义发送恶意请求
- CSRF是跨站请求伪造,不攻击网站服务器,而是冒充用户在站内的正常操作。
- 通常由于服务端没有对请求头做严格过滤引起的。
- CSRF会造成密码重置,用户伪造等问题,可能引发严重后果。
很常见但是危害不算很大,基本很难getshell,条件苛刻,但是可以用来添加管理员
伪造URL后发给管理员或目标,使其在cookie的有效时间完成点击
该漏洞使用起来过于复杂,首先要知道目标模块请求包具体参数,其次保证对方cookie未过期,还要保证对方能够点击
CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏。
2、csrf原理
怎样才能实现CSRF呢?
-
天时:www.xxx.com这个网站在用户修改个人的信息时没有过多的校验,导致这个请求容易被伪造;
因此,我们判断一个网站是否存在CSRF漏洞,其实就是判断其对关键信息(比如密码等敏感信息)的操作(增删改)是否容易被伪造。
-
地利:小绿点击了小黑发给的链接
-
人和:并且这个时候小绿刚好登录在购物网上
CSRF和XSS
CSRF高级方式:
当然,如果小黑事先在xxx网的首页如果发现了一个XSS漏洞,则小黑可能会这样做:欺骗小绿访问埋伏了XSS脚本(盗取cookie的脚本)的页面,小绿中招,小黑拿到小绿的cookie,然后小黑顺利登录到小绿的后台,小黑自己修改小绿的相关信息。
所以跟上面比一下,就可以看出CSRF与XSS的区别:CSRF是借用户的权限完成攻击,攻击者并没有拿到用户的权限,而XSS是直接盗取到了用户的权限,然后实施破坏
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
网站如果要防止CSRF攻击,则需要对敏感信息的操作实施对应的安全措施,防止这些操作出现被伪造的情况,从而导致CSRF。比如:
–对敏感信息的操作增加安全的token;
–对敏感信息的操作增加安全的验证码;
–对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。
3、dvwa靶场
第一关low
攻击步骤
-
抓包修改数据包
-
将修改过的数据包做成一个链接,哄骗用户点击重新发送即可
-
注意:现实攻击场景下,这种方法需要事先在公网上传一个攻击页面,诱骗受害者去访问,真正能够在受害者不知情的情况下完成CSRF攻击。
第二关mid
加入了referer的验证
修改referer证据链
第三关high
加入token
High级别的代码加入了Anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token,向服务器发起请求时,需要提交token参数,而服务器在收到请求时,会优先检查token,只有token正确,才会处理客户端的请求。对于user_token,而且每次修改密码,它都是变化的。因此,使用low和Medium的方法无效
绕过方式利用xss绕过
用xss脚本获得用户的token
用token进行修改密码操作
<iframe src="../csrf" onload="alert(frames[0].document.getElementsByName('user_token')[0].value)"
加入token,利用这个token和Hackbar发送请求
第四关impossible
加入了旧密码,很难绕过了
csrf防御
对敏感信息的操作增加安全的token;
对敏感信息的操作增加安全的验证码;
对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。