备份是个好习惯 BugKuCTF题目题解

备份是个好习惯 - Bugku CTF平台

这道题目还算是有意思,能够体现 php 是世界上最好的语言。

访问网址,仅仅返回了简单的字符串,理解不到有什么意思,就不去理解了。回到题目,备份是个好习惯,那么可能有备份文件存在,使用dirsearch查找文件,找到 index.php.bak 文件,下载下来,能够看到源代码

php 复制代码
<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);

echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
    echo $flag."取得flag";
}
?>

从这个语法来看,可以推断出来,使用的应该是php7.2一下的版本,分析一下代码,语义大概如下:

1、获取 ? 后面的字符串包括 ?

2、提取 ? 后面的字符串不包括 ?

3、过滤掉关键字 key

4、按照键值对创建变量

5、输出两个变量 key1 和 key2的md5值

6、如果md5值相同,值不相同就输出flag

解释完语义之后,相比各位师傅也有了大概的解题思路。

我们先来看这道题目的考点:

复制代码
1、过滤
2、md5

关于 php 的过滤,这是很简单的考点了,简单双写或者使用其他编码就能绕过,难点就在于 md5

刚开始想,一下子能想到的就是 md5 碰撞,但是去网上找了很多工具,好像直接生成 md5相同,值不同的还是很难的,于是想其他思路。

考虑到 php 是弱类型,那么md5的返回值又是怎么样的呢?于是去往 php 官网,在下面的用户备注查看到

md5('240610708') == md5('QNKCDZO')

This comparison is true because both md5() hashes start '0e' so PHP type juggling understands these strings to be scientific notation. By definition, zero raised to any power is zero.

只要两个md返回 0e 就会被认为是 0的多少多少次方,于是 0=0 就诞生了。。。

嗯~ php真有你的

提交答案

url 复制代码
?kkeyey1=240610708&kkeyey2=QNKCDZO

成功获得 flag

然后去看了一下题解,看看有没有其他做法,然后看到了有

url 复制代码
?kekeyy1[]=1&kkeyey2[]=1

的做法,一开始没有理解,随后去自己写了一下,会发现如果 md5 这个函数传参不是字符串,而是数组的话会返回 null ,并且不会结束程序,只是简单的爆 warning。。。于是 null = null 诞生了

嗯~ 感谢php让我找到工作

相关推荐
Immortal__y7 小时前
php函数
开发语言·php
Chengbei117 小时前
云存储桶漏洞检测工具OSS-2.0更新,全类型文件解析,存储桶遍历 + 敏感排查一站式完成渗透取证
网络·安全·web安全·网络安全·xss
魏码不凡8 小时前
CURL报错:未找到SSL证书文件问题
开发语言·php·ssl
严谨的麻辣烫16 小时前
Linux sysctl 网络参数调优实战:高并发与长连接场景下的内核配置
linux·网络·php
name好难取诶19 小时前
PHP 静态分析工具实战 PHPStan 和 Psalm 完全指南
android·开发语言·php
白猫不黑21 小时前
GitHub 30K Star 的 AI 渗透测试工具
web安全·网络安全·信息安全·渗透测试·github·ai渗透测试
NOVAnet20231 天前
IDC 权威认证,南凌科技云网融合零信任落地实践:一体化 ZTNA 平台四大核心优势
网络安全·零信任·sd-wan·sase·企业网络
汽车网络安全爱好者1 天前
Public Key Infrastructure(二)— 深入理解 X.509 证书:从 RFC 5280 到 OpenSSL 实践
运维·服务器·算法·网络安全·汽车·密码学·可信计算技术
柠檬香的1 天前
实时操作系统(RTOS)的核心认知基石
开发语言·php
大尚来也1 天前
原生 PHP vs 框架开发:小型项目到底怎么选?
开发语言·php