备份是个好习惯web

cyyp 2026-04-29 10:48:46 6 0


CTF-WP:备份是个好习惯

一、题目信息

题目地址:http://171.80.2.169:19802/

题目提示:
字符串:d41d8cd98f00b204e9800998ecf8427e(空字符串 MD5 值)关键提示:备份是个好习惯

二、源码获取

CTF 经典套路,备份提示直接访问网站备份文件,获取源码:
plaintext
http://171.80.2.169:19802/index.php.bakPHP 核心源码:
php
运行
<?php
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";
}
?>

三、代码逻辑分析

截取 URL 中 ? 后的全部请求参数;
使用 str_replace 将参数中所有 key 字符串替换为空;
通过 parse_str 自动解析参数,生成变量 $key1、$key2;
最终放行条件:
md5($key1) == md5($key2) 弱相等
$key1 !== $key2 强类型不相等

四、漏洞与绕过思路

1. 关键字过滤绕过
代码使用单轮替换 str_replace('key','',$str),可使用双写绕过:传入 kkeyey,中间key被替换为空,最终还原为key。
2. MD5 弱类型绕过
PHP 特性:对数组进行 md5 加密会返回 NULL
md5(数组) = NULL,NULL == NULL 满足弱相等;
两个不同数组,强类型对比 !== 判定为不相等,完全符合题目条件。

五、Payload 构造

plaintext
http://171.80.2.169:19802/?kkeyey1[]=1&kkeyey2[]=2

六、解题流程

访问 index.php.bak 下载源码,审计代码逻辑;
利用双写 kkeyey 绕过 key 关键字过滤;
传入数组参数,利用 PHP md5 处理数组返回 NULL 的特性;
同时满足 md5弱相等 + 变量强不相等 双重条件;
页面成功解析参数,输出 Flag。
flag{49bdd2a9bec9db790cad7030ee9f4eb2}
分类:WEB
image
作者:cyyp

1

提交

0

收入

相关WriteUP

  • web1

    打开题目地址发现一堆滑稽笑脸查看网页源代码得到flag

    • WEB
    • 5年前
  • web2

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • WEB
    • 5年前
  • web3

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • WEB
    • 5年前
  • web4

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • WEB
    • 5年前
  • web5

    ***收费WriteUP请购买后查看,VIP用户可免费查看***

    • WEB
    • 5年前
问题反馈