<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0);

include('flag.php');
if(isset($_GET['token'])){
    $token = md5($_GET['token']);
    if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
        if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
            echo $flag;
        }
    }
}else{
    highlight_file(__FILE__);

}
?>

因为这题属于爆破考虑直接改造题目提供的代码暴力计算从1开始的自然数的md5找到能通过校验获取 flag 的值,因为对 PHP 不熟悉加上很久没有自己手写代码了借助 AI 分析报错原因和修正代码逻辑三轮才写出能用的代码,得到 token=422 时可以通过条件检查,在URL后拼接 /?token=422 即可获得 flag ctfshow{4906bbb7-13b6-442a-87a9-e8576d70a0e3}。另外试了一下很明显直接访问 /flag.php 是无法获得 flag 的,别想了(

<?php
for($i=0;;$i++) {
    if(true){
        $token = md5($i);
        if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
            if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
                echo $i;
            }
        }
    }
}
?>