记录CSRF漏洞的相关内容
本篇文章记录在学习CSRF漏洞时的一些相关知识
CSRF漏洞
CSRF(Cross-site requests forgery – 跨站请求伪造)我们称之为跨站请求伪造,是一种网站的恶意利用。听起来和XSS漏洞也就是跨站脚本攻击有点相似,其实它们大不相同。XSS是利用站点内的信任用户,而CSRF则是伪装成信任用户访问受信任网站。
在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
听起来好像有点不太理解,CSRF漏洞的利用方式有很多种,我们可以举例来说明。
场景:
有一个金额转账平台,假设平台网址是:www.xyx.com,张三是一个有钱人,李四呢则是一个穷鬼,不过李四却是一个懂点漏洞的黑客。李四想利用该平台的漏洞盗取张三账户上面的金额。
李四在转账平台上发现的漏洞
李四测试了以下这个平台,发现:每一次转账实际上就是请求了这样一个链接:www.xyx.com/changemoney?user=lisan&money=100,这个链接的意思就是当前的账户自动像李三的账户转账100元。
那么就可以知道,大致的转账流程就是:
- 登入账户 --> 选择转账用户与转账金额 --> 提交请求 --> 转账成功(如果金额足够)
李四盗取张三的盗取金额
这就很简单了,李四直接把这样的一条链接发给张三:www.xyx.com/changemoney?user=lisi&money=1000
,当张三点击了这条链接就会自动向李四转账1000元,这样李四就可以得到张三转账的1000元,前提是李四要用一些方法让张三登入该转账平台。
CSRF漏洞的分类及利用
CSRF漏洞可以分为两类:
-
GET型CSRF漏洞:GET型CSRF漏洞是指攻击者通过构造一个特定的URL,将恶意请求通过GET请求发送给目标网站,利用用户已登录的身份信息,执行恶意操作。由于GET请求的数据包含在URL中,因此攻击者可以通过构造一个指向目标网站的URL,将恶意请求伪装成正常的请求,诱骗用户点击,从而实现对目标网站的攻击。
-
POST型CSRF漏洞:POST型CSRF漏洞是指攻击者通过构造一个包含恶意请求的表单,将表单提交给目标网站,利用用户已登录的身份信息,执行恶意操作。由于POST请求的数据不包含在URL中,因此攻击者需要构造一个包含恶意请求的表单,并将表单提交给目标网站。当用户点击提交按钮时,表单中的数据将被发送到目标网站,从而实现对目标网站的攻击。
一、GET型CSRF漏洞的利用
首先我们来测试一个会员信息修改平台:
- 首先我们登入该平台:
!!!分隔!!!
- 点击点击修改信息来修改信息,我们尝试修改手机信息为:110119120:
- 点击提交按钮通过F12来抓取提交时的请求数据包
!!!分隔!!!
!!!分隔!!!
- 可以看到修改数据的请求数据包,这个时候我们就可以通过修改该Request URL链接发送给任意一个已登入平台的用户来恶意修改信息:
- lucy用户访问该链接后,信息修改如图:
二、POST型CSRF漏洞的利用
我们在上面说过,POST型的CSRF漏洞就是通过构造一个包含恶意请求的表单,将表单提交给目标网站,利用用户已登录的身份信息,执行恶意操作。那么我们就可以设计一个表单提交的钓鱼网页,当用户点击提交按钮时,实际上就是修改信息的操作
那么我们这里不需要自己去编写网页代码,我们直接使用burp来生成相对应的CSRF POC即可:
- 首先我们把代理开起来,用burp来抓取修改数据时的数据包:
- 点击submit之后我们可以看到抓取的数据:
- 此时我们鼠标右击可以选择生成相应的网页POC:
- 生成的POC如下:
- 这时我们copy HTML 代码,稍作更改之后,放到相应的服务器下运行:
- 当用户进入钓鱼网页时点击submit时就会自动将数据提交到对应的页面自动完成更改信息的操作(当然我们可以在代码中添加js脚本让用户一进入网页就自动点击提交):
CSRF漏洞的防御
-
GET型CSRF漏洞的防御:为了防御GET型CSRF漏洞,网站可以采用多种方法,例如使用Token进行验证、增加验证码等。其中,使用Token进行验证是一种常见的方法。在用户登录后,网站可以为每个用户生成一个唯一的Token,并在用户的浏览器中存储该Token。当用户通过GET请求访问需要验证的页面时,网站会检查该Token是否与存储在服务器端的Token匹配,如果匹配则允许用户访问该页面,如果不匹配则拒绝用户的访问请求。
-
POST型CSRF漏洞防御:为了防御POST型CSRF漏洞,网站可以采用与防御GET型CSRF漏洞相同的方法,例如使用Token进行验证、增加验证码等。此外,网站还可以采用其他方法来防御POST型CSRF漏洞,例如使用HTTP-only cookies、增加请求的复杂性等。
总之,无论是GET型CSRF漏洞还是POST型CSRF漏洞,都可能对用户的个人信息和网络安全造成威胁。因此,我们应该加强安全意识,不轻易点击未知链接或下载未知文件,同时网站也应该采取有效的防御措施来保护用户的信息安全。