攻防世界web新手第四题easyphp

<?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;
}

?> Emmm...

这是题目
惯例:代码审查

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

这里很明显,若key1与key2均为真,则打印flag变量,猜测flag变量就是结果,来自Hgfkg.php,所以我们的目标是让key1与key2为1或true!

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
        $key1 = 1;

这里可以看出,我们需要构造a和b,满足两个if条件,使key1赋值为1,

$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;

这里可以看出,我们需要构造c,满足两个if条件使key2赋值为1。
到这里我们基本明确了问题就是a,b,c如何构造的问题。

接下来我们看一下条件:
对于a和b,需要满足这两个条件

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6))

isset($a):a不为空

intval($a) > 6000000:a强制类型转换后大于60000000

strlen($a)<= 3:a变量字符串长度小于等于3

isset($b):b不为空。

‘8b184b’ === substr(md5($b),-6,6):b的md5加密后后六位要全等于8b184b。

条件要求总结完毕,接下来挨个突破:
a变量长度小于等于3且类型转换后大于6000000,所以大概率是科学计数法,所以猜测a可以是1e8。

b变量的md5加密后后六位要全等于8b184b。
ai写脚本爆破

<?php
function findNumberWithMd5Suffix($suffix, $start = 0, $end = PHP_INT_MAX) {
    for ($i = $start; $i <= $end; $i++) {
        // 将数字转换为字符串并计算MD5哈希
        $hash = md5((string)$i);
        // 检查哈希值的后六位
        if (substr($hash, -6) === $suffix) {
            return $i;
        }
    }

    return null; // 如果没有找到,则返回null
}

// 寻找符合条件的数字
$bValue = findNumberWithMd5Suffix('8b184b');

if ($bValue !== null) {
    echo "找到的b的值: " . $bValue . "\n";
} else {
    echo "在给定范围内未找到符合条件的数字。\n";
}
?>

用AI生成爆破代码如上,得到b的值为53724.
在这里插入图片描述
接下来就是构造C了,
对于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])){

c需为Jason格式的值,c的m键对应的值不是数字且不是数字字符串,c的m键的值要大于2022
c的n键对应的值需为数组且该数组长度为2且第一位为数组,
使用AI写代码构造C
在这里插入图片描述
至此,a,b,c已构造完毕
构造url:http://61.147.171.105:64218/?a=1e8&&b=53724&&c={“m”:“2024Year_”,“n”:[[0],9]}
提交:显示no
在这里插入图片描述
再结合代码:

$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;

可以看出我们把c的n键对应的值漏了一些要求,要求数组c内要包含“DGGJ”,又要求不能包含,所以只能考虑绕过了,
array_search函数会先转换成相同类型再进行判定,所以我们的c的n键"n":[[0],9]要改为"n":[[0],0],此时array_search(“DGGJ”, $c[“n”])为true,就不会执行后面的判定了,这里是因为字符串“DGGJ”转换为数值类型相当于0,所以后面一个只能是0,至于前面数组内的值就任意了,再测试
在这里插入图片描述

拿到flag

总结:考察的是代码理解,payload构造和函数绕过
知识点:
1.@
对于这个 @ 符号,之前很少在意,看别人的代码看见时,只知道它是错误屏蔽的符号。今天再一次接触到了它,不得不认真了解一下。
@ 是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。想想看,你的文件路径要是完全暴露给黑客,他们该有多开心,因此,在一些敏感的文件输出的位置,还是记得加上 @ 符号!
2.substr

`substr()` 函数是 PHP 中用于处理字符串的强大工具,它允许开发者从给定的字符串中提取出特定长度的子字符串。下面将详细解释 `substr()` 函数的使用方法及其应用场景。
1. **基本用法**
`substr()` 函数接收三个参数:原始字符串 `$string`,起始位置 `$start` 和截取长度 `$length`- `$string`:要截取的原始字符串。
- `$start`:从字符串的哪个位置开始截取。如果 `$start` 是正数,那么它表示从字符串开头算起的字符位置。如果 `$start` 是负数,那么它表示从字符串末尾算起的字符位置。
- `$length`:截取的子字符串长度。如果省略或者设置为 `null`,则会截取到字符串的末尾。

3.is_numeric()函数,作用是判断输入是不是数字或数字字符串。
4.array_search
array_search()函数在数组中搜索值并返回键。
array_search函数 类似于==
在进行比较的时候,会先将字符串类型转化成相同类型,再比较
如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python大数据可视化:基于Python的王者荣耀战队的数据分析系统设计与实现_flask+hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 比赛信息管理 看板展示 系统管理 摘要 本文使用Python与…

【已解决】pyinstaller打包ico图片报错:OSError: [WinError 225] 无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。

起因&#xff1a; pyinstaller加上 --icon 参数打包时报错。 命令如下&#xff1a; 解决&#xff1a; 关闭 Windows 的病毒防护即可&#xff0c;步骤如下。 点屏幕右下角通知栏&#xff0c;进入“病毒和威胁防护”&#xff1a; 打开&#xff1a; 关闭实时保护&#xff08…

Cloudflare 边缘网络架构:无处不在的 BPF-2019

大家觉得有意义和帮助记得及时关注和点赞!!! 译者序边缘网络DDos Mitigation负载均衡TCP/UDP Socket DispatchSOCKMAPPrometheus - ebpf_exporter无处不在的 eBPF 边缘网络 Cloudflare 的服务器运行 Linux 系统。 我们的数据中心分为两类&#xff1a; 大的“核心”数据中心&a…

智慧园区小程序开发制作功能介绍

智慧园区小程序开发制作功能介绍 智慧园区小程序系统作为一款面向园区企业的一站式线上服务平台&#xff0c;可为企业提供数智化的园区办公服务。智慧园区小程序功能介绍 1、园区公告、政策信息查看足不出户掌握最新动态&#xff0c;“园区公告、政策信息”等信息。首页点击对应…

基于 Python Django 的农产品销售系统的研究与实现

大家好&#xff0c;我是stormjun&#xff0c;今天为大家带来的是基于 Python Django 的农产品销售系统的研究与实现。该系统采用 Python 语言 开发&#xff0c;MySql 作为数据库&#xff0c;系统功能完善 &#xff0c;实用性强 &#xff0c;可供大学生实战项目参考使用。 博主介…

WEB开发 - Flask 入门:Jinja2 模板语法进阶 Python

在上一阶段&#xff0c;我们一起学习了基于Python地 web框架Flask&#xff0c;并且初步了解了这个框架有一种渲染方式叫做 模板语法&#xff0c;今天&#xff0c;我们一起再来深入地了解和学习这个叫做Jinja2地模板语法。 WEB开发 - Flask 入门&#xff1a;由浅入深地带你学习…

基于SpringBoot在线音乐系统平台功能实现十八

一、前言介绍&#xff1a; 1.1 项目摘要 随着互联网技术的迅猛发展和普及&#xff0c;人们对音乐的获取和欣赏方式发生了巨大改变。传统的音乐播放方式&#xff0c;如CD、磁带或本地下载的音乐文件&#xff0c;已经不能满足用户日益增长的需求。用户更希望通过网络直接获取各…

【YOLOv3】源码(train.py)

概述 主要模块分析 参数解析与初始化 功能&#xff1a;解析命令行参数&#xff0c;设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能&#xff1a;初始化日志记录器&#xff0c;配置监控系统项目经理使用监控和记录工具&#xff0c;实时跟踪施工进度和质量…

[原创](Modern C++)现代C++的第三方库的导入方式: 例如Visual Studio 2022导入GSL 4.1.0

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共23年] 职业生涯: 21年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…

单片机与MQTT协议

MQTT 协议简述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布 / 订阅&#xff08;publish/subscribe&#xff09;模式的 “轻量级” 通讯协议&#xff0c;该协议构建于 TCP/IP 协议上&#xf…

力扣矩阵-算法模版总结

lc-73.矩阵置零-(时隔14天)-12.27 思路&#xff1a;(23min22s) 1.直接遍历遇0将行列设0肯定不行&#xff0c;会影响后续判断&#xff0c;题目又要求原地算法&#xff0c;那么进一步考虑是否可以将元素为0&#xff0c;其行列需要设为0的位置给存储下来&#xff0c;最后再遍历根据…

C++的第一个程序

前言 在学习c之前&#xff0c;你一定还记得c语言的第一个程序 当时刚刚开始进行语言学习 因此告诉到&#xff0c;仅仅需要记住就可以 #include <stdio.h>int main(){printf("Hello World");return 0; }而对于c中的第一个程序&#xff0c;似乎有所变化 C的…

使用jvisualvm远程连接Linux服务器上java进程

使用jvisualvm连接远程服务器有两种方式&#xff1a;JMX和jstatd&#xff0c;两种方式都不能完美支持所有功能&#xff0c;例如JMX不支持VisualGC&#xff0c;jstatd不支持CPU监控&#xff0c;实际使用可同时配置上并按需选用。 一、jstatd连接 1、在Linux中配置远程授权 要监…

麒麟操作系统服务架构保姆级教程(六)部署PHP环境

如果你想拥有你从未拥有过的东西&#xff0c;那么你必须去做你从未做过的事情 本来小屁打算直接写LNMP架构的&#xff08;LB负载均衡NginxmysqlPHP&#xff09;&#xff0c;但是发现之前用过的包是红帽的吗&#xff0c;在麒麟上没法直接部署PHP&#xff0c;所以小屁用两天的时间…

SpringCloudAlibaba升级手册-nacos问题记录

目录 一、前言 二、升级过程 1.问题 2.原因 3.出处 4.理论解决 5.测试环境问题 6.Spring Cloud Alibaba版本对比 7. Spring Cloud Alibaba适配组件版本对比 8.降低Spring Cloud版本 9.SpringCloud与SpringBoot兼容对比表 10.naocs-client版本对比 三、最终解决 一…

[SAP ABAP] 程序备份

备份当前程序到本地的方式如下&#xff1a; 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 ​ 3.快捷键&#xff0c;支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角&#xff0c;点击【Options选项】图…

距离25年PMP第一次考试还有70多天,如何短期通过考试?

距离205年3月考试时间具体还有78天&#xff0c;除去过年放假的时间还有2个月多一点吧&#xff0c;可以说复习时间并不是很充裕&#xff0c;那么在2个月甚至不足两个月的时间里我们该如何应对呢&#xff1f;如何短期内上岸&#xff1f; 接下来给大家分享一下我的复习方法&#…

【AIGC-ChatGPT副业提示词指令 - 动图】魔法咖啡馆:一个融合创意与治愈的互动体验设计

引言 在当今快节奏的生活中&#xff0c;咖啡早已不仅仅是提神醒脑的饮品&#xff0c;更成为了一种情感寄托和生活态度的表达。本文将介绍一个独特的"魔法咖啡馆"互动体验设计&#xff0c;通过将咖啡与情感、魔法元素相结合&#xff0c;创造出一个充满想象力和治愈感…

通过远程控制软件实现企业高效协作

在这个信息技术迅猛发展的时代&#xff0c;远程办公已经成为一种趋势&#xff0c;而远程控制软件则是连接分散团队的重要工具。技术的革新不仅推动了远程控制软件的广泛应用&#xff0c;也为现代办公带来了高效的协作体验。本文将探讨远程控制软件的发展&#xff0c;并以RayLin…

解决 vue3 中 echarts图表在el-dialog中显示问题

原因&#xff1a; 第一次点开不显示图表&#xff0c;第二次点开虽然显示图表&#xff0c;但是图表挤在一起&#xff0c;页面检查发现宽高只有100px,但是明明已经设置样式宽高100% 这可能是由于 el-dialog 还没有完全渲染完成&#xff0c;而你的 echarts 组件已经开始尝试渲染图…