thinkcmfx漏洞太大_ThinkCMFX2.2.3漏洞复现

对ThinkCMFX最终版本2.2.3存在的四个漏洞进行复现

ThinkCMFX 是基于 ThinkPHP3 开发的 ,ThinkCMFX2.2.3 下载地址:https://pan.baidu.com/s/1bRXwdg

前台SQL注入

随意注册一个 普通用户 登陆后,发送如下数据包可触发 SQL注入

1

2

3

4

5

6

7

8POST /index.php?g=portal&m=article&a=edit_post HTTP/1.1

Content-Type: application/x-www-form-urlencoded

Cookie: PHPSESSID=2894fb4dbf964f58ccf3d2e4e372b316

Host: 127.0.0.1:8000

Content-Length: 78

Connection: close

post[id][0]=bind&post[id][1]=0 and updatexml(1, concat(0x7e,user(),0x7e),1)#

漏洞文件位于 application/Portal/Controller/ArticleController.class.php

漏洞产生的本质是未对用户输入进行过滤,用户可控变量$article来源于POST传递的参数名为post的数组,再将$article的id字段 未经过滤 就直接拼接到where条件语句中查询,导致 sql注入漏洞 。下面开始跟进漏洞。

跟进到save方法后,$data参数传入update方法开始执行数据库 UPDATE 操作

然后将$options['where']传入parseWhere函数进行where条件语句的拼接,最后跟进到parseWhereItem函数

程序处理过程中使得$exp == 'bind',最后拼接成的where语句为:1WHERE `id` = :0 and updatexml(1, concat(0x7e,user(),0x7e),1)

前台代码执行

发送如下数据包后可触发 代码执行 漏洞,但该漏洞只适用于 Windows 系统

1/index.php?g=comment&m=widget&a=fetch&templateFile=/../public/index&content=');%3f>&prefix=

这个漏洞的成因主要是因为对用户输入的 模板文件名 和 模板文件内容 未进行过滤。导致用户可以将webshell写入 缓存文件 ,而框架会自动包含 缓存文件 ,这样就能成功执行webshell

漏洞文件位于 application/Comment/Controller/WidgetController.class.php

首先我们传入的参数$templateFile会经过sp_add_template_file_suffix添加html后缀,后半部分 变成/../public/index.html, 前半部分 还要拼接上 THEME_PATHComemt ,也就是变成了THEME_PATHComemt/../public/index.html。

然后进入到了 file_exists_case 方法,该方法通过is_file函数来判断$templateFile代表的文件名是否存在

而 THEME_PATHComemt/ *这个目录是肯定 *不存在 的,例如linux环境下。而如果是 Windows 环境下,是允许 不存在目录/../public/index.html 进行路径穿越的,测试如下:

继续跟进,在 simplewind/Core/Library/Think/Template.class.php 中执行put方法

simplewind/Core/Library/Think/Storage/Driver/File.class.php 在put方法中将 模板文件内容 参数$contents写入到缓存文件中

之后再执行load方法 包含 这个缓存文件

从而在网站根目录写入 webshell

任意文件删除

前台普通用户登陆后,保存头像处存在 任意文件删除 漏洞,发送如下数据包即可删除网站根目录下的 somnus.txt 文件(仅适用在 Windows 环境下)

1

2

3

4

5

6

7

8POST /index.php?g=user&m=profile&a=do_avatar HTTP/1.1

Cookie: PHPSESSID=2894fb4dbf964f58ccf3d2e4e372b316

Host: 127.0.0.1:8000

Connection: close

Content-Type: application/x-www-form-urlencoded

Content-Length: 26

imgurl=......somnus.txt

该漏洞成因主要是:对用户输入的 头像文件 参数过滤不全,只过滤了/,而未过滤。而在 Windows 环境下支持通过 进行 路径穿越 ,从而导致了 任意文件删除 漏洞的产生。

下面跟进代码分析:application/Asset/Controller/UeditorController.class.php

用户可以通过post传入参数 imgurl ,然后将/替换为空后,执行sp_delete_avatar函数

此时$file参数路径为:data/upload/avatar/......somnus.txt 。然后进入has函数判断文件是否存在,如果存在,则执行unlink函数进行 文件删除 操作

任意文件上传

前台普通用户登录后,发送如下数据包后可以上传任意文件:

1

2

3

4

5

6

7

8

9

10

11

12

13POST /index.php?g=Asset&m=Ueditor&a=upload&action=uploadfile HTTP/1.1

Content-Type: multipart/form-data; boundary=--------------------------486405972975663160224525

Cookie: PHPSESSID=2894fb4dbf964f58ccf3d2e4e372b316

Host: 127.0.0.1:8000

Content-Length: 239

Connection: close

----------------------------486405972975663160224525

Content-Disposition: form-data; name="file"; filename="shell.php"

Content-Type: application/x-httpd-php

phpinfo(); ?>

----------------------------486405972975663160224525--

上传成功后,服务器也会返回给我们文件的 绝对路径 ,直接访问即可触发webshell

下面跟进漏洞文件:application/Asset/Controller/UeditorController.class.php

在调用UeditorController类的upload方法前,在__construct构建方法首先调用了_initialize方法,跟进该方法,会发现进行了是否登陆的判断,如果未登陆会返回 非法操作!

然后进入upload方法,根据用户输入的$_GET['action']进入对应的上传功能,这里漏洞原因函数在于 _ueditor_upload ,我们选取一个uploadfile为例

刚进入该函数调试,就能发现问题所在:

程序中设置允许上传的文件后缀名参数$allow_exts是通过代码:explode(',', $upload_setting[$filetype]),而通过调试我们可以很清楚的发现,允许的后缀名应该在$upload_setting[$filetype]['extensions']。所以,这样的写法使得了$allow_exts为空,导致了如下图所示的,传入ThinkUpload上传类的配置参数$config['exts']为空

之后进入上传类文件:simplewind/Core/Library/Think/Upload.class.php 的upload方法开始上传文件

在upload方法中通过check方法对上传的文件进行逐个检查操作,跟进check方法,锁定关键的检查文件后缀操作部分代码:

可以看到,由于之前传入该类的参数$config['exts']部分为空,所以检查函数 checkExt ,本应当进行 白名单过滤 却因为$config['ext'] == null而直接返回了 true ,从而导致上传的shell文件通过了check方法的文件检测

通过文件检测后,又进入了 simplewind/Core/Library/Think/Upload.class.php 的saveName方法开始上传文件

该方法通过uniqid函数生成 随机数 作为 文件名 ,然后在设置文件后缀名部分的判断,这里由于$config['saveExt']前面程序并未设置,所以为null,导致了文件 后缀名 取自 $file[‘ext’] ,该参数在前面取自:$file['ext'] = pathinfo($file['name'], PATHINFO_EXTENSION);,所以为 php ,最后拼成了文件名: 随机数.php

检查文件 和 生成文件名 等操作完成后,就调用了 simplewind/Core/Library/Think/Upload.class.php 的save方法,进行 上传文件 操作

至此,文件 ./data/upload/ueditor/20191218/5dfa2096b20ef.php 成功上传

最后,回到一开始的 _ueditor_upload 方法,上传文件成功后,又将 文件名 以 json 数据的 url 部分返回给我们

综上分析,该漏洞的成因主要是程序员的疏忽未正确设置 允许的后缀名 和 保存的后缀名 ,导致用户可以随意上传 php 后缀文件。并且,上传成功后也直接将文件的 绝对路径 返回给我们,即使文件名是通过 随机数 函数生成的,用户也可以直接通过返回信息得到上传的绝对路径。

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: office_2010_toolkit_2.2.3是一款用于安装、激活或卸载微软Office 2010的工具包。它可以帮助用户在可接受的时间和成本范围内完成Office 2010的安装和激活,使用户能够畅享Office 2010的完整功能。此外,它还具有深度定制Office 2010的功能,集成了可重载背景、自定义背景和Office 2010安装工具等功能,让用户可以根据自己的需求进行选择,提高了用户的自定义能力。通过使用office_2010_toolkit_2.2.3,用户可以在电脑上畅享Office 2010的各种功能和优势,让工作变得更加高效和组织,提高生产力和竞争力。为了更好地使用本软件,建议用户仔细阅读软件的相关说明和使用教程,以充分利用本软件的功能和优势,并确保使用过程中的安全和稳定性。 ### 回答2: Office 2010 Toolkit 2.2.3是一个用于激活Microsoft Office 2010的工具软件。该软件可以激活Office 2010的各个组件,包括Word、Excel、PowerPoint等等。此外,该工具还带有一些其他的功能,如在Windows上安装Office 2010、在Office 2010中安装组件等等。 使用Office 2010 Toolkit 2.2.3进行激活非常简单。用户只需要运行该软件,并选择要激活的Office组件,然后点击“Activate”按钮即可。该工具会自动激活所选组件,并在完成后显示成功的提示信息。 需要注意的是,为了使用Office 2010 Toolkit 2.2.3进行激活,用户必须拥有有效的Office 2010许可证。此外,使用该工具进行激活可能会被认为是非法行为,因此用户应该自行承担使用该工具的风险。 总之,Office 2010 Toolkit 2.2.3是一个方便易用的Office 2010激活工具,它可以帮助用户快速、简单地激活Office 2010,提高用户的工作效率和使用体验。 ### 回答3: office_2010_toolkit_2.2.3是一款能够激活Microsoft Office 2010软件的工具集合程序。这个工具集合程序中包含了多个小工具,能够对Microsoft Office 2010软件进行全面的激活,包括Word、Excel、PowerPoint以及其他常用软件。使用office_2010_toolkit_2.2.3激活软件可以让我们获得完整的软件功能,而不再受到功能限制。 与其他激活工具相比,office_2010_toolkit_2.2.3具有更为简单易用的特点。我们只需要下载并运行这个工具集合程序,然后根据提示选择需要激活的Office 2010软件版本,即可完成激活。 需要注意的是,虽然office_2010_toolkit_2.2.3是一款非常方便实用的工具集合程序,但它并非官方软件,是第三方开发者制作的软件。因此,在使用激活工具时一定要注意选择正规可靠的来源,以免给自己的计算机系统带来不必要的麻烦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值