CSRF(Steam的链接不能随便点)

引言:

相信玩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

posted @ 2024-03-03 20:38  Lxx-123  阅读(34)  评论(0编辑  收藏  举报