自动任务处存在任意代码执行?设置自动执行任务?前言 ImpressCMS 是一个开源内容管理系统,旨在轻松安全地管理多语言网站。点击Create new task,红框中自动执行就是自动执行的任务的源代码。现在我们不知道这个框中是否可以输入任意代码?先随便创建一个任务。生成处理程序对象,设置用户输入的值,传递给处理程序进行处理。至此,Source Code窗口的处理过程基本分析完毕。跟进exec(),可以看到,没有对要执行的代码做任何过滤和拦截。
序
ImpressCMS是一个开源的内容管理系统,旨在轻松安全地管理多语言网站。
自动任务中存在任意代码执行,导致RCE。
功能点分析
安装cms后,登录管理员帐户密码。大概是这样的。
转到管理菜单-自动任务
点击新建任务,红框中的自动执行就是自动执行任务的源代码。
现在我们不知道这个框里能不能输入任何代码?即使可以输入任何代码,还有后续的过滤吗?
我们从源头层面来分析一下。
源代码分析
我想到的第一件事就是找到这个功能点对应的源代码,一步一步跟着做。但是这里一看,流程有点多。所以我决定采用关键词法。
先创建一个任务。
通过捕获包,我们找到了源代码窗口对应的关键字,关键字sat_code,并响应了一个跳转。响应正文为空。
在下面搜索这个关键字,并跟踪它的处理过程。大家可以看到,主要集中在这三档。
让我们来看看调用这个关键字最少的文件:update-112-to-122.php。是创建数据库表字段的位置。同时我也通读了这个文件,没有变量,没有输入,直接忽略。不一定代表这个文档就一定可以,只是这里不考虑。
让我们看看第二个相关的文件:modulesadmin.php。
第一个地方:将自动任务模块的任务添加到系统自动任务列表中。生成handler对象,设置用户输入的值,并将其传递给处理程序进行处理。
继续跟进以下处理程序。
处理程序位置:/modules/system/admin/auto task/class/auto task . PHP
处理程序:SystemAutotasksHandler
最后,转到文件/modules/system/admin/auto task/class/auto task . PHP
第一名:
第二名:
至此,源代码窗口的处理基本分析完毕。可以看到,中间没有过滤。可以直接执行任意代码。
我的方法和平时的流程调试不一样。这比一步一步调试代码的过程要快得多。
当然也可以补充工艺调试。如前所述,用户创建的任务被传递给系统。
在核心启动过程结束时触发的函数,断点位于以下位置:
然后创建一个新的自动任务。
来到断点
跟进execTasks()
跟进exec(),可以看到没有对要执行的代码进行过滤和拦截。
测试和验证
创建自动任务
执行
这篇文章最初由浪客发表。
转载请参考转载声明,注明出处:https://www.anquanke.com/post/id/254633
安全客——贴心的安全新媒体
本文来自网络,不代表「专升本要什么条件_专升本要几年_成人高考专升本_山东专升本信息网」立场,转载请注明出处:http://www.sdzsb8.cn/sbwd/25763.html