美文网首页
i春秋 百度杯code

i春秋 百度杯code

作者: jun123123 | 来源:发表于2019-11-19 11:38 被阅读0次

    进入页面只有一张图片 url上有jpg参数,大概是文件读取
    改jpg参数为index.php
    得到index.php源码的base64 但是没啥用
    看到wp里说 phpstrom创建的项目下会有.idea文件夹,含misc.xml,modules.xml,workspace.xml等文件
    进入/.idea/wordspace.xml,发现有index.php,config.php,fl3g_ichuqiu.php三个文件
    在index.php源码中知道config.php文件读不到,只能读一下fl3g_ichuqiu.php,构造参数jpg=fl3gconfigichuqiu.php,因为参数中不能含除.以外的其他符号但是config会被替换为_。
    读到源码后发现是一个cookie加密的代码,要求我们伪造出system的cookie。代码如下:

    <?php
    /**
     * Created by PhpStorm.
     * Date: 2015/11/16
     * Time: 1:31
     */
    error_reporting(E_ALL || ~E_NOTICE);
    include('config.php');
    function random($length, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz') {
        $hash = '';
        $max = strlen($chars) - 1;
        for($i = 0; $i < $length; $i++) {
            $hash .= $chars[mt_rand(0, $max)];
        }
        return $hash;
    }//在chars参数中随机选择length个字符
    
    function encrypt($txt,$key){
        for($i=0;$i<strlen($txt);$i++){
            $tmp .= chr(ord($txt[$i])+10);//后移10
        }
        $txt = $tmp;
        $rnd=random(4);
        $key=md5($rnd.$key);//随机数和key参数md5
        $s=0;
        for($i=0;$i<strlen($txt);$i++){
            if($s == 32) $s = 0;
            $ttmp .= $txt[$i] ^ $key[++$s];//txt和key异或
        }
        return base64_encode($rnd.$ttmp);
    }
    function decrypt($txt,$key){
        $txt=base64_decode($txt);
        $rnd = substr($txt,0,4);
        $txt = substr($txt,4);
        $key=md5($rnd.$key);
    
        $s=0;
        for($i=0;$i<strlen($txt);$i++){
            if($s == 32) $s = 0;
            $tmp .= $txt[$i]^$key[++$s];
        }
        for($i=0;$i<strlen($tmp);$i++){
            $tmp1 .= chr(ord($tmp[$i])-10);
        }
        return $tmp1;
    }
    $username = decrypt($_COOKIE['user'],$key);
    if ($username == 'system'){
        echo $flag;
    }else{
        setcookie('user',encrypt('guest',$key));
        echo "╮(╯╰)╭";
    

    在这里我首先想到的是爆破key,但是由于5位且没有其他任何信息,可能的值有128^5个,我这里没有成功爆出来
    再看加密的源码,发现key是用来的明文异或的,由于异或的性质(a^a=0;a^0=a),我们可以构造payload:

    $s=base64_decode('QkNBdxVPCkxI');//这里是响应中的cookie user值
    $txt='guest';$m='system';
    $rnd = substr($s,0,4);
    $txts = substr($s,4);
    for($i=0;$i<strlen($txt);$i++){
        $tmp .= chr(ord($txt[$i])+10);//后移10
    }
    $txt=$tmp;$tmp='';
    for($i=0;$i<strlen($m);$i++){
        $tmp .= chr(ord($m[$i])+10);//后移10
    }
    $m=$tmp;
    for($i=0;$i<5;$i++){
        $temm.=$m[$i]^$txt[$i]^$txts[$i];
    }
    for($i=0;$i<128;$i++)
        echo base64_encode($rnd.$temm.chr($i)).'<br>';
    

    因为guest只有5位,所以我们只能利用guest的密文对system前5位进行加密,最后一位直接爆破即可,可以生成128个密文,放进burp爆破就能出结果了。

    相关文章

      网友评论

          本文标题:i春秋 百度杯code

          本文链接:https://www.haomeiwen.com/subject/hndwictx.html