CSRF(跨站请求伪造)
1.基本内容
1.1 介绍
CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害人的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(转账,改密码等)。
1.2 两种漏洞
CSRF:属于
业务逻辑漏洞
,在服务器看来,所有请求都是合法正常的
XSS、SQL注入等:都是属于
技术漏洞
XSS是基于客户信任服务器,而CSRF是基于服务器信任客户(经过身份验证的)
1.3 CSRF前提
①、用户必须登录;
②、黑客必须懂得一些发包的请求;
③、服务器端是不会有二次认证;
④、被害者是不知情的。
1.4 CSRF过程
① 用户首先登录服务器;
② 服务器返回给用户cookie;
③ 黑客将可以修改用户密码的URL发送给用户;
④ 若用户点击此URL,则用户密码会被更改为黑客预设的密码(注:用户不点击此链接,密码不会改变;用户是否点击,即密码是否更改,黑客并不知道)
⑤ 等待一段时间后(用户结束对服务器的访问后),黑客使用用户的账号和密码(黑客预设)登录服务器,若可以登录,用户点击了URL;若登录失败,用户没有点击URL。
2.dvwa模拟实验
2.1 low等级
1.查看源代码
从源码中可以看出:用户输入得到参数
2.实验过程
方法一:创建修改密码的链接
利用burpsuite工具抓取数据包
保存上述链接
查看修改密码后的效果:
查看效果:
分析:黑客将此链接发送给用户,用户点击后会更改密码;
但是此方法有一个很大的问题,页面会显示密码已更改,
不能达到用户不知情这一重要前提
,所以需要更加隐藏的手段。
方法二:利用kali写一个修改密码的脚本
先将密码初始化为原始密码:password
打开kali,写一个更改密码的脚本(这里使用的是leafpad编译器)
点击denglu时,打开burpsuite工具抓取数据包:
方法三:通过创建一个攻击网页
写一个简单的网页,其中包含修改密码的URL
用户打开此网页,其登录密码就会改变
方法四:利用存储型xss重定向到2.html
2.2 medium等级
1.查看源代码
利用referer认证
用户直接修改密码时,referer中含有主机名,所以可以直接修改
黑客通过发送链接,让用户点击链接来修改密码时,没有referer,所以不能修改密码
2.绕过方式
利用burp suite抓取数据包,将主机名放在http头部的referer参数中
2.3 high等级
1.查看源代码
High级别加入了anti-CSRF token机制,用户每次访问改密页面时,服务器会返回一个随机的token值,向服务器发起请求时,需要提供token参数,服务器在收集请求时,会先检查token值,只有token值正确,才会响应客户端的请求。
2.绕过方法
利用burp suite抓取数据包,将数据包中的安全等级high改为low
2.4 impossible等级
1.查看源代码
首先,利用PDO技术防御SQL注入;
其次为了防范CSRF,引入了二次认证(在修改密码的时候,需要用户输入原始密码,攻击者在不知道原始密码的情况下不能修改密码)。