某一cms后台代码执行漏洞

admin 2024年11月23日22:06:34评论9 views字数 1921阅读6分24秒阅读模式

前言

最近在漏洞平台看到ucms后台漏洞,便寻找了一下发现有开源源码,分析一下

漏洞复现

首先漏洞发生在后台,也就是需要先登录后台可利用,有点鸡肋,但还是要学习一下

后台管理中心->文件管理->任意选一个编辑->保存->抓包
某一cms后台代码执行漏洞

某一cms后台代码执行漏洞

然后访问该文件名
某一cms后台代码执行漏洞

漏洞分析

uncms/index.php 44行

<?php
if(isset($_GET['do'])) {
$thisdo=explode('_',$_GET['do']);
}
?>
<?php require('top.php');?>
<?php
if(isset($_GET['do'])) {
if(!isset($thisdo[1])) {
$thisdo[1]='index';
}
check_admin_file($thisdo[0],$thisdo[1]);
require($thisdo[0].'/'.$thisdo[1].'.php');
}else {
if(power('s',0,$power)){
echo("<meta http-equiv=refresh content='0; url=?do=str'>");
exit();
}

也就是说获取get的do值为文件名,跟踪一下漏洞指的sadmin/fileedit.php文件

sadmin/fileedit.php

<?php
if (!defined('admin')) {exit();}
if(power('alevel')!=3) {die('error');}
if(!AdminFileedit) {
adminmsg('','文件管理功能已关闭',0);
}
if(isset($_GET['dir'])) {
if(empty($_GET['dir'])) {
$_GET['dir']='/';
}
$getdir=$_GET['dir'];
if($_GET['dir']=='/') {
$dir=$_GET['dir'];
}else {
$dir=$_GET['dir'];
}
$alldir=$_SERVER['DOCUMENT_ROOT'].$_GET['dir'].'/';
if(stripos($_GET['dir'],'..')===false) {}else {die('error dir');}
}else {
die('no dir');
}
if(isset($_GET['file'])) {
$filename=$_GET['file'];
if(stripos($_GET['file'],'..')===false) {}else {die('error filename');}
if(!isedit($_GET['file'])) {
die('error');
}
}else {
die('no file');
}
if(isset($_POST['co'])) {
checktoken();
$content=$_POST['co'];
$fp = @fopen($alldir.$filename,"w");
if(!@fwrite($fp,$content) && strlen($content)<>0){
adminmsg('','写入失败,请修改文件权限',1);
exit;
}
fclose($fp);
$refererurl='?do=sadmin_fileedit&dir='.$_GET['dir'].'&file='.$_GET['file'].'&pos='.$_POST['pos'];
adminmsg($refererurl,'保存成功',1,'编辑页');
exit();
}
if(!is_file($alldir.$filename)) {
$content='';
}else {
$content=htmlspecialchars(file_get_contents($alldir.$filename));
}

function isedit($filename) {
$array=array('php','css','js','htm','html','txt');
foreach($array as $val) {
if(pathinfo($filename, PATHINFO_EXTENSION)==$val) {
Return true;
}
}
Return false;
}
?>

可以看到该文件对传进来的路径与内容没有进行任何过滤与验证,引发了漏洞

$fp = @fopen($alldir.$filename,"w");

在请求co参数的时候,这一行,w指当文件不存在的时候会自动创建,由此触发了文件写入漏洞

来源:https://xz.aliyun.com/ 感谢【路过的一个人

原文始发于微信公众号(船山信安):某一cms后台代码执行漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月23日22:06:34
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   某一cms后台代码执行漏洞https://cn-sec.com/archives/3429476.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息