跨站请求伪造(CSRF)漏洞简介及靶场演示


一、CSRF漏洞简介

(一)什么是CSRF?

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者"Session Riding",通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,偷取目标的cookie,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站,是利用目标的cookie,而并未获取目标的cookie。与XSS攻击相比,CSRF攻击相对没那么流行(因此对其进行防范的资源也相当稀少)但更加难以防范,所以被认为比XSS更具危险性。

(二)CSRF的原理

任何网站功能的本质就是数据包的传递。在你不知情的情况下,浏览器经常会偷偷发送数据包(通过ajax异步传输,不用刷新页面就可以用JS去发送请求并发送信息),攻击者正是基于网站的特点,通过CSRF攻击,利用目标用户的身份,以目标用户的名义执行某些非法操作。
CSRF攻击成功需要满足以下两个条件:
1、目标用户已经登陆了网站,能够执行网站的功能;
2、目标用户访问了攻击者构造的URL。(未知链接可不要乱点噢!)

(三)CSRF的危害

黑客首先会制作一个各方面看上去都非常合理的页面骗受害者来点击。设置的网页,会带有很强的指向性,它和钓鱼网站不同,钓鱼网站需要你自己输入账号密码,而CSRF只要让用户访问这个网站就可以生效,并不需要点击。
通过CSRF,攻击者可以以目标用户的名义发送邮件、发消息、盗取目标用户的账号、修改敏感信息、生成webshell文件、甚至购买商品、虚拟货币转账等,导致服务器沦陷,甚至威胁目标用户的财产安全。


二、CSRF漏洞如何挖掘?

找一个站,注册一个用户,修改自己的账号密码(或者其他信息也可以,你们知道这个意思就行了),然后点击保存,但保存之前先开启抓包,然后把数据包做成CSRF的链接或者文件。
接着换个浏览器,登录B,点击做好的CSRF,只要能修改自己的账户密码或者其他信息就表明存在CSRF漏洞了。
这里要注意,CSRF链接最好是一旦用户点开,就会立即生效,可以参考下列自动提交代码:

<html>
<body>
<form id='aaa' action="url" method="POST"> 
<script> 
document.getElementById('aaa').submit(); 
</script>
</body>
</html>

注意前面的form表单里的id='aaa',这个值要与后面的byid里面的内容相同,这样就可以对该表单的内容进行自动提交。


三、靶场实战

(一)线上搭建环境测试

已知靶场为dedecms,首先百度搜一下该cms的通杀漏洞,发现后台有CSRF漏洞:


可以利用该漏洞对服务器进行写一句话木马文件的操作。
因此自己先搭建dedecms进行本地漏洞复现。
我直接在云服务器上搭建织梦cms,安装完毕,访问后台地址(在域名后面加个/dede可打开后台登陆页面):

http://101.43.103.25/dedecms/dede


登陆后台,找到文件式管理器,点开:

先看看能不能直接新建文件然后写入一句话木马:
如图所示,点击保存:

接着确定该文件的保存位置在:

http://101.43.103.25/dedecms/uploads/test.php

然后访问并对该文件传参:

访问成功!这说明在后台是可以直接写任意文件的。
接下来可以尝试生成POC看看能不能打CSRF。首先抓个包,看看有没有token,因为如果需要token,则CSRF就很难生效了。
继续新建文件,然后开启代理,保存以后,抓取数据包:


可以看到,上面的内容大概可以判断出来,是模块、路径、用户的传参之类的,所以没有token。如果路径后面多了类似&token=这样莫名其妙的字符串,一般是有token。
因此可以在抓取的数据包上点鼠标右键,选择enagement tools选项后面的CSRF POC:

然后把html代码复制出来,新建一个html文件,贴进去。文件截图如下:

这段代码是默认的代码,目标用户打开页面以后,还需要再点击一个按钮才能自动生效,这样就大大降低了成功率。所以我们可以对生成的html代码进行改进,给form表单一个id参数,同时在script标签中去获取这个传参并使用submit()方法就可以将数据自动提交上去了。
现在对POC进行修改,首先在form表单后面加个id='aaa',然后后面加script标签,同时继续保留提交按钮,让目标用户以为只要自己不点击该按钮就不会有问题。因此最终的代码如下:

现在可以测试一下这个文件了,首先确认本地没有相应的文件(我们要上传的文件名为ceshi.php):

然后保持后台登陆的同时,打开我们刚才设置好的文件:

看到成功生成了一个文件!
现在把文件上传到服务器,然后通过链接来访问:

http://101.43.103.25/test.html


成功保存一个文件!

(二)靶场实战

这里以封神台靶场为例。
需要写入的文件会保存在uploads文件夹里,所以进入靶场后,首先测试uploads文件夹的路径是否存在,访问:

http://59.63.166.75:8010/newcsrf/uploads/


路径存在。
我们数据包是要提交给file_manage_control.php文件,因此访问这个文件看看是否存在:

http://59.63.166.75:8010/newcsrf/dede/file_manage_control.php


发现页面一片空白。
靶场会把访问不到的文件重定向到登录页面,不过靶场不提供登录的功能,所以会见到都是空白页。一般真实的网站在访问的时候,不存在的页面会显示为not found,从而可以判断出该路径是否正确。
这里靶场的文件是存在的。
信息判断完毕,接着去修改html文档。由于靶场的路径和保存地址与我的测试环境不一样,因此除了url要改之外,保存路径也需要修改。最终文件如下:

文件设置完毕,然后去访问靶场的问题反馈页面:

http://59.63.166.75:8010/newcsrf/test/

上传设置好的文件:

然后会获得文件地址:

将该文件地址复制粘贴到反馈的页面,并点击提交:

接着访问该文件,看看是否生成成功。访问:

http://59.63.166.75:8010/newcsrf/uploads/ceshi.php?8=phpinfo();


上菜刀连接该文件:

找到flag.php:


flag为:flag-baozaoxiaohuang
提交flag:


四、小结

本文首先介绍了CSRF漏洞的概念、原理及危害,介绍了挖掘的方法,并结合线上搭建环境自测及线上靶场进行了实战演示,希望对大家学习跨站请求伪造提供一定的参考。

  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值