一、 启动环境

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. ajax请求egg用nginx转发跨域问题

    火狐浏览器报的 谷歌浏览器报的 前提: npm i egg-cors --save config 文件下的pulgin.js 已经添加 //启用跨域支持 exports.cors = { enable ...

  2. Haar小波分析

    一 尺度函数与小波函数 基本尺度函数定义为:,对其向右平移任意 k 个单位,构成函数族 , 该函数族在 空间中正交,证明如下: 1 : 2 当 m 不等于 k 时, 函数族  构成一组正交基,并形成  ...

  3. v79.01 鸿蒙内核源码分析(用户态锁篇) | 如何使用快锁Futex(上) | 百篇博客分析OpenHarmony源码

    百篇博客分析|本篇为:(用户态锁篇) | 如何使用快锁Futex(上) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...

  4. [LeetCode]2.Add Two Numbers 两数相加(Java)

    原题地址: add-two-numbers 题目描述: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字. 请你将两个数相加,并以相同形式返回 ...

  5. Unreal ListView使用篇

    应用 ListView,在Unreal UI界面开发中用途非常广泛,基本只要你使用列表,就得需要用ListView.比如排行榜100个列表,界面上只需要显示出10个,我们肯定不能生成100个ui实例, ...

  6. 树莓派GPIO开发(一):激光头传感器模块的使用

    配置环境 系统:Raspbian11(64位) 设备:树莓派CM4 一.写在前面 主要为了测试我捡漏买的CM4的拓展版 拓展板子没有焊接引脚,但是预留的接口 手动焊接一下 测试成功 ,说明我捡的这块板 ...

  7. python对文件夹内文件去重

    昨天无聊写了一个百度图片爬虫,测试了一下搜索"斗图".一下给我下了3000多个图片,关键是有一半以上重复的.what a fuck program ! 好吧,今天写一个文件去重功能 ...

  8. 使用PostMan Canary测试受Identity Server 4保护的Web Api

    在<Asp.Net Core: Swagger 与 Identity Server 4>一文中介绍了如何生成受保护的Web Api的Swagger文档,本文介绍使用PostMan Cana ...

  9. 【c#新手学习 练习 案例】 阶段项目一:开发团队调度软件

    案例是模仿java https://blog.csdn.net/bjfu170203101/article/details/109322590 改用C#:开发环境   vs2022/vscode .n ...

  10. 使用Python绘制彩色螺旋矩阵

    from turtle import* #导入turtle库 bgcolor("black") #设置画布颜色为黑色 speed(0) #设置画笔绘制速度 colors=[&quo ...