4-CSRF漏洞渗透与防御

1、什么是CSRF漏洞

Cross-Site Request Forgery
跨站请求伪造

从一个第三方的网站,利用其他网站生效的cookie,直接请求服务器的某一个接口,导致攻击发生!

2、CSRF案例分析

Gmail CSRF漏洞(设置邮件转发)
Weibo CSRF漏洞(自动关注账号)

2.1 CSRF漏洞危害

例如:

  • 修改账号信息
  • 利用管理员账号,上传木马文件
  • 传播蠕虫病毒(点击、扩散、点击......)
  • 和利用其它手段配合,实现攻击,比如XSS、SQL注入

2.2 CSRF和XSS区别

2.3 CSRF的payload1

2.3.1 通过图片的img src属性,自动加载,发起GET请求:

<img src="http://xxx/xxx/xx.php?nameid=2002&amount=1000" width="0" height="0">

2.3.2 构建一个超链接,用户点击以后,发起GET请求

<a href="http://xxx/xxx/xx.php?nameid=2002&amount=1000" taget="_blank"> 小姐姐在线视频聊天!! </a>

2.3.3 构建一个隐藏表单,用户访问,自动提交,发起POST请求

<from action="http://xxxx/withdraw" method=POST>
<input type="hidden" name="account" value="xiaoming" />
<input type="hidden" name="amount" value="1000" />
<input type="hidden" name="to" value="jiangang" />
</form>
<script> document.forms[0].submit(); </script>

3、CSRF漏洞挖掘

3.1 怎么确定一个接口地址有没有CSRF漏洞呢?

答:在第三方网站,发起目标网站接口的请求,看是否成功

3.2 具体怎么操作呢?

答:在目标网站,正常输入数据,通过抓包获取调用的接口以及参数

3.3 有没有工具可以使用?

答:BurpSuite、CSRF Tester、https://github.com/s0md3v/Bolt 、云产品

3.4 示例

传递参数,然后BP抓包,右键Engagement tools -> Generate CSRF Poc
把HTML代码复制出来,保存在本地,然后在浏览器中打开

4、CSRF漏洞防御

4.1 防御思路

  • 思路一:我们能不能区分一个请求是来自于自己的前端页面,还是第三方的网站?
  • 思路二:怎么让自己的前端页面和伪造的请求变得不一样呢?

4.2 思路一:HTTP Request Header请求头

Referer字段:引用页;引荐;来源页面
作用:跟踪来源,比如访问统计、广告效果1

可以知道用户是从哪个搜索引擎过来的,搜索了那些信息

实现:在后端代码中加入拦截器/过滤器,判断Referer值
如:DVWA中的Medium防护
绕过:抓包,修改Referer中的值进行伪造

4.3 思路二:user_token

在请求中加入一些随机的字段(第三方不知道,也猜不出来),让第三方网站无法伪造请求

实现:DVWA中的Hight防护

1、在用户使用用户名密码登录,服务端下发一个随机的token字段给客户端,并且服务端把这个字段保存在session中。
2、客户端把这个token保存起来,放到隐藏字段,不能放在cookie中
(CSRF的防护,就是即使你有cookie也不能让你访问成功!)
3、用户在登陆状态下,在之后访问的时候,都要携带这个token字段
4、服务器从session中拿出token值进行对比,如果一致,说明请求合法。
5、用户退出,session销毁,token失效

绕过:如果目标网站还存在xss漏洞,可以利用xss漏洞获取某个字段的值
payload = <iframe src="../csrf" onload=alert(frames[0].document.getElementsByName('user_token')[0].value)>

4.4 二次验证

请输入当前密码!
在输入新密码!
短信验证
验证码
ip验证
浏览器的保护措施 -> referrer policy -> strict-origin-when-cross-origin
当你在第三方域名调用另一个域名的接口,他会把参数干掉

posted @ 2024-11-28 18:30  xmh666  阅读(26)  评论(0编辑  收藏  举报