csrf漏洞学习

啊猜猜👴这几天干啥去了

与话题无关的一个吐槽

吐槽一下效率极其拉跨的联想售后😓,以及1次 愉快 的售后体验

电脑出了点小问题,网上搜了下这种小问题大概80–100r,于是👴出去找联想售后,然后人家检查了一遍告诉👴,我们作为技术人员其实p也不会只会换主板,所以不管啥问题,你只需要掏区区380r换个主板就阔以修好了啦,而且如果不你不打算掏这冤枉钱而是想花80r去电器店修,那么你的联想保修就失效辣!我们可没有强迫你哦

我无可奈何,然后他告诉我主板到货大概要几天,留了我手机号就让我回去等了。由于没钱,所以没法出去玩,于是在宿舍摆了几天大烂😓。可气的是,售后说大概3天就到货了,结果拖来拖去硬是让👴等了6天🤬wnm….

第六天👴彻底不想等了,开始收拾行李离校,顺便去店里准备强行拿电脑+来个撕逼大战。当👴打开手机录音以便保存犯罪证据,走进店里正准备发作,售后小哥信誓旦旦告诉我下午就能到,👴最后信他一次,坐在店里等
然后等的过程中👴打开电脑奇迹的发现,这玩意它自己好了???!! 于是趁售后不在带电脑去楼下电器维修检查,人家瞅了瞅告诉我电脑接口没问题,可能只是进水,干了就好了….

然后这时候👴想了下: 那既然好了还花钱修什么电脑,这辣鸡服务让👴8爽地等了这么久,👴现在想一走了之了

但是👴又想发作一下,于是没直接跑路,而是选择回店里当面通知售后,于是发生了以下对话

1
2
3
4
5
我: 既然电脑检查的没问题,那这电脑👴8修了
售后: 8行啊兄弟,这货都已经寄来了,突然说不换,主板我咋处理
我: 哦,主板咋处理是吧,要不拿它捅你的ass♂吧,6天才到货还好意思问我咋办

然后就是售后破防,没准会触发肢体冲突事件,但他拿👴估计是无可奈何的,事后👴满意地潇洒离去...


啊当然上述情况都没有发生,我本打算这么说发作一波的,但实际上发生的是这样的

1
2
3
4
5
我: 既然电脑检查的没问题,那这电脑👴8修了
售后(若有所思): 哦,这样啊,那我把主板退回去吧,你可以走了
我(懵逼): 啊????

然后找不到茬、等了1下午的我就这么拖行李走了....

事后回想,莫名其妙干等6天啥也没干的我突然有种小丑的感觉

原理

啊那么p话少说,总之👴宝贵的假期时间就这么晃过去了,现在开始要重新更新啦
参考链接: 浅谈csrf

csrf,跨站请求伪造,利用社会成功学诱导用户点击构造的恶意链接,在用户8知情的情况下让用户对网站完成某些操作

比如csrf的工具CSRFTester,其原理就是访问1个页面,然后抓捕其html页面,然后自己修改它构造钓鱼界面,诱导用户点击
满足csrf,被钓鱼用户需要满足以下条件:
登录受信任网站A,并在本地生成Cookie
在不登出A的情况下,访问危险网站B

csrf防御

referer头

验证请求是否是用户自愿发起,可以通过检查referer头来判断,如果referer头是来自自己的网站,则可以信任,否则则可能是黑客的钓鱼网站
8过这个referer难道无法被篡改吗? 查了1下其实是可以的: “Referer 的值是由浏览器提供的,虽然 HTTP 协议上有明确的要求,但是每个浏览器对于 Referer 的具体实现可能有差别,并不能保证浏览器自身没有安全漏洞。使用验证 Referer 值的方法,就是把安全性都依赖于第三方(即浏览器)来保障”

于是对于一些浏览器,就有方法可以篡改cookie,比如IE(拒绝IE,从我做起)

添加token

抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,且该信息不存于 cookie 之中
可以在 HTTP 请求中以参数的形式(get/post)加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,token 可以在用户登陆后产生并放于 session 之中

这样的缺点是1个网站里可接受请求的地方非常多,对每个请求都加token很麻烦且容易漏掉
还有1个问题是token可能被获取:

在 HTTP 头中自定义属性并验证

这种方法也是使用 token 并进行验证,不同的是,这里并不是把 token 以参数的形式置于HTTP请求中,而是放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中
总之就是没啥缺点,但是十分麻烦

绕过

总结,感觉就像是盲猜一样,1个1个试
1.Refere为空条件下

空token

删除token参数或发送空token
不发送token也可以正常请求数据是因为这种逻辑错误在应用程序中非常常见:应用程序有时会在token存在的时候或者token参数不为空的时候检查token的有效性。这种情况下,如果一个请求不包含token或者token值为空,那么也是有可能绕过CSRF的防御的

1
2
3
4
5
6
7
8
9
10
11
12
合法: 
POST /change_password
POST body:
new_password=qwerty &csrf_tok=871caef0757a4ac9691aceb9aad8b65b
伪造:
POST /change_password
POST body:
new_password=qwerty
或:
POST /change_password
POST body:
new_password=qwerty&csrf_tok=

用其他session

应用程序可能只是检查token是否合法,但是不检查token是否确实归属于当前用户。这种情况,那么你可以试试把自己的token贴在payload里

移除referer

可以试试往页面添加以下代码移除referer

1
<meta name =“referrer”content =“no-referrer”>

正则表达绕过域名

也许referer检查是基于白名单的,那么就阔以正则表达式绕过,想办法在你的钓鱼网站域名里加白名单
在后面加域名 qq.com => qq.com.abc.com
将域名拼接 abc.qq.com => abc_qq.com
在前面或者在后面加字符 qq.com => abcqq.com / qq.com => qq.comabc.com / qq.com => abc.com/qq.com

配合xss使用

参考: 链接

更多还在学,靶场还在搭,有优先级更高的事要做,先挖个坑…


csrf漏洞学习
https://bl4zygao.github.io/2022/08/01/csrf漏洞学习/
Author
bl4zy
Posted on
August 1, 2022
Licensed under