定义:
Cross-Site Request Forgery,跨站请求伪造,攻击者利用服务器对用户的信任,欺骗受害者去服务器上执行一些受害者不知情的一些请求。在CSRF的攻击场景中,攻击者一般会伪造一个请求(大概率是一个链接),然后欺骗用户去点击,用户一旦进行点击,整个的攻击过程就已经实现了,所以CSRF攻击也被称为"one click"攻击
与XSS进行比较
(1)XSS是利用用户对服务端的信任,而CSRF是利用服务端对用户的信任
XSS攻击的目的主要是让脚本在用户浏览器上执行,而服务器仅仅是脚本的一个载体罢了,本身的服务器端不会受到攻击
CSRF攻击,攻击者会伪造一个用户发给服务器的正常链接,主要目的就是为了能够让已经登录过的(已认证)的用户去发送这个请求。CSRF不需要知道用户的Cookie,CSRF自己并不会发请求给服务器,这些操作都是交给用户来实现的
(2)XSS是将恶意代码植入被攻击服务器中,利用用户对服务器的信任完成攻击。而CSRF是攻击者预先在自己的攻击服务器的页面上植入恶意代码,诱惑受害者去访问,在受害者不知情的情况下执行了恶意代码,然后就达到了攻击的效果。而攻击服务器是独立的域名或IP地址
攻击要点
(1) 服务器没有对操作来源进行判断,如IP、Referer
(2) 受害者处于登录状态,但是攻击者无法拿到Cookie
(3) 攻击者需要找到一条可以修改或获取敏感信息的请求
攻击场景模拟
(1)小余在购物网站X宝上修改个人信息。正常情况下修改的第一步就是登录个人账号,小余登录后对相关的参数进行修改:
收货姓名:小余
收货电话:11122222222
收货地址:开心村233号
小余编辑好修改的内容,然后提交,此时提交的url请求为:
http://www.xbao.com/member/edit.php?name=小余&phone=111122222222&add=开心村233号&submit=submit
(2)这个时候,小张想要截取小余的包裹,所以修改小余的收货地址。可是小张没有小余的账号权限,也就无法登录小余的账号,那么该如何做呢
刚好,小张是一名网络安全学习者,他根据所学的知识发现这个购物网站居然存在CSRF漏洞
小张做的第一步就是先确认一下小余是否还处于登录状态
果不其然,小余还在她的购物车里翻看一些东西
接着小张将修改个人信息的请求进行一个伪造
引诱小余在登录状态下点击
小余比较笨一点
然后就点击了
此时小余提交的url请求为:
http://www.xbao.com/member/edit.php?name=小张&phone=11133333333&add=邪恶村587号&submit=submit
这个请求跟正常修改请求一模一样,而且又是小余自己账号操作的,所以会修改成功,小张达到了攻击的目的
(3)问题来啦,为什么小张攻击成功?
条件一:X宝没有对个人信息修改的请求进行防CSRF处理,导致该请求容易伪造。因此
我们判断一个网站是否存在CSRF漏洞,其实就是判断其对应的关键信息(尤其是密码等这些一系列的敏感信息)的操作(增删改)是否容易被伪造
条件二:小余处于登录状态,并且点击了小张发送的恶意链接
如果受害者不处于登录状态或不在权限控制下,或者根本不点击这个链接,那么攻击也不会成功
(4)CSRF漏洞单看之下的利用比较局限,但是和其他漏洞结合起来,威胁性也很大
小张觉得直接发送链接太过于明显,会被小余轻松识破,于是他思考别的办法,小张利用burpsuite的功能模块做了一个钓鱼网站:
1、使用bp的engagement tools制作一个csrf攻击钓鱼网站;
2、小张将这个钓鱼网站发送给小余,诱惑小余在没有退出X宝的时候访问这个钓鱼网站;
小余点击了恶意网站中的恶意表单,从而在不知情的情况下执行了修改信息的请求
所以,CSRF是借助受害者的权限完成攻击,攻击者全程没有拿到受害者的权限,而XSS一般直接通过获得用户权限去实施破环
虽然说CSRF并没有XSS那样流行,但对于CSRF防范的措施较少,因此CSRF比XSS更具危险性
使用Burp完成制作钓鱼页面
1、登录dvwa,并修改为low
2、进入CSRF,并修改密码,Burp抓包
3、在抓包的页面中,生成CSRF POC
4、把我们的kali当作是一台攻击机,开启Kali的nginx服务,进入到nginx的html目录底下,创建一个csrf1.html,然后将这个钓鱼网页的代码写入进去,然后执行
发现密码已经改掉了,通过test进一步确认密码已经被修改
5、同时也可以将攻击服务器的页面地址通过DVWA的XSS存储型漏洞植入页面中去
6、当DVWA的当前登录账号去查看XSS漏洞页面时,点击即可完成攻击
7、当然,这个过程还可以继续进行改进,让被攻击用户更加容易完成操作。比如直接将修改密码的请求地址直接内嵌到XSS页面中
<a href="http://10.245.0.206/DVWA/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change">
<img src="http://10.211.55.16/dateme.png"/> </a>
直接点击那个图片即可完成修改密码的操作