CSRF攻击技术
1.了解CSRF
"Cross-site request forgery": 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为"one click"攻击。
CSRF,江湖人亦称:"跨站请求攻击"。简单的说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品)),因为浏览器之前认证过,所以被访问的站点会绝点是这是真正的用户操作而去运行。
在这里,就是利用了web中用户身份验证的一个漏洞,"攻击者盗用了你的身份,以你的名义发送恶意请求",CSRF能够做的事情包含:"以你的名义发送邮件;发消息;盗取你的账号;甚至于购买商品、虚拟货币转账......造成的问题包含个人隐私泄露以及财产安全。"
总结起来一句话:程序员开发的时候,未对相关页面进行token和REFERER判断,造成攻击者可构造自己的URL地址欺骗目标用户进行点击。
2.CSRF原理:
从上图可以看出,要完成一次完整的CSRF攻击,用户(受害者)必须经历两个步骤:
登录受信任站点银行网站,并在本地生成Cookie。
在不登出银行网站的情况下,訪问美女链接钓鱼站点。
3.CSRF分类:
CSRF漏洞一般分为站外和站内两种类型:
3.1站外
CSRF站外类型的漏洞本质上就是传统意义上的外部提交数据问题。通常程序员会考虑给一些留言或者评论的表单加上水印以防止SPAM问题(这里,SPAM可以简单的理解为垃圾留言、垃圾评论,或者是带有站外链接的恶意回复),但是有时为了提高用户的体验性,可能没有对一些操作做任何限制,所以攻击者可以事先预测并设置请求的参数,在站外的Web页面里编写脚本伪造文件请求,或者和自动提交的表单一起使用来实现GET、POST请求,当用户在会话状态下点击链接访问站外Web页面,客户端就被强迫发起请求。
3.2站内
CSRF站内类型的漏洞在一定程度上是由于程序员滥用$_REQUEST类变量造成的。在一些敏感的操作中(如修改密码、添加用户等),本来要求用户从表单提交发起POST请求传递参数给程序,但是由于使用了$_REQUEST等变量,程序除支持接收POST请求传递的参数外也支持接收GET请求传递的参数,这样就会为攻击者使用CSRF攻击创造条件。一般攻击者只要把预测的请求参数放在站内一个贴子或者留言的图片链接里,受害者浏览了这样的页面就会被强迫发起这些请求。
4.CSRF漏洞检测:
抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
以CSRFTester工具为例,CSRF漏洞检测工具的测试原理如下:使用CSRFTester进行测试时,首先需要抓取我们在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在CSRFTester中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞,当然此款工具也可以被用来进行CSRF攻击。
5.CSRF漏洞之快速托库(Discuz)
5.1以管理员身份登录discuz;
5.2看一下discuz网站的数据库备份目录;
5.3在管理员身份状态下,备份数据库
默认备份到网站当前目录,我们在BurpSuite中抓包看它的请求头部信息
现在我们把备份好的数据库文件删除,来模拟一个用户正常发帖,在discuz中创建一个test普通用户,登录后访问发帖页面
从这个步骤开始,便是发帖钓鱼攻击的开始,比如,我们模拟的用户向网站管理员发一份投诉的信箱,而管理员对这一类的信息比较关心,当管理员点击模拟用户构造的钓鱼帖子之后,模拟用户便完成了钓鱼攻击,实现数据库托取。
在上面的步骤当中,我们看到网站默认讲数据库备份到:C:\phpStudy\PHPTutorial\WWW\discuz\data目录下,我们要让网站将数据库备份在:C:\phpStudy\PHPTutorial\WWW\discuz\uc_server\data\backup目录下
我们构造自己的备份地址:
将此地址填入网络图片路径,上传到地方服务器中
下一步登录管理员账号,并且点击模拟用户发送的钓鱼帖子,
管理员用户界面,已经收到模拟用户发的帖,点击了之后
到了帖子的正文,这个时候,钓鱼地址已经悄悄的将网站数据库托到了指定的位置,在前面,我们设置的数据库备份文件夹名为myself,数据库名为aaaa
以上是数据库文件夹和备份路径
以上是数据库名aaaa,经过以上几个步骤,成功托库,这也是CSRF漏洞典型的利用方法之一,
以上钓鱼实现的前提是admin用户必须与服务器是连接状态,与管理中心要保持连接。另外一个需要注意的是,如果这里钓鱼不成功,还有一个地方也需要做一下修改,因为我们是将数据库备份路径换为我们自己的路径,当IP更改之后,需要在UCenter访问的IP缓存中进行更新。
6.BurpSuite更改数据包
除了以上钓鱼攻击之外,我们依然能够利用BurpSuite的数据抓包,更改它的备份文件夹名称,包括以上构造的钓鱼地址,都是在BurpSuite请求头抓包之后进行更改构造
6.1设置好代理后,访问UCenter模块,
6.2同样的,我们选择数据库备份,BP抓包修改请求头
6.3修改backdir=yourself
下图可以看到已经将yourself的数据库备份到默认目录下
以上就是CSRF漏洞的一个典型应用,
7.MySQL备份数据库特点(题外)
可以观察到,MySQL数据库备份的时候,数据库名后面紧随序号,
这是MySQL备份的一个规律和特性,主要是为了解决当数据库文件相当大的时候,进行分段压缩或者分段备份,以减轻服务器处理压力和避免有些压缩解压软件因压缩文件太大,无法执行解压的情况,再者避免了因解压软件解压大文件时产生额外的解压费用。
本文来自博客园,作者:田家少闲月-,转载请注明原文链接:https://www.cnblogs.com/zhaoyunxiang/p/15383219.html