CSRF——漏洞案例与了解
CSRF——漏洞案例与了解
1.CSRF
漏洞解释
CSRF (Cross-Site Request Forgery) 是一种网络攻击,攻击者会利用用户的身份在用户不知情的情况下,向一个网站发送恶意请求,从而实现攻击目标。攻击者通常会在钓鱼邮件、社交网络等渠道中,将包含恶意链接的信息发送给受害者,当受害者点击该链接时,攻击者就可以在其登录的网站上执行恶意操作
漏洞过程
漏洞原理
该漏洞利用了Web应用程序的身份验证和会话管理机制,原理是攻击者利用受害者已经登录了某个网站的身份来发送一些恶意请求。这些请求看起来像是由受害者发送的,但实际上是攻击者构造的。攻击者可以将这些请求嵌入到一个看似正常的网页中,当受害者访问这个页面时,请求就会被自动发送。
2.CSRF案例(GET)
首先来到登录界面

可以看到登录进去后,进入了个人中心,有对应用户的相关信息,其中有修改信息按钮

点击修改按钮,输入信息并进行抓包


接着我们开启远程的服务器,写入相关的修改语句,这里的地址是网站对应的地址
1 |
|
使用户在保持登录状态的情况下去访问服务器的地址,触发我们提前写好的JavaScript语句


最后修改成功个人信息的相关内容,达到目的

3.判断CSRF
对于CSRF的判断,一般来说,CSRF漏洞出现在可以修改信息和点击更新的模块中我们可以通过数据包的内容进行解析,在burp中有一个工具,是针对CSRF的检查,可以产生检测代码


之后下面会产生相关的CSRF HTML代码,我们可以进行复制,放在服务器的index文件中,再模拟受害者访问服务器得到如下反馈

最后我们可以看到相关的请求,个人界面中,查看相关信息是否有修改,如果修改了则说明有CSRF攻击,没有修改则说明没有该漏洞
当然,测试是有前提条件的,首先在测试地方的选取上,选取出现修改,更新或者添加等区域
4.CSRF的防御办法
但用户发送重要请求的时候需要重新输入原始密码
设置随机的token值
检测并校验referer来源,请求时判断请求链接是否为当前管理员正在使用的界面
设置验证码
限制请求方式只能为POST