【攻防世界】江苏工匠杯 Web easyphp

news2024/11/18 14:00:18

打开页面是一个代码审计的题目,是我不太熟悉的东西,但是没关系,我们可以学是吧,以下为源代码

<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;

$a = $_GET['a'];
$b = $_GET['b'];

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
        $key1 = 1;
        }else{
            die("Emmm...再想想");
        }
    }else{
    die("Emmm...");
}

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
        $d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;
        foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;
        }
        $key2 = 1;
    }else{
        die("no hack");
    }
}else{
    die("no");
}

if($key1 && $key2){
    include "Hgfks.php";
    echo "You're right"."\n";
    echo $flag;
}

?>

总思路

我们先大致看一遍代码,看他需要满足怎么样的需求
先看最后这段

if($key1 && $key2){
    include "Hgfks.php";
    echo "You're right"."\n";
    echo $flag;
}

需要key1和key2都为真,然后再输出flag,我们看看key1和key2分别需要什么条件
下面来看这段代码

$a = $_GET['a'];
$b = $_GET['b'];

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
        $key1 = 1;
        }else{
            die("Emmm...再想想");
        }
    }else{
    die("Emmm...");
}

需要传入两个值,分别为a,b

参数a

这里有两个if判断,我们先看第一个

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3)

需要我们传入的a大于6000000,并且长度小于3,我们可以使用科学计数法来实现a=6e7来实现

参数b

第二个if判断

if(isset($b) && '8b184b' === substr(md5($b),-6,6))

需要b参数经过md5计算后,后六位字符串为8b184b,我们写一个脚本跑一下,看是多少
在这里插入图片描述
可以看出是53724,以下为脚本,可以复制使用

import hashlib
for i in range(1000000):
    m2 = hashlib.md5()
    m2.update(str(i).encode())
    if m2.hexdigest()[-6:] == "8b184b":
        print(i)
        break

这样我们key1就已经搞定了,接下来我们来看看key2怎么操作

参数c

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
        $d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;
        foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;
        }
        $key2 = 1;
    }else{
        die("no hack");
    }
}else{
    die("no");
}

先看第一段

if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)

首先我们得先传入一个数组为c,然后用is_numeric判断c[“m”]是不是数字,并且把判断取反,这里的意思就是,不能是数字,然后c[“m”]需要大于2022

is_numeric函数如果整个 expression 的运算结果为数字,则 IsNumeric 返回 True;否则返回 False
意思就是:如果是数字,返回True,但题目有个感叹号,代表取反,变为Flase。所以我们不能让$c[“m”]为数字

这里我就想到了可以使用php的弱比较来绕过,比如2023a
然后看下一段

if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))

意思是$c[“n”]必须为数组,并且这个数组的长度为2,并且$c[“n”][0]也是数组,现在大致的样子就是$c={“m”:“2023a”,“n”:[[1,2],a,b,c]}
我们继续往下面看

$d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;

从$c[“n”]中查找DGGJ,如果查找到了便返回True没找到便返回False,此处必须满足,否则die,我们再往下看

foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;
        }
        $key2 = 1;

使用foreach循环$c[“n”],如果循环到了DGGJ就die,这里肯定跟上面就矛盾了,这里肯定是要绕过的,肯定是有绕过方法的

array_search()绕过:
array_search()与in_array()一样,类型会进行强制转换
所以如果我们传入的是$c[“n”]=0时,那么array_search(“DGGJ”,$c[“n”]),就相当于"DGGJ"==0,这个等式是成立的
所以我们可以用0和DGGJ来作比较,因为0==“DGGJ”,但当判断0==="DGGJ"时为false,所以可以绕过

于是便有了最终的payload

?a=6e7&b=53724&c={“m”:“2023a”,“n”:[[],0]}

得到最终的flag
在这里插入图片描述

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

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

相关文章

【ES实战】ES集群节点迁移与缩容

ES集群节点迁移与缩容 文章目录ES集群节点迁移与缩容master节点迁移场景一场景二场景三data节点迁移数据迁移操作1、查询集群原来的配置2、清空节点数据3、检查是否排空数据迁移原则缩容前置检查项master节点迁移 场景一 集群上的master部署情况&#xff0c;一台机器上同时部…

智能化IT运维平台建设方案,基于智和信通运维体系的高敏捷二次开发

随着企业信息进程不断加速&#xff0c;运维人员需要面对越来越复杂的业务和越来越多样化的用户需求&#xff0c;不断扩展的应用需要越来越合理的模式、越来越智能的工具来保障运维能灵活便捷、安全稳定地开展。企业网络规模的不断扩大&#xff0c;从初期的几台服务器发展到庞大…

Python3 | vscode配置环境

vscode版本&#xff1a;1.74.2python版本&#xff1a;3.9.0win10系统 准备工作&#xff0c;在win10系统 1&#xff0c;安装python3&#xff0c;配置环境变量2&#xff0c;安装vscode 接下来&#xff1a;就可以在vscode配置python环境 1&#xff0c;下载和安装python插件 快…

2022年总结以及2023年的计划

2022年总结以及2023年的计划 文章目录2022年总结以及2023年的计划年终复盘投资理财学习方面前端方面&#xff1a;后端方面&#xff1a;数据库&#xff1a;读书&#xff1a;疫情工作爱情新的一年的展望按照每年的惯例&#xff0c;我每年的总结&#xff0c;复盘会在这几天完成。 …

软件测试精准定位BUG小技巧

目录 一、前置知识 二、定位技巧 一、前置知识 1. 熟透系统业务、团队成员情况 2. 熟悉使用F12或抓包工具 3. 了解HTTP/HTTPS协议&#xff0c;能够区分请求URL、请求头、请求体、入参、响应数据、响应码 4. 具备操作常规Linux命令&#xff0c;能否登入服务器查看Log日志&…

通信原理 | 波段的划分

波段(wave band) 在无线电技术中,波段(wave band)这个名词具有两种含义。 电磁波频谱的划分,例如长波、短波、超短波等波段。 发射机、接收机等设备的工作频率范围的划分。若把工作频率范围分成几个部分,这些部分也称为波段,例如三波段收音机等。 波段划分 波段通常是…

Python实现A股股市情感分析,含数据集可直接运行

Python实现A股股市情感分析&#xff0c;含数据集可直接运行 Stock Market Sentiment Analysis: 股市情感分析 完整代码下载地址&#xff1a;Python实现A股股市情感分析 情绪与股市 情绪与股市关系的研究由来已久&#xff0c;情绪是市场的一个重要影响因素已成为共识。 15年…

【设计模式】状态模式

状态模式 状态机 在操作系统的调度中会存在三种状态&#xff1a;运行、就绪、阻塞。 这是比较典型的状态机的例子。 做产品的时候&#xff0c;我们总能遇到一些比较复杂的逻辑问题&#xff0c;而普通的流程图&#xff0c;或时序图对于对象和状态的解读缺乏直观的描述。 这…

2.16 SPI协议的4种模式

文章目录1、简介2、SPI通讯模式2.1 模式02.2 模式12.3 模式22.4 模式32.5 总述1、简介 四线控制 SDO - 主设备数据输出&#xff0c;从设备输入 对应MOSI SDI - 主设备数据输入&#xff0c;从设备输出 对应MISO SCLK - 时钟信号&#xff0c;由主设备产生 CS - 从设备使能信号&a…

java接口的静态方法

目前java中已经支持定义静态方法 但需要注意一个点 我们先把代码写出来 我们创建一个包 下面创建一个接口 subInterface 接口参考代码如下 public interface subInterface {static void show2() {System.out.println("来自接口的静态方法");} }这里 我们就将 sho…

【C递归和迭代】兔子繁殖问题、青蛙跳台阶问题和汉诺塔问题

【C递归】前言一、兔子繁殖问题&#xff08;一&#xff09;题目描述&#xff08;二&#xff09;解题1.递归做法&#xff08;1&#xff09;成兔&#xff08;i&#xff09;分析&#xff08;ii&#xff09;代码&#xff08;iii&#xff09;代码分析&#xff08;2&#xff09;幼兔&…

C语言实现简易版扫雷

扫雷对于很多人是一种回忆&#xff0c;那么我们如何用C语言程序去实现它呢&#xff1f;这个是在浏览器找到的一个扫雷游戏我用程序实现它利用到字符数组&#xff0c;将一个类似棋盘的东西打印出来&#xff0c;让人们输入坐标&#xff0c;然后进行扫雷。为了程序的简易我一共设计…

论文阅读-社交媒体上的谣言检测:数据集、方法和机会

论文链接&#xff1a;https://aclanthology.org/D19-5008.pdf 目录 摘要 引言 1.1谣言检测 1.2 问题陈述 1.3 用户立场 2 数据集和评估指标 2.1 数据集 2.2 评价指标 3 特点和方法 3.1使用内容信息的方法 3.2 利用用户信息的方法 3.3 基于传播路径和网络的方法 3.4…

volatile 禁止指令重排序

计算机在执行程序时&#xff0c;为了提高性能&#xff0c;编译器和处理器常常会对指令重排&#xff0c;一般分为以下三种&#xff1a; 源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令单线程环境里面确保最终执行结果和代码顺序的…

AWS人工智能主题学习月:深度学习入门笔记

目录 一、深度学习入门课程的学习重点&#x1f4d5; 二、简单介绍一下深度学习和神经网络&#x1f4a1; 1.深度学习 2.神经网络 3.深度学习储备知识拓展 三、深度学习生产生活实际案例&#x1f697; 四、深度学习的框架介绍&#x1f333; 总结 深度学习是机器学习中的一…

Arch/Manjaro安装搜狗输入法

装好系统以后&#xff0c;没有输入法&#xff0c;只能打英文的感觉很难受&#xff0c;现在我们来看看如何给Arch系列的系统安装搜狗输入法。 加入Skype Linux群来这里一起解决问题吧&#xff01;腾讯不支持Linux&#xff0c;让我们一起抛弃微信~ Join conversationhttps://join…

⌈ 2022杀青 ⌋ 一个普通人的年终总结,这一年我获得了更多的新鲜体验 | 普通而平凡的一年 | 向前走,走到光里 | 2023你好

&#x1f49b;年度总结&#x1f49b; 时间转瞬便是年末&#xff0c;在此写下告别 成长是一场踏实的幻灭 有哭有笑有酸有甜&#xff0c;失去与获得也同在 即使生活再忙&#xff0c;也不要忘记那些美好治愈我们的瞬间 起起伏伏的日子&#xff0c;这依然是很长很好的一年&…

python 爬虫 使用selenium 控制浏览器 进行搜索操作

首先需要安装selenium&#xff1a; 第一种&#xff1a;可以自己下载selenium tar.gz包&#xff0c;下载到python目录下&#xff1a;解压到当前文件夹 在cmd命令行&#xff1a;进入到解压包中&#xff0c;进行安装。安装完成之后&#xff0c;如果是eclipse中,请 clean project之…

APSIM练习3:氮循环

在本练习中&#xff0c;您将观察休耕情况下的氮肥循环&#xff1b;尿素转化为铵&#xff0c;铵转化为硝酸盐&#xff0c;以及土壤硝酸盐通过反硝化作用流失。此模拟将介绍编辑一个简单的管理器规则以及绘制模拟结果的更多高级功能。 开始基于 Continuous Wheat.apsim 的新模拟。…

【20221230】栈和队列的小结

一、栈&#xff08;stack&#xff09; 栈是先进后出的&#xff08;FILO&#xff09;的数据结构&#xff0c;它只有一个出口。 二、队列 队列是一种先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;它有两个出口。 栈和队列是STL&#xff08;C标准库&#xff09;里面…