某info开源系统getshell漏洞挖掘
字数 1532 2025-08-29 22:41:10

Info开源系统Getshell漏洞分析及利用教学

漏洞概述

本漏洞存在于某Info开源系统的后台管理模块,通过参数控制实现文件包含,结合文件上传功能可导致远程代码执行(RCE)。漏洞主要涉及以下两个关键点:

  1. 通过参数控制实现任意文件包含
  2. 文件上传功能绕过与组合利用

漏洞分析

1. 入口文件分析

漏洞起始于admin/index.php文件,该系统允许通过mca等参数控制加载的文件和方法。

关键代码路径:

admin/index.php → app/system/entrance.php → load::module()

2. 关键参数控制

app/system/entrance.php中,当满足以下条件时:

  • M_TYPE == 'system'
  • M_MODULE == 'include'

系统会设置常量:

PATH_OWN_FILE = PATH_APP.M_TYPE.'/'.M_MODULE.'/module/'

即路径:/app/system/include/module

参数控制方式

  • M_NAME参数不赋值可使M_TYPE值为system
  • M_MODULE参数可控,可设置为include

3. 文件包含机制

load::module()方法在不传递参数时,会使用默认值:

$path = PATH_OWN_FILE = '/app/system/include/module'

后续通过self::_load_class($path, $modulename, $action)加载文件:

  1. 查找/app/system/include/module/目录下的.class.php文件
  2. 实例化类并调用指定方法

4. 可利用的文件与方法

/app/system/include/module/目录下存在可利用的文件:

  • loadtemp.class.php中的doviewHtml方法
  • uploadify.class.php中的doupfile方法

5. 文件包含漏洞细节

doviewHtml方法调用链:

doviewHtml → $view->dofetch → fetch → display → compile

关键点:

  • $_M['form']['path']等同于$_POST['path'],完全可控
  • 最终将用户控制的文件路径内容读取并包含执行

6. 文件上传漏洞

uploadify.class.php中的doupfile方法:

  • 允许上传白名单内的文件
  • 结合文件包含漏洞可实现任意代码执行

漏洞复现步骤

  1. 设置参数控制路径

    • 通过不赋值M_NAME使M_TYPE=system
    • 设置M_MODULE=include
    • 使系统加载/app/system/include/module/目录
  2. 调用loadtemp.class.php

    • 通过参数控制调用loadtemp.class.phpdoviewHtml方法
    • 通过POST传递path参数控制包含的文件
  3. 文件上传利用

    • 调用uploadify.class.phpdoupfile方法上传文件
    • 虽然有限制,但可上传白名单内的特定文件
    • 结合文件包含漏洞执行上传的文件
  4. 组合利用实现RCE

    上传恶意文件 → 通过文件包含执行 → 获取Webshell
    

修复建议

  1. 及时更新官方发布的最新补丁
  2. 对用户输入参数进行严格过滤
  3. 限制文件包含的目录范围
  4. 加强文件上传功能的验证机制
  5. 禁用危险函数如call_user_func的直接调用

技术要点总结

  1. 参数注入:通过mca等参数控制程序流程
  2. 路径控制:利用M_TYPEM_MODULE控制包含路径
  3. 文件包含:通过doviewHtml方法实现任意文件包含
  4. 上传绕过:利用白名单机制上传特定文件
  5. 组合利用:文件上传+文件包含=远程代码执行

防御措施

  1. 实施最小权限原则
  2. 对所有用户输入进行验证和过滤
  3. 禁用不必要的危险函数
  4. 定期进行安全审计和代码审查
  5. 部署WAF等防护设备

本漏洞展示了参数注入、文件包含和文件上传功能组合利用的典型案例,强调了输入验证和最小权限原则在Web应用安全中的重要性。

Info开源系统Getshell漏洞分析及利用教学 漏洞概述 本漏洞存在于某Info开源系统的后台管理模块,通过参数控制实现文件包含,结合文件上传功能可导致远程代码执行(RCE)。漏洞主要涉及以下两个关键点: 通过参数控制实现任意文件包含 文件上传功能绕过与组合利用 漏洞分析 1. 入口文件分析 漏洞起始于 admin/index.php 文件,该系统允许通过 m 、 c 、 a 等参数控制加载的文件和方法。 关键代码路径: 2. 关键参数控制 在 app/system/entrance.php 中,当满足以下条件时: M_TYPE == 'system' M_MODULE == 'include' 系统会设置常量: 即路径: /app/system/include/module 参数控制方式 : M_NAME 参数不赋值可使 M_TYPE 值为 system M_MODULE 参数可控,可设置为 include 3. 文件包含机制 load::module() 方法在不传递参数时,会使用默认值: 后续通过 self::_load_class($path, $modulename, $action) 加载文件: 查找 /app/system/include/module/ 目录下的 .class.php 文件 实例化类并调用指定方法 4. 可利用的文件与方法 在 /app/system/include/module/ 目录下存在可利用的文件: loadtemp.class.php 中的 doviewHtml 方法 uploadify.class.php 中的 doupfile 方法 5. 文件包含漏洞细节 doviewHtml 方法调用链: 关键点: $_M['form']['path'] 等同于 $_POST['path'] ,完全可控 最终将用户控制的文件路径内容读取并包含执行 6. 文件上传漏洞 uploadify.class.php 中的 doupfile 方法: 允许上传白名单内的文件 结合文件包含漏洞可实现任意代码执行 漏洞复现步骤 设置参数控制路径 : 通过不赋值 M_NAME 使 M_TYPE=system 设置 M_MODULE=include 使系统加载 /app/system/include/module/ 目录 调用loadtemp.class.php : 通过参数控制调用 loadtemp.class.php 的 doviewHtml 方法 通过POST传递 path 参数控制包含的文件 文件上传利用 : 调用 uploadify.class.php 的 doupfile 方法上传文件 虽然有限制,但可上传白名单内的特定文件 结合文件包含漏洞执行上传的文件 组合利用实现RCE : 修复建议 及时更新官方发布的最新补丁 对用户输入参数进行严格过滤 限制文件包含的目录范围 加强文件上传功能的验证机制 禁用危险函数如 call_user_func 的直接调用 技术要点总结 参数注入 :通过 m 、 c 、 a 等参数控制程序流程 路径控制 :利用 M_TYPE 和 M_MODULE 控制包含路径 文件包含 :通过 doviewHtml 方法实现任意文件包含 上传绕过 :利用白名单机制上传特定文件 组合利用 :文件上传+文件包含=远程代码执行 防御措施 实施最小权限原则 对所有用户输入进行验证和过滤 禁用不必要的危险函数 定期进行安全审计和代码审查 部署WAF等防护设备 本漏洞展示了参数注入、文件包含和文件上传功能组合利用的典型案例,强调了输入验证和最小权限原则在Web应用安全中的重要性。