bugkuCTF_备份是个好习惯

打开题目网址,入眼一串md5值,解密为空值:
在这里插入图片描述

抠题目字眼,备份两个字,联想到 .bak 或者 .swp 文件,利用御剑扫描网址,发现一个 .bak 文件:

在这里插入图片描述
访问下载得到 index.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";
}
?>

源码的大致解释是:
include_once() 文件包含一次;
ini_set() 类似于报错不显示,strstr() ,将url 中? 以及后面的字符串赋值给 $str ;
substr() 从字符串第二位开始读取赋值给 $str ;
str_replace() 将 $str 中出现的 key 字符串替换成空,此函数区分大小写;

parse_str() 将字符串解析成变量和值;
md5() 对字符串进行 md5加密;
(md5( k e y 1 ) = = m d 5 ( key1) == md5( key1)==md5(key2) && $key1 !== $key2) 只要使得 $key1 和 $key2 经过MD5 加密后值相等,但是值和类型的比较不相等,就输出 flag;

1,首先使用双写绕过,因为str_replace() 这个函数只会进行一次过滤,因此传入 kekeyy1 后经过过滤变成 key1 成功传入,关于双写绕过具体介绍请看转载博客:双写绕过

2,md5绕过,因为md5() 函数无法处理数组,因此传入数组使得 md5() 处理出来的 key1 和 key2 都是 NULL ,而二者的数组元素不同,达到输出flag的目的;
在这里插入图片描述
3,解题具体思路请前往:对md5加密的绕过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值