引言:
相信玩steam且库存有值钱东西的玩家都见过有一堆陌生人加你,并且给你发送链接的吧
你好奇地点击后,发现你库存少了,这是为什么?
有可能就是攻击者利用了csrf
漏洞详解
CSRF
漏洞原理:
攻击者会冒充或利用用户本人对web服务器发送请求,然而web服务器无法识别该请求是否为用户本人所发送,因此造成各种危害。
漏洞利用过程:
1)首先需要用户登录了上网站,并产生了cookie
2)构造恶意链接
3)在用户还保持着登录状态时,去诱导用用户点击链接
4)链接中的恶意脚本在用户的浏览器上执行,进而达到攻击者的目的
漏洞危害:
攻击者会利用用户的名义去进行发送邮件,转账等各种不利于用户本人的操作,这对于受害者的名誉以及财产都有着损失
CSRF分类:
1)get型
get很好理解,如果是get请求,URL中就会有参数显示,这里的get也是一样
如:
https://域名/login.php?id=admin&password=123456
在诱导用户admin点击该链接,他的密码就会被改为123456了
案例:(都是用pikachu靶场)
初始信息
构造一个链接帮我的战队投票
吸引用户登录
点击后
就成功将性别修改为joker了
2)post
就是URL中不会显示参数,post 中,攻击者会对网站进行抓包,并且分析整个数据包的构造,然后把相关的内容(如密码)修改为自己想要的参数,然后同样是诱导用户去点击我们精心准备的 WEB 界面
案例:
这是初始信息
然后打开bp,在点击submit修改完成
得到
看到是post型
点击
将我们要修改的性别的value改为joker
然后点击Copy HTML
得到
将他放进你要构造的链接里面,得到
用户在点击后,性别就会变为joker
其实steam里面的链接也是一样,只不过他们的链接里面嵌入了恶意脚本,来代替你发送请求
CSRF的防护:
1)设置二级密码
如用户发送转账等较为重要的请求时,应输入二级密码进行确认,如微信、支付宝的支付密码,和王者荣耀的二级密码
2)验证请求中的reference
在请求在有一个参数,reference,它可以知道你请求的来源,如你在百度搜索我为什么这么帅,点击第一个结果,那么那个请求的reference就是www.baidu.com
为了防范CSRF那么就要对重大请求的每一步都有进行reference验证
3)Token验证
Token含义:
用户在成功登录后,服务器端会生成一串字符串,也就是Token,并发送给客户端,可以由前端指定存放到localStorage、sessionStorage或cookie中,用于用户在每次请求的时候带上 Token 证明自己的合法地位
如果我们点击了恶意链接,触发了向服务器端发送请求,会自动携带我们的cookies去请求
而如果设置了Token就不会,之所以怎么说是因为Token是一种自定义的字符串,没有自主的功能,因此由浏览器发送的请求是不会自动携带Token的,当然又有一点前提的,不能放在cookies