BugkuCTF WEB writeup-备份是个好习惯(80)

备份是个好习惯(80):http://123.206.87.240:8002/web16/

BugkuCTF WEB writeup-备份是个好习惯(80)

BugkuCTF WEB writeup-备份是个好习惯(80)

打开就一串编码。

源码什么都没有,尝试各种解码都没用。

遂谷歌。知道了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

得到flag:

BugkuCTF WEB writeup-备份是个好习惯(80)

BugkuCTF WEB writeup-备份是个好习惯(80)

上一篇:django rest 实现多图片上传


下一篇:JSON教程