GVKun编程网logo

DedeCMS 5.7通用重装漏洞分析(dedecmsv57sp1漏洞)

2

如果您对DedeCMS5.7通用重装漏洞分析和dedecmsv57sp1漏洞感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解DedeCMS5.7通用重装漏洞分析的各种细节,并对dedecmsv5

如果您对DedeCMS 5.7通用重装漏洞分析dedecmsv57sp1漏洞感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解DedeCMS 5.7通用重装漏洞分析的各种细节,并对dedecmsv57sp1漏洞进行深入的分析,此外还有关于DedeCMS 5.7 标签tag长度限制的修改办法、dedecms 5.7怎样在任意位置显示自由列表标题+链接、DedeCMS Error:Tag disabled:php错误的完整处理办法、DEDECMS JSON数据生成 DEDECMS JSON接口制作的实用技巧。

本文目录一览:

DedeCMS 5.7通用重装漏洞分析(dedecmsv57sp1漏洞)

DedeCMS 5.7通用重装漏洞分析(dedecmsv57sp1漏洞)

源码下载

淦,找了半天没找到漏洞版本源码,只能用最新版本的进行对比了

Dedecms v5.7 GBK 下载地址:http://www.dedecms.com/dl/dl.php?action=dl&type=0&lang=gbk

Dedecms v5.7 UTF8 下载地址:http://www.dedecms.com/dl/dl.php?action=dl&type=0&lang=utf-8

复现要求

Apache中间件解析漏洞(方便利用index.PHP.bak

install文件夹未删除(利用index.PHP或者index.PHP.bak

数据库账户密码

本地部署

PHPstudy部署

因为是本地,数据库直接弱密码 root/root

安装成功

漏洞分析

安装完成后,在install文件夹下会生成install_lock.txt文件来防止二次安装

这个时候我们访问网址下的install文件夹,可以看到提示:

存在漏洞的源代码为,即/install/index.PHP.bak

1	$verMsg = ' v5.7 GBKSP1';
2	$s_lang = 'gb2312';
3	$dfdbname = 'Dedecmsv57gbksp1';
4	$errmsg = '';
5	$install_demo_name = 'dedev57demo.txt';
6	$insLockfile = dirname(__FILE__).'/install_lock.txt';
7	$moduleCacheFile = dirname(__FILE__).'/modules.tmp.inc';
8	 
9	define('DEDEINC',dirname(__FILE__).'/../include');
10	define('DEDEDATA',dirname(__FILE__).'/../data');
11	define('DEDEROOT',preg_replace("#[\\\\\/]install#", '', dirname(__FILE__)));
12	header("Content-Type: text/html; charset={$s_lang}");
13	 
14	require_once(DEDEROOT.'/install/install.inc.PHP');
15	require_once(DEDEINC.'/zip.class.PHP');
16	 
17	foreach(Array('_GET','_POST','_COOKIE') as $_request)
18	{
19	    foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
20	}
21	 
22	require_once(DEDEINC.'/common.func.PHP');
23	 
24	if(file_exists($insLockfile))
25	{
26	    exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
27	}
28	 
29	if(empty($step))
30	{
31	    $step = 1;
32	}

查看源代码,可以看到判断条件,存在漏洞的源代码这里位于第24行

if(file_exists($insLockfile))
{
    exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}

追踪$insLockfile,位于第六行

$insLockfile = dirname(__FILE__).'/install_lock.txt';

而新版本中修改了这两部分为:

第18行

define('INSLOCKFILE', dirname(__FILE__).'/install_lock.txt');

第37行

if(file_exists(INSLOCKFILE))
{
    exit(" 程序已运行安装,如果你确定要重新安装,请先从FTP中删除 install/install_lock.txt!");
}

开发人员将变量直接定义成了常量写死,即无法进行变量覆盖,查看变量覆盖代码,位于这两者之间

第17行

foreach(Array('_GET','_POST','_COOKIE') as $_request)
{
    foreach($$_request as $_k => $_v) ${$_k} = RunMagicQuotes($_v);
}

很明显存在变量覆盖漏洞

遍历数组 Array('_GET','_POST','_COOKIE')并赋值给$_request变量,遍历$$_request,也就是遍历$_GET,$_POST,$_COOKIE将其获取到的键值数组依次赋给 $_k,$_v,即key => value,接着对$_v进行一个RunMagicQuotes函数的过滤,并将变量${$_k}的值赋成过滤后的$_v

因为在18行定义的时候,相当于是$insLockfile=dirname(__FILE__).'/install_lock.txt'

现在只需要覆盖成一个不可能存在的文件名即可,随便想一个 springbird

整理流程,传入INSLOCKFILE=springbird,这时候$_k=insLockfile,$_v=springbird,${$_k}=$insLockfile,所以最后

$insLockfile=springbird,在判断处就能够进行逃逸进行重装了,但是还需要数据库账户密码,这里使用常用密码爆破即可。

如果是index.PHP存在该漏洞,则无需用到Apache解析漏洞,但如果是index.PHP.bak,则需要利用Apache的解析特性,即从右往左解析,若解析到了不认识的,继续向左,直到有一个认识的为止。

index.PHP.bakbak后缀不认识,继续向左,PHP后缀认识,则解析成为PHP文件,同样可以打出重装payload

参考链接

https://bt7k.com/?p=26

https://blog.csdn.net/forest_fire/article/details/50944224

https://www.mi1k7ea.com/2019/06/20/PHP变量覆盖漏洞/#0x07-导致的变量覆盖

https://www.myhack58.com/Article/html/3/62/2013/39131.htm

DedeCMS 5.7 标签tag长度限制的修改办法

DedeCMS 5.7 标签tag长度限制的修改办法

 

大家都知道默认情况下,dedecms的标签tag长度是12个字节,也就是6个汉字,哪知道在织梦5.7中,也没有改掉这个烦恼的事,可能这个设定是基于效率问题考虑的,如果更新的时候设置的长度超过这个字符,系统就会不显示这个tag。有时候需要根据实际情况修改tag的长度,下面是办法,测试可用。

1.修改数据库中表dede_tagindex 和dede_taglist的tag字段属性:varchar(12)修改为varchar(255) 。

这个步骤需要直接操作数据库。

2.修改文件:/include/helpers/archive.helper.php

查找:if(isset($tag[12]) 修改为:if(isset($tag[255]) ;

再将if(isset($tag[20]) 修改为:if(isset($tag[255]) 。

本文章网址:http://www.ppssdd.com/code/13690.html。转载请保留出处,谢谢合作!

dedecms 5.7怎样在任意位置显示自由列表标题+链接

dedecms 5.7怎样在任意位置显示自由列表标题+链接

 

dedecms 5.7怎样在任意位置显示自由列表标题+链接?

为什么会有这样的问题呢,因为找了半天没有发现织梦cms中调用自由列表的标签.在度哥上也没找到答案.那就只有自己捉摸了.下面是我用到的办法,其实是很简单的,只需要一句简单的sql代码就可以实现了

{dede:sql sql="select * From dede_freelist limit 100"} 

<a href=http://www.dede58.com/a/dedejq/"[field:listdir/]">[field:title/]</a>

{/dede:sql} 

前提是必须删除添加自由列表时地址时前面出现的 {listdir}标签.

如图:

本文章网址:http://www.ppssdd.com/code/14438.html。转载请保留出处,谢谢合作!

DedeCMS Error:Tag disabled:php错误的完整处理办法

DedeCMS Error:Tag disabled:php错误的完整处理办法

 

网站提示DedeCMS Error:Tag disabled:"php" more...!

在*新的织梦CMSdedecms5.7版本与7月15号的补丁里,官方增加了源码引擎禁用的全局设置,

用于控制哪些源码标签无法被加载,所有支持的源码标签可见系统目录下的“\include\taglib”,默认php标签是被禁用的。

当你还原数据的以后,有可能原来备份里没这个选项,或者是你禁用了源码里的php标签,所以才会报错 。
 

处理办法如下:

我们先登录后台找到网站后台--系统--系统基本参数---其他选项 ---源码引擎禁用标签。
 

如果没有找到这一项,请到后台-系统-系统设置-SQL命令行工具里运行一下下面的sql语句

INSERT INTO `dede_sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_disable_funs', '源码引擎禁用PHP函数', 7, 'bstring', 'phpinfo,eval,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,file_put_contents'); 

INSERT INTO `dede_sysconfig` (`varname`, `info`, `groupid`, `type`, `value`) VALUES ('cfg_disable_tags', '源码引擎禁用标签', 7, 'bstring', 'php'); 

然后在织梦CMS网站后台--系统--系统基本参数---其他选项 ---源码引擎禁用标签里把php删除掉保存就正常了。

本文章网址:http://www.ppssdd.com/code/14225.html。转载请保留出处,谢谢合作!

DEDECMS JSON数据生成 DEDECMS JSON接口制作

DEDECMS JSON数据生成 DEDECMS JSON接口制作

 

json数据格式可以方便不同站点之间进行数据调用引用,当然我们的DEDECMS也可以实现全站数据生成JSON供其他站点调用,代码很简单,主要用到include/json.class.php。

织梦本身是自带json标签的,调用办法:

{dede:json url='' cache=300}
[field:id/]-[field:title/]<br/>
{/dede:json}

  这个标签调用例子在织梦手册里已经给我们提供了,url是一个远程json接口地址,这个接口文件json.php代码 里面,*后的返回必须是把数据通过json_encode($feeds)系统函数,进行json编码后,通过echo或print()函数来打印出来,这二点是必须的,然后,在前台我们就可以通过$.ajax()或$.getjson()来获取数据。织梦系统给我们提供了一个json类,在include/json.class.php文件里面,也就是是说,我们在对php文件转换json编码,就有了二种办法:

  1.直接用php系统给我们提供的系统函数,json_encode(),我建立大家用这个,即简单又省事,既然,php系统给我们提供了,我们可以不用织梦系统提供的。

  2.就是用织梦系统提供的,encode(),在使用前,首先引入json.class.php,即:

   require_once(DEDEINC.'/json.class.php');
   $json = new Services_JSON(SERVICES_JSON_SUPPRESS_ERRORS);

   echo $json->encode($reval);

  $reval这个变量是我们从数据库或其它地方得到的,一般是一个二维数组,例如下:

  Array (
  [0] => Array ( [id] => 95 [title] => 原图设计)
  [1] => Array ( [id] => 113 [title] => ssssssssssss)
  [2] => Array ( [id] => 111 [title] => hjhj )
  [3] => Array ( [id] => 110 [title] => ssssssssssss)
     )

  经echo 以后,显示的内容如下所示。

  [
   {"id":"95","title":"\u539f\u521b"},
   {"id":"113","title":"ssssssssssss"},
   {"id":"111","title":"hjhj"},
   {"id":"110","title":"ssssssssssss"}
  ]

  这是经过encode()或用json_encode()后,显示的内容。即,用中括号括起来的,几个json数据,这个数据回给请求的$.ajax()或$.getjson(),并由其对这个数据进行处理,显示我们相要的结果。

知道了原理,接下来就是详细实现办法,如下:

首先新建一个PHP文件,命名为json.php(也可以新建个文件夹命名为api,然后PHP命名为index.php,这样调用的时候就只需要你的域名/api这样的方式调用),用于作为被调用的API接口,代码如下:

<?php

$cfg_NotPrintHead = false;

header("Content-Type: text/html; charset=utf-8");

include_once (dirname(__FILE__)."/../include/common.inc.php");

error_reporting(E_ALL || ~E_NOTICE);

require_once(DEDEINC.'/json.class.php');

$reval = array();

$dsql->SetQuery("SELECT id,title FROM `dede_archives` ORDER BY id DESC LIMIT 0,10");

$dsql->Execute('me');

while ($row = $dsql->GetArray('me')) {

$row['title'] = gb2utf8($row['title']);

$reval[] = $row;

}

$json = new Services_JSON(SERVICES_JSON_SUPPRESS_ERRORS);

echo $json->encode($reval);

?>

这里代码有进行了GBK转UTF8的操作,所以兼容GBK版的DEDECMS

调用办法:

{dede:json url='域名/json.php' cache=300}

[field:id/]-[field:title/]<br/>

{/dede:json}

把调用代码放到你你需要的地方就行

本文章网址:http://www.ppssdd.com/code/10237.html。转载请保留出处,谢谢合作!

关于DedeCMS 5.7通用重装漏洞分析dedecmsv57sp1漏洞的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于DedeCMS 5.7 标签tag长度限制的修改办法、dedecms 5.7怎样在任意位置显示自由列表标题+链接、DedeCMS Error:Tag disabled:php错误的完整处理办法、DEDECMS JSON数据生成 DEDECMS JSON接口制作的相关知识,请在本站寻找。

本文标签: