[鹤城杯 2021]Middle magic 解题思路过程

news2024/11/25 0:54:47

过程

打开题目,是一道PHP的代码审计。代码如下:

<?php
highlight_file(__FILE__);
include "./flag.php";
include "./result.php";
if(isset($_GET['aaa']) && strlen($_GET['aaa']) < 20){

    $aaa = preg_replace('/^(.*)level(.*)$/', '${1}<!-- filtered -->${2}', $_GET['aaa']);

    if(preg_match('/pass_the_level_1#/', $aaa)){
        echo "here is level 2";
        
        if (isset($_POST['admin']) and isset($_POST['root_pwd'])) {
            if ($_POST['admin'] == $_POST['root_pwd'])
                echo '<p>The level 2 can not pass!</p>';
        // START FORM PROCESSING    
            else if (sha1($_POST['admin']) === sha1($_POST['root_pwd'])){
                echo "here is level 3,do you kown how to overcome it?";
                if (isset($_POST['level_3'])) {
                    $level_3 = json_decode($_POST['level_3']);
                    
                    if ($level_3->result == $result) {
                        
                        echo "success:".$flag;
                    }
                    else {
                        echo "you never beat me!";
                    }
                }
                else{
                    echo "out";
                }
            }
            else{
                
                die("no");
            }
        // perform validations on the form data
        }
        else{
            echo '<p>out!</p>';
        }

    }
    
    else{
        echo 'nonono!';
    }

    echo '<hr>';
}

?>

分析代码,需要过三关,才能拿到flag。

  1. 需要传入一个参数,对其进行正则替换掉/^(.*)level(.*)$/得到$aaa,再对$aaa正则匹配,需匹配到pass_the_level_1#
  2. 需要保证$_POST['admin'] == $_POST['root_pwd'],且要通过判断sha1($_POST['admin']) === sha1($_POST['root_pwd'])
  3. 需要传入一个level_3参数,经过json_decode()之后与内置的$result变量弱类型比较相等(==)

bypass:

  1. 正则匹配单行模式(?s)下 ,.号将匹配所有字符,包括换行符;但默认情况下点号不匹配换行符,因此给了绕过(.*)的可能。payload:%0apass_the_level_1%23,%0a、%23分别是换行符、井号的URL编码。
  2. 利用哈希函数无法处理数组,会返回结果null,传入两个数组参数令其不一致绕过$_POST['admin'] == $_POST['root_pwd'],再sha1($_POST['admin']) === sha1($_POST['root_pwd'])时,null===null从而绕过。
  3. 利用json_decode()的缺陷与php弱类型比较,“json_decode()函数用于对json格式数据进行json解码操作,对于一个json类型的字符串,会解密成一个数组;存在一个0=="efeaf"的Bypass缺陷”,如下:
<?php
$key = "JsonTest";
if (isset($_GET['data'])) {
	$data = json_decode($_GET['data']);
	if ($data->key == $key) {
		echo "Bypass json_decode()!";
	} else {
		echo "No...";
	}
}
?>

因此最终payload:
payload

acquisition

  1. 正则匹配默认不匹配换行来bypass.
  2. 哈希函数处理数组时为null
  3. php弱类型比较中json_decode()函数的缺陷

reference

https://johnfrod.top/ctf/2021-%E9%B9%A4%E5%9F%8E%E6%9D%AF/
https://www.mi1k7ea.com/2019/06/21/PHP%E5%BC%B1%E7%B1%BB%E5%9E%8B%E5%B0%8F%E7%BB%93/#0x09-json-decode

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/873339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

河道水位自动监测预警 yolov5

河道水位自动监测预警系统基于yolov5网络模型AI视频智能水尺读数技术&#xff0c;河道水位自动监测预警系统通过在河道周边布设监控摄像头&#xff0c;实时监测水位的变化&#xff0c;一旦水位超过预设阈值&#xff0c;将自动发出预警信号&#xff0c;并提示相关人员采取相应的…

计算机网络-物理层(一)物理层的概念与传输媒体

计算机网络-物理层&#xff08;一&#xff09;物理层的概念与传输媒体 物理层相关概念 物理层的作用用来解决在各种传输媒体上传输比特0和1的问题&#xff0c;进而为数据链路层提供透明(看不见)传输比特流的服务物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据…

Java 基础知识点

Object 类相关方法 getClass 获取当前运行时对象的 Class 对象。 hashCode 返回对象的 hash 码。 clone 拷贝当前对象&#xff0c; 必须实现 Cloneable 接口。浅拷贝对基本类型进行值拷贝&#xff0c;对引用类型拷贝引用&#xff1b;深拷贝对基本类型进行值拷贝&#xff0c;对…

CentOS7.7.1908升级python3版本

介绍 本文将详细介绍在CentOS7.7.1908系统的服务器将自带的python版本升级到3.8.0版本的过程。 在升级前CentOS7.7.1908中已经存在旧python版本。 查看CentOS版本命令&#xff1a; cat /etc/centos-release升级前后的python版本&#xff08;python3升级前为3.6.8&#xff09…

开箱报告,Simulink Toolbox库模块使用指南(三)——Simscape 电路仿真模块

文章目录 前言 Simscape 电路仿真模块 模型搭建 仿真求解 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;一&#xff09;——powergui模块》 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;二&#xf…

grafana中利用变量来添加dashboard详情页地址实现点击跳转

背景 最近弄grafana的dashboard,突然想到各个dashboard之前可以直接跳转到不同详细页面的面板,于是找了找实现方法 实现 以stat 格式的面板为例,显示出各个pod的对应状态, PromQL是(avg(kube_pod_status_phase{phase"Running", namespace!"kube-system"…

用友U8+CRM 任意文件上传+读取漏洞复现(HW0day)

0x01 产品简介 用友U8 CRM客户关系管理系统是一款专业的企业级CRM软件&#xff0c;旨在帮助企业高效管理客户关系、提升销售业绩和提供优质的客户服务。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 getemaildata.php 文件存在任意文件上传和任意文件读取漏洞&#xff0c;攻击…

缓存 基础

在项目里面缓存是怎么用的? 项目中缓存是如何使用的&#xff1f;为什么要用缓存&#xff1f;缓存使用不当会造成什么后果? 这个问题&#xff0c;互联网公司必问&#xff0c;要是一个人连缓存都不太清楚&#xff0c;那确实比较尴尬。 只要问到缓存&#xff0c;上来第一个问题…

大数据课程I4——Kafka的零拷贝技术

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 掌握Kafka的零拷贝技术&#xff1b; ⚪ 了解常规的文件传输过程&#xff1b; 一、常规的网络传输原理 表面上一个很简单的网络文件输出的过程&#xff0c;在OS底层&…

leetcode 力扣刷题 滑动窗口 部分题解(记录)

力扣刷题 滑动窗口相关的部分题解 209. 长度最小的子数组904. 水果成篮76. 最小覆盖子串 209. 长度最小的子数组 leetcode题目链接 209.长度最小的子数组 题目内容是这样的&#xff1a;给定一个含有 n个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的…

不同路径 II——力扣63

class Solution {public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n=

Java中处理表格

大家好 , 我是苏麟 , 也是很久没有更新了 , 今天带来一个很好使用的一个库 easyexcel. JAVA后端开发中可能会遇到一个问题 , 就是处理Execel表格 , 当然不一定非要用Java 我们在这里只说在Java里怎么去处理表格 . Easy Excel 我们今天要说到就是 Easy Excel , 这个是阿里的项…

学习笔记整理-JS-01-语法与变量

文章目录 一、语法与变量1. 初识JavaScript2. JavaScript的历史3. JavaScript与ECMAScript的关系4. JavaScript的体系5. JavaScript的语言风格和特性 二、语法1. JavaScript的书写位置2. 认识输出语句3. REPL环境&#xff0c;交互式解析器4. 变量是什么5. 重点内容 一、语法与变…

无涯教程-Perl - redo函数

描述 此函数将重新启动当前循环,而不会强制判断控制语句。块中不再执行任何语句。如果存在继续块,将不会执行。如果指定了LABEL,则在LABEL标识的循环开始时重新开始执行。 语法 以下是此函数的简单语法- redo LABELredo返回值 此函数不返回任何值。 例 以下是显示其基本…

J35复杂链表的复制

题目地址&#xff1a;复杂链表的复制_牛客题霸_牛客网 题目回顾&#xff1a; 解题思路&#xff1a; 这里我们采用双指针的方法。 我们在创建节点的时候&#xff0c;可能当前节点创建了&#xff0c;但是当前节点的随机指针指向的节点还没创建&#xff0c;这种情况下&#xff…

【python】-【】

文章目录 转义字符和原字符二进制与字符编码标识符和保留字变量的定义和使用变量字符串列表for 一、print会输出①数字②字符串&#xff08;必须加引号&#xff09;③含有运算符的表达式&#xff08;例如 31 其中3&#xff0c;1是操作数&#xff0c;是运算符&#xff09;&#…

zabbix监控mysql数据库、nginx、Tomcat

文章目录 一.zabbix监控mysql数据库1.环境规划2.zabbix-server安装部署&#xff08;192.168.198.17&#xff09;3.zabbix-mysql安装部署&#xff08;192.168.198.15&#xff09;3.1 部署 zabbix 客户端3.2 服务端验证 zabbix-agent2 的连通性&#xff08;192.168.198.17&#x…

使用script标签解决跨域问题,但是只能使用get请求,且不需要获取get请求的数据,例如埋点,只需要触发后发送get请求,而不需要获取返回的参数

在项目中&#xff0c;使用埋点的时候&#xff0c;因为使用的是外部提供的接口&#xff0c;所以直接请求的时候&#xff0c;前端会报跨域的问题&#xff0c;本着不麻烦后端的想法&#xff0c;怎怎么前端实现跨域而完全不需要后段的配合&#xff0c;这时候就想到了通过script标签…

Steam搬砖项目

最近分享了不少关于Steam搬砖项目的文章&#xff0c;但是也有一部分人说&#xff0c;项目不知道如何赚钱的。 今天这篇文章&#xff0c;就分享一下&#xff0c;对于Steam游戏搬砖项目&#xff0c;他是靠什么来挣钱的。 那讲解之前&#xff0c;先回复一下&#xff0c;另外一个问…

【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native

说在前面 rust新手&#xff0c;egui没啥找到啥教程&#xff0c;这里自己记录下学习过程环境&#xff1a;windows11 22H2rust版本&#xff1a;rustc 1.71.1egui版本&#xff1a;0.22.0eframe版本&#xff1a;0.22.0上一篇&#xff1a;这里 开始 首先让我们看看main.rs中有些什么…