什么是CSRF漏洞?
跨站请求伪造,就是黑客以被攻击者的名义发送请求,完全合规合法。
CSRF原理
A站点存在CSRF漏洞、B站点为黑客伪造包含A站点正常请求链接的站点。
1)当被攻击者打开A站点,进行身份验证,登陆成功。A站点服务端返回给被攻击者的浏览器身份验证Cookie。被攻击者可以在A站点正常发送请求。
2)黑客伪造一个B站点其中包含A站点的某一请求(如转账请求)/广告图片包含A站点的请求。
3)黑客将B站点发送给被攻击者,被攻击者用打开A站点的浏览器打开B站点并触发黑客伪造的A站点请求。
4)这样就在被攻击者不知道的情况下,自己发送了请求,完全合法。
实战环境
存在漏洞服务器
系统:Ubuntu 16.04
应用:DVWA
IP:192.168.1.5
目标用户
系统:mac OS系统
浏览器 :Google Chrome
IP:192.168.1.4
攻击者服务器(黑客)
系统:kali linux 2020.2
IP:192.168.1.10
环境:搭建Apache
实战测试
使用burpsuite抓包密码修改功能,发现密码修改链接和参数如下图。
http://192.168.1.5/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change
攻击者在自己服务器搭建一个包含修改Ubuntu网站用户密码的链接或通过邮件发送给被攻击者。
以邮件发送触发链接为例(黑客自己搭建服务器一样的原理就是诱使用户在不知情的情况下点击修改密码链接)
发送带修改密码链接请求的邮件,真正的黑客邮件做的肯定是用户比较感兴趣的我测试用简单演示就行了。
用户在正常登陆完成DVWA用户认证,且没有退出,点击邮件链接。
点击密码被修改成功
这样黑客知道你的用户名就 可以直接登陆你的账户了(当然并不是修改密码这么简单也可能存在转移你的资产等情况)。
服务器怎么防御
1)验证 HTTP Referer 字段;
2)在请求地址中添加 token 并验证;
3)在HTTP头中自定义属性并验证。