当前位置: 首页 > news >正文

pikachu靶场通关笔记16 CSRF关卡02-CSRF(POST)

目录

一、CSRF原理

二、源码分析

三、渗透实战

1、构造CSRF链接

(1)登录

(2)bp设置inception on

(3)修改个人信息

(4)构造CSRF链接

2、模拟受害者登录

3、诱导受害者点击


本系列为通过《pikachu靶场通关笔记》的CSRF关卡(共3关)渗透集合,通过对CSRF关卡源码的代码审计找到安全风险的真实原因,讲解CSRF原理并进行渗透实践,本文为CSRF02关卡XSS之POST关卡的渗透部分。

一、CSRF原理

CSRF(Cross - Site Request Forgery)即跨站请求伪造,攻击者通过诱导用户点击恶意链接或访问恶意网站,利用用户已登录的身份信息,在用户不知情的情况下,以用户的名义向目标网站发送恶意请求,执行一些非用户本意的操作,如转账、修改密码、发布虚假信息等。由于请求是从用户浏览器发出,且携带了用户的身份认证信息,目标网站难以区分请求的合法性,从而导致用户的权益受到侵害。

二、源码分析

进入pikachu靶场CSRF-POST关卡,登陆后进入个人资料页面,点击修改资料,进入到编辑资料的页面,完整URL如下所示。

http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_post_edit.php

接下来查看csrf_post_edit.php的源码内容,详细注释后如下所示。

<?php
/*** Created by runner.han* There is nothing new under the sun*/// 获取当前页面文件名
$SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);// 设置页面导航菜单的active状态
if ($SELF_PAGE = "csrf_post_edit.php"){$ACTIVE = array('','','','','','','','','','','','','','','','','','','','','','','','','active open','','','','active','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','');
}// 引入配置文件、函数库和数据库连接
$PIKA_ROOT_DIR =  "../../../";
include_once $PIKA_ROOT_DIR . 'header.php';
include_once $PIKA_ROOT_DIR."inc/config.inc.php";
include_once $PIKA_ROOT_DIR."inc/function.php";
include_once $PIKA_ROOT_DIR."inc/mysql.inc.php";// 连接数据库
$link=connect();// 检查用户是否登录,未登录则跳转到登录页面
if(!check_csrf_login($link)){header("location:csrf_post_login.php");
}$html1='';
// 处理表单提交
if(isset($_POST['submit'])){// 检查所有字段是否都有值if($_POST['sex']!=null && $_POST['phonenum']!=null && $_POST['add']!=null && $_POST['email']!=null){// 转义输入数据防止SQL注入$getdata=escape($link, $_POST);// 更新会员信息$query="update member set sex='{$getdata['sex']}',phonenum='{$getdata['phonenum']}',address='{$getdata['add']}',email='{$getdata['email']}' where username='{$_SESSION['csrf']['username']}'";$result=execute($link, $query);// 判断更新是否成功if(mysqli_affected_rows($link)==1 || mysqli_affected_rows($link)==0){header("location:csrf_post.php");}else {$html1.='修改失败,请重试';}}
}
?>

这段 PHP 代码的主要功能是会员信息修改页面,用于处理用户信息的修改操作。相对于上一关卡(CSRF-GET),主要区别是参数由GET传入改为了POST传入,具体步骤如下所示。

  • 页面信息处理:获取当前页面文件名,若为 csrf_post_edit.php 则设置页面激活状态。
  • 文件包含与数据库连接:包含项目的头部文件、配置文件、函数库文件和 MySQL 操作文件,建立数据库连接。
  • 用户登录验证:检查用户是否登录,未登录则重定向到登录页面。
  • 表单提交处理:当用户通过 POST 请求提交表单时,验证用户输入信息,对输入数据进行转义处理,然后执行 SQL 更新语句更新用户信息。根据更新结果,要么重定向到指定页面,要么显示错误提示信息。
  • 页面显示:从数据库查询当前用户的信息,将其显示在表单中,用户可以修改信息并提交。

同样这段代码存在 CSRF安全风险,主要原因如下所示。

  • 缺乏 CSRF 令牌验证:代码中没有使用 CSRF 令牌来验证请求的合法性。攻击者可以构造一个恶意页面,在页面中使用 JavaScript 或 HTML 表单模拟用户向该页面发起 POST 请求。由于用户已经登录目标网站,浏览器会自动携带用户的会话信息(如 Cookie),服务器会将该请求视为合法请求,从而执行用户信息的修改操作。
  • 未验证请求来源:代码没有对请求的来源进行验证,无法判断请求是否来自合法的页面。攻击者可以在任何网站上构造恶意请求,只要用户登录了目标网站,就可能受到攻击。

三、渗透实战

1、构造CSRF链接

(1)登录

打开pikachu靶场CSRF(post)题目页面,如下所示进入到登陆页面。

http://127.0.0.1/pikachu/vul/csrf/csrfpost/csrf_post_login.php

输入用户名lili密码123456,点击登录后效果如下所示。

(2)bp设置inception on

burpsuite设置拦截报文,inception设置为on,如下所示。

(3)修改个人信息

进入到个人会员中心后,点击修改个人信息,将信息修改为girl,11122223333,44,555@pikachu.com,同时打开bp拦截,再点击submit。

(4)构造CSRF链接

bp将修改个人信息的报文拦截到,右键点击相关工具—>Engagement tools—>Generate CSRF PoC生成。

此时进入到CSRF-POC generate页面,点击copy html页面。 

接下来打开小皮工具phpstudy,通过“网站-管理-打开根目录”的路径打开源码根目录文件夹,如下所示。

在根目录中新建一个html文件(命名为csrf_姓名缩写.html),把刚复制的代码粘贴进去并保存,命名为csrf_mooyuan.html。此时,恶意构造的URL地址如下所示。

http://127.0.0.1/csrf_mooyuan.html

bp设置inceptiron off,此时浏览器页面如下所示。 

此时可以看到页面中lili的个人信息均已正确修改,接下来在浏览器中退出登录。 

2、模拟受害者登录

本次我们模拟受害者,输入另一个用户名及其密码(这里选择mooyuan和123456),点击登录了显示mooyuan用户的个人信息,此时个人信息为GET关卡修改,具体页面如下所示。

3、诱导受害者点击

模拟受害者点击恶意URL浏览器输入如下CSRF链接。

http://127.0.0.1/csrf_mooyuan.html

点击submit request按钮, 显示mooyuan账户更改信息成功,说明渗透成功,具体如下所示。

http://www.xdnf.cn/news/879841.html

相关文章:

  • Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
  • Linux系统编程-DAY10(TCP操作)
  • elementUI点击浏览table所选行数据查看文档
  • linux 故障处置通用流程-36计-14-27
  • JVM 核心概念深度解析
  • CB/T 3361-2019 甲板敷料检测
  • 中小企业IT运维痛点与OMS主动运维体系解析
  • 装一台水冷主机
  • uniappx插件nutpi-idcard 开发与使用指南(适配鸿蒙)
  • Linux C学习路线全概及知识点笔记2(仅供个人参考)
  • uniapp实现的简约美观的星级评分组件
  • uniapp图片文档预览
  • PHP 8.5 即将发布:管道操作符、强力调试
  • springboot mysql/mariadb迁移成oceanbase
  • 基于Java(SpringBoot、Mybatis、SpringMvc)+MySQL实现(Web)小二结账系统
  • 【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
  • 【SSM】SpringMVC学习笔记7:前后端数据传输协议和异常处理
  • 阿里云事件总线 EventBridge 正式商业化,构建智能化时代的企业级云上事件枢纽
  • 【Spark征服之路-2.2-安装部署Spark(二)】
  • 力扣LeetBook数组和字符串--二维数组
  • 【无标题】路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华
  • 网络测试实战:金融数据传输的生死时速
  • C++学习-入门到精通【14】标准库算法
  • C++11实现TCP网络通讯服务端处理逻辑简化版
  • ARM处理器工作模式
  • MCP通信方式之Streamable HTTP
  • ZooKeeper 安装教程(Windows + Linux 双平台)
  • Redis 安装配置和性能优化
  • 【bug】Error: /undefinedfilename in (/tmp/ocrmypdf.io.9xfn1e3b/origin.pdf)
  • 仓库拉下ssm项目配置启动