解题思路※
信息收集※

<?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