Impress-CMS-1.4.2-自动任务处rce

robots

 

前言

ImpressCMS 是一个开源内容管理系统,旨在轻松安全地管理多语言网站。

自动任务处存在任意代码执行,从而导致RCE

 

功能点分析

cms安装好之后,登陆管理员账号密码。大概是下面这个样子。

2ee812a408259395bf8b4a9261d01183.png

来到Administration MenuAuto Tasks

e97f0d3b3986b6136b142dc2a6a0b55b.png

点击Create new task,红框中自动执行就是自动执行的任务的源代码。

66b180dcc3517395b095e1f20ccb238e.png

现在我们不知道这个框中是否可以输入任意代码?即使可以输入任意代码,后续有没有过滤?
下面从源码层面来分析一下。

 

源码分析

首先想到的是找到这个功能点对应的源码,一步步跟。但是这里看了下,过程有点多。于是决定采用关键字的方法。
先随便创建一个任务

27885523c969e6ae02315a4eb648c81b.png

通过抓包,找到Source Code窗口对应的关键字,关键字sat_code,响应了一个跳转,响应体为空。

ee661d07ad9990d2fb444804137f7f80.png

下面搜索这个关键字,跟一下它的处理过程。可以看到,主要集中在这三个文件中。

53a41977aad3153b3efc0249ae033053.png

先看下对这个关键字调用最少的文件: update-112-to-122.php。是在一个创建数据库表的字段的位置。同时也通读了下这个文件,没有变量,没有输入,直接忽略。也并不一定说这个文件肯定没问题,只是这里不考虑。

1fadae528e3071731c55def635f9544f.png

下面看一下第二个相关文件:modulesadmin.php
第一处:将自动任务模块的任务添加到系统自动任务列表。生成处理程序对象,设置用户输入的值,传递给处理程序进行处理。

0cd9e658ea7fc173a9341b3597d8e526.png

下面继续跟进处理程序
处理程序位置:/modules/system/admin/autotasks/class/autotasks.php
处理程序:SystemAutotasksHandler

d3995d0cfcf7f7fcb8add46c4a43ef38.png

最后,来到/modules/system/admin/autotasks/class/autotasks.php文件
第一处:

1c9db11aec3e72dad7e32bb83fa0a6a7.png

第二处:

e3bc7c164ddb339bf60a5debc57972a6.png

至此,Source Code窗口的处理过程基本分析完毕。可以看到,中间并没有对其进行过滤。可以直接执行任意代码。
我的这种方法跟平时的过程调试不太一样,比过程调试、一步步跟代码,要快很多。
当然,也可以补充一下过程调试,前面分析过,用户创建的任务,传递给了系统。

在核心启动过程结束时触发的函数,在如下位置下断点:

213ca90f48399bda967c636c60b8b897.png

然后创建新的自动任务

ad6fef869df9fd08cdb8effc62dbbb20.png

来到断点

cb7940c4ec4f21e93871ba92118b06ac.png

跟进execTasks()

7a51debd491121c8d77f9d49304c92b3.png

跟进exec(),可以看到,没有对要执行的代码做任何过滤和拦截。

6d21dd35ea4120ac44406634301fd02a.png

 

验证

创建自动任务

51ebecef2bc6c51ee2af2bf8e331a8a9.png

执行

7b479eee9edadb296ad4fce802905670.png

(完)