CTFSHOW-入门-Web23

解题思路

信息收集

<?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__);

}
?>

对代码进行分析,发现include文件包含flag.php了,然后现在需要echo flag的条件是

  • token的值的第1位和第十四位要相同且第十四位和第十七位要完全相同
  • 字符串的第一位数字化之后加第十四位第十七位 除以一的结果要等于第三十一位

那么字符串第2、15、18都相同,第32位是3的那个值 就符合要求

# 编写一个python脚本实现
import hashlib

n = 0

while True:
    s = str(n)
    md5 = hashlib.md5(s.encode()).hexdigest()

    if md5[1] == md5[14] == md5[17] and md5[31] == '3' and md5[1] != '0':
        print("token =", s)
        print("md5 =", md5)
        break

    n += 1

结果等于422

http://dac1d8ca-7e19-4c42-a826-6866c01df83b.challenge.ctf.show/?token=422

 

 


目录