一、 启动环境

1.双击运行桌面phpstudy.exe软件



2.点击启动按钮,启动服务器环境

二、代码审计

1.双击启动桌面Seay源代码审计系统软件



2.点击新建项目按钮,弹出对画框中选择(C:\phpStudy\WWW\YCCMS),点击确定

漏洞分析

1.点击展开左侧admin目录,在弹出的下拉列表中双击index.php页面,右侧页面可以看到相关代码。

<?php
require str_replace('\\','/',substr(dirname(__FILE__),0,-6)).'/config/run.inc.php';
?> 其中页面就一行代码,代码主要作用包含 /config/run.inc.php文件 2.在config目录打开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/'.$_className.'.class.php';
}elseif(substr($_className, -5) == 'Model'){
require ROOT_PATH.'/model/'.$_className.'.class.php';
}else{
require ROOT_PATH.'/public/class/'.$_className.'.class.php';
}
}
//单入口
Factory::setAction()->run();
?>

本页面代码前面主要进行初始化一些常量和配置,其中autoload函数作用是当你进行初始化类在本页面不存在时候就会自动调用autoload()函数,同时会把名字当做参数传输过去。 3.最后进行调用setAction()方法,按照__autoload函数 代码功能,页面会包含/public/class/Factory.class.php文件

2.Factory.class.php文件主要是Factory类的定义文件

<?php
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/'.$_a.'Action.class.php')) $_a = 'Index';
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';
}
}
?>

其中setAction()方法首先调用getA()方法获取GET传输的过来得a参数并赋值给a,紧接着利用in_array()函数进行检查,其中如果$_a变量包含数组中的变量,页面将会跳转。 然后file_exists()函数进行检查页面文件是否存在,如果不存在则将$_a赋值成Index,最后调用eval()执行PHP代码。如果能够让eval成功执行代码,必须成功逃逸file_exists函数。

3. file_exists函数主要作用是检查文件是否存在,但是这个函数在进行检查会有一个bug,如/controller/admin;/…/,函数允许路径中有一些特殊字符,并且遇到/…/会返回到上级目录,可以利用这个策略逃逸出file_exists()函数检查,最后一个利用点eval可以执行多条语句,如:eval(echo 1;echo 2;);可以成功执行两条语句。

漏洞利用

首先访问IP/admin/index.php文件,然后输入文件后面输入

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

其中Factory();是为了闭合前面new字符,不然程序会报错,后面紧接着执行phpinfo();函数

实验总结

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

YCCMS 3.3 CSRF漏洞--代码执行的更多相关文章

  1. 深信服edr控制中心漏洞——代码执行

    第一处代码执行 文件:tool/php_cli.php第64行

  2. php代码审计4审计代码执行漏洞

    代码执行漏洞代码执行漏洞是指应用程序本身过滤不严,用户可以通过请求将代码注入到应用中执行,当应用在调用一些能将字符串转化成代码的函数(如php中的eval)时,没有考虑到用户是否能控制这个字符串,造成 ...

  3. 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析

      0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...

  4. 用代码来细说Csrf漏洞危害以及防御

    开头: 废话不多说,直接进主题. 0x01 CSRF介绍:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session ...

  5. 【代码审计】DouPHP_v1.3代码执行漏洞分析

      0x00 环境准备 DouPHP官网:http://www.douco.com/ 程序源码下载:http://down.douco.com/DouPHP_1.3_Release_20171002. ...

  6. Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现

    Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...

  7. DedeCMS V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221)

    dedeCMS  V5.7 SP2后台代码执行漏洞复现(CNVD-2018-01221) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2 ...

  8. Joomla框架搭建&远程代码执行(RCE)漏洞复现

    一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.8,官网: https://downloads.joomla.org/,漏洞位于根 ...

  9. phpMoadmin CVE-2015-2208 远程代码执行漏洞分析

    原文:http://www.thinkings.org/2015/03/05/cve-2015-2208-phpmoadmin-exec-vul.html phpMoAdmin 是一个用PHP 开发的 ...

随机推荐

  1. Solution -「OurOJ 46544」漏斗计算

    \(\mathcal{Description}\)   Link.   定义一个运算结点 \(u\) 有两个属性:当前容量 \(x_u\).最大容量 \(V_u\).提供以下单元操作: I 读入一个整 ...

  2. c++ 子类与父类之间的类型转换

    子类与父类之间的类型转换 先给一段代码 class Base { public: int a = 10; }; class pub_Derv : public Base { Base *getBase ...

  3. MySQL架构原理之体系架构

    MySQL是最流行的关系型数据库软件之一,由于其体量小.速度快.开源免费.简单易用.维护成本低等,在季军架构中易于扩展.高可用等优势,深受开发者和企业的欢迎,在互联网行业广泛使用. 其系统架构如下: ...

  4. JVM学习——学习方法论&学习大纲

    2020年02月06日22:25:51 完成了Springboot系列的学习和Kafka的学习,接下来进入JVM的学习阶段 深入理解JVM 学习方法论 如何去学习一门课程--方法论 多讨论,从别人身上 ...

  5. GoJS 使用笔记

    作为商业软件,GoJs很容易使用,文档也很完备,不过项目中没有时间系统地按照文档学习,总是希望快速入门使用,所以将项目中遇到的问题精简一下,希望对后来者有些帮助. 开始使用 这里先展示一个最简单的例子 ...

  6. Typora的使用教程.md

    Typora的使用教程 原创:https://home.cnblogs.com/u/cn-zhouchao 2021.12.13 一.软件的介绍 Typora 是一款由 Abner Lee 开发的轻量 ...

  7. 2. 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml

    目录 堪比JMeter的.Net压测工具 - Crank 入门篇 堪比JMeter的.Net压测工具 - Crank 进阶篇 - 认识yml 堪比JMeter的.Net压测工具 - Crank 进阶篇 ...

  8. c++基础的记录(随笔记录一些基础的东西)

    1.父类的析构函数为什么要加上virtual关键字. 比如说,父类A,子类B.在A* a = new B()的语句的时候,如果父类析构函数没有virtual,我们在delete指针a的时候,会走父类的 ...

  9. 在 WPF 客户端实现 AOP 和接口缓存

    随着业务越来越复杂,最近决定把一些频繁查询但是数据不会怎么变更的接口做一下缓存,这种功能一般用 AOP 就能实现了,找了一下客户端又没现成的直接可以用,嗐,就只能自己开发了. 代理模式和AOP 理解代 ...

  10. 【VS 2022】给vs2022 添加类设计图

    一.安装 1.开始菜单>找到  visual studio installer,单击打开 2.点击修改 3.在单个组件选项卡找到 类设计图 ,选择后点击安装 二.使用 1.右键要查看的项目-&q ...