CSRF漏洞检测与发现
1.首先明白什么是CSRF漏洞
跨站请求伪造,这里刚入门的同学肯定不明白是什么意思,其实重点在于请求伪造
简单地说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作(如发邮件、发消息、甚至财产操作:转账、购买商品等)。由于浏览器曾经认证过,所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份认证的一个漏洞:简单的身份验证只能保证请求发自某个用户的浏览器,却不能保证请求本身是用户自愿发出的。
在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也被称为one click
攻击。
2.CSRF攻击实例
受害者 Bob 在银行有一笔存款,通过对银行的网站发送请求http://bank.example/withdraw?account=bob&amount=1000000&for=bob2可以使Bob把1000000 的存款转到bob2的账号下。通常情况下,该请求发送到网站后,服务器会先验证该请求是否来自一个合法的 session,并且该session 的用户Bob已经成功登陆。
黑客 Mallory 自己在该银行也有账户,他知道上文中的 URL 可以把钱进行转帐操作。Mallory 可以自己发送一个请求给银行:http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory。但是这个请求来自 Mallory 而非 Bob,他不能通过安全认证,因此该请求不会起作用。
这时,Mallory 想到使用CSRF的攻击方式,他先自己做一个网站,在网站中放入如下代码: src=”http://bank.example/withdraw?account=bob&amount=1000000&for=Mallory”,并且通过广告等诱使 Bob 来访问他的网站。当 Bob 访问该网站时,上述 url 就会从Bob的浏览器发向银行,而这个请求会附带Bob浏览器中的cookie一起发向银行服务器。大多数情况下,该请求会失败,因为他要求Bob的认证信息。但是,如果Bob当时恰巧刚访问他的银行后不久,他的浏览器与银行网站之间的session尚未过期,浏览器的cookie之中含有Bob的认证信息。这时,悲剧发生了,这个url请求就会得到响应,钱将从Bob的账号转移到Mallory的账号,而Bob当时毫不知情。等以后Bob发现账户钱少了,即使他去银行查询日志,他也只能发现确实有一个来自于他本人的合法请求转移了资金,没有任何被攻击的痕迹。而Mallory则可以拿到钱后逍遥法外。
实战:https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=60813&highlight=%E6%9F%90BUF
0x01 无防护GET类型csrf(伪造添加成员请求)
这一关没有任何csrf访问措施
首先我们登录test用户
发现有个添加成员功能 用test账号添加 发现只有admin才可以添加
现在用另一个浏览器 ,这里用的搜狗浏览器来登录admin账号
我们把test用户添加用户的url地址,这里是添加一个用户名为111和密码为111的用户请求的地址,我们在登录了admin账号的搜狗浏览器新建窗口打开
http://www.csrf_demo.com/csrf_1.php?username=111&password=1111&submit=%E6%B7%BB%E5%8A%A0
发现添加成功 完成了一次最简单的csrf攻击,伪造了admin添加成员的请求
提一下,真实攻击中你有很多手段把csrf进行隐蔽,例如短网址变化、恶意网站加载csrf请求、配合xss进行攻击,形式多种多样。
0x02 无防护POST类型csrf(伪造添加成员请求)
这次添加成员的请求是post ,我们就需要构造表单
可以使用CSRFTester 或者使用burp自带的csrf POC
下面以burp自带的csrf POC 为例子 ,登录test用户抓取到添加成员的数据包
构造csrf表单
修改好后生成对应的html,
然后用admin账号 打开这个表单,点击按钮
可以发现也构造出了添加222用户的请求。
这里是个简单的csrf poc。实战中你可以把表单构造成自动提交,或者提交后转到某个具有迷惑性的地址来隐蔽你的csrf攻击。
0x03 绕过CSRF防护之Referer检查(伪造购买商品请求)
这里我们又需要使用test构造admin账号的购买请求。这一关有的是referer的验证,如下,还是通过第一关的方法构造url会出现提示。
原因是代码中验证了http包的来源地址。
if(@!eregi( $_SERVER[ 'SERVER_NAME' ], $_SERVER[ 'HTTP_REFERER' ] )){js_alert("疑似csrf攻击!购买失败!",'#');exit; }$username = $_SESSION['username'];if(isset($_POST['checkbox'])){$checkbox = $_POST['checkbox'];echo "<font size=5>".$username."用户您好!您购买的订单如下:</font><br><br>";echo "<font size=4>".implode(',',$checkbox)."</font>";}else{js_alert("请选择您需要购买的商品!",'#');}}
可以看到如果referer字段的值如果不包括host字段的值会购买失败,那么我们可以怎么伪造绕过这个referer限制呢
我们可以把文件名设置为host的内容,这样就绕过检测了,例如这里我们的host值是
那我们的csrf poc的文件名可以设置为www.csrf_demo.com.html
ok,绕过了这个限制还需要解决一个问题,如果是直接发html给管理,他在本地打开文件是没有Referer这个http头的,那我们就需要把这个html上传到网站上。这里我就上传在靶场,实战中肯定是一个外网可以访问的攻击网站,这个不影响实验。
这样构造url发送给管理,
http://www.csrf_demo.com/www.csrf_demo.com.html
csrf攻击成功。
0x04 配合XSS漏洞获取token后进行csrf攻击(伪造添加成员请求)
这关用了防csrf的token。具体含义自己百度,token简单的来说就是防止表单重复提交和csrf攻击,每次页面提交都会带上token值,token值每次页面提交的都不同,是唯一的令牌,服务器后端会验证这个token来验证你的请求是否是csrf伪造的。
那我们在实战中怎么绕过这个token呢,csrf单独是无法获得token的,所以必须配合xss来完成。
exp:
<iframe src="http://www.csrf_demo.com/csrf_4.php?url=csrf_4.php" id="hack" border="0" style="display:none;"> </iframe> <body οnlοad="attack()"><form method="GET" id="transfer" name="transfer" action="http://www.csrf_demo.com/csrf_4.php?url=csrf_4.php"><input type="hidden" name="username" value="222"><input type="hidden" name="password" value="222"><input type="hidden" name="user_token" value=""> <input type="submit" name="submit" value="submit"></form></body> <script type="text/javascript"> function attack(){document.getElementsByName('user_token')[0].value=document.getElementById("hack").contentWindow.document.getElementsByName('user_token')[0].value;} </script>
攻击思路是当受害者点击进入这个页面,脚本会通过一个看不见框架偷偷访问修改密码的页面,获取页面中的token,点击按钮后并向服务器发送改密请求,以完成CSRF攻击。
你可以把exp放在网站的目录下。然后发送给admin(这里我们就自己登录admin账号,点击csrf的连接)
使用admin账号访问这个文件:http://www.csrf_demo.com/exp.html
点击按钮后发现 伪造请求成功。
也可以保存为html,以文件的形式发过去,
也是可以成功的
3.CSRF漏洞检测
1.检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
2.随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞检测的工具,若CSRFTester,CSRF Request Builder等。
CSRF与XSS的区别:最大的区别就是CSRF没有盗取用户的Cookie,而是直接的利用了浏览器的Cookie让用户去执行某个动作。
4.CSRF挖掘技巧
各种功能点
密码修改处
点赞
转账
注销
删除
CSRF漏洞检测与发现相关推荐
- 自动检测CSRF漏洞的工具
burp 抓包(有敏感接口的,比如转账) 右键---->Engagement Tools----〉Generate CSRF PoC 将HTML代码粘贴到sublime或者NotePad++ 保 ...
- 网站漏洞检测针对区块链网站安全分析
2019独角兽企业重金招聘Python工程师标准>>> 目前移动互联网中,区块链的网站越来越多,在区块链安全上,很多都存在着网站漏洞,区块链的充值,会员账号的存储性XSS窃取漏洞,账 ...
- csrf漏洞防御方案_CSRF原理实战及防御手段
注:本文仅供学习参考 csrf定义: CSRF跨站点请求伪造(Cross-Site Request Forgery)攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是 ...
- 《WEB安全漏洞100讲》(第4讲)CSRF漏洞
1.CSRF漏洞原理 CSRF(Cross-site request forgery),跨站请求伪造,简写 CSRF/XSRF.指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶 ...
- 【CSRF技巧拓展】————1、用代码来细说Csrf漏洞危害以及防御
0x01 CSRF介绍: CSRF(Cross-site request forgery)跨站请求伪造,也被称为"One Click Attack"或者Session Riding ...
- 一个express老系统csrf漏洞修复
一个运行快两年的express框架web系统,被安全部门审核存在csrf漏洞,项目使用的前后端分离的形式,所有功能操作,通过ajax调用后端接口来完成,查了很多资料,一个基本的防御思想就是验证随机数了 ...
- 安卓拒绝服务漏洞分析及漏洞检测
"超级拒绝服务漏洞"是一个安卓通用型拒绝服务漏洞,恶意***者可能利用此漏洞让手机中的任意应用崩溃无法正常工作,几乎影响目前市面上所有的安卓APP应用. 漏洞分析: 0xr0ot和 ...
- python漏洞检测脚本_URL重定向漏洞,python打造URL重定向漏洞检测脚本
前言: 今天学习了重定向漏洞,这个漏洞比较好理解 漏洞名:URL重定向漏洞 威胁:低 漏洞的来源:开发者对head头做好对应的过滤和限制 例子: 有漏洞的网站:http://a.com/x.php?u ...
- armitage识别不了漏洞_Shiro RememberMe 漏洞检测的探索之路
前言 Shiro 是 Apache 旗下的一个用于权限管理的开源框架,提供开箱即用的身份验证.授权.密码套件和会话管理等功能.该框架在 2016 年报出了一个著名的漏洞--Shiro-550,即 Re ...
最新文章
- 脱机多维数据集CUB文件的生成
- 图像傅立叶变换的物理意义
- .NET中判断国内IP和国外IP
- 云原生,开发者的黄金时代
- html td装满图片,HTML:桌子上的Td不满
- 满足多个条件的JAVA语句_关于Java:关于具有多个条件的If语句的快速问题
- 深入解析:DB2 V10.5新特性列式存储表的优点与缺点
- 【转】JVM内存管理:深入垃圾收集器与内存分配策略
- SpringCloud Feign使用详解
- win7右下角无线网图标显示未连接,但是实际上已连接上,也能上网
- 2级c语言程序设计无忧考试,全国计算机二级c语言考试真题
- JavaWeb项目打包运行
- 长江流域图——只希望“霉”雨快走开
- 中英文1:2等宽字体
- mysql front修改数据传奇_如何修改传奇数据库HeroDB名称?
- 【AI框架】MMDetection3D 使用指南
- mongoDB数据库mong.conf配置文件的问题
- Kinetics-400数据集简介及下载
- win10内置Ubuntu安装图形界面
- Android笔记之天气预报接口
热门文章
- 学会这120个PS技巧,让你的设计牛起来!
- 城市规划计算机辅助设计技术第二部分,城市规划计算机辅助设计
- java实现蓝牙通信程序_Android蓝牙通信聊天实现发送和接受功能
- Android开机阶段log分析
- 控制系统的观测器基础知识
- 每日一题(二二)var fullname = 'a'; var obj = { fullname: 'b', prop : { fullname: 'c'
- 《java8高级应用与开发》读书笔记(二)
- JAVA中SimpleDateFormat的用法详解
- 编写高效的软件缺陷报告
- 威纶通解摸屏与变频器通信程序 不用PLC与变频器通讯威纶通MT6070IH触摸屏直接与松下VF100变频器MODBUS RTU通讯,