某info开源系统getshell漏洞挖掘
字数 1532 2025-08-29 22:41:10
Info开源系统Getshell漏洞分析及利用教学
漏洞概述
本漏洞存在于某Info开源系统的后台管理模块,通过参数控制实现文件包含,结合文件上传功能可导致远程代码执行(RCE)。漏洞主要涉及以下两个关键点:
- 通过参数控制实现任意文件包含
- 文件上传功能绕过与组合利用
漏洞分析
1. 入口文件分析
漏洞起始于admin/index.php文件,该系统允许通过m、c、a等参数控制加载的文件和方法。
关键代码路径:
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值为systemM_MODULE参数可控,可设置为include
3. 文件包含机制
load::module()方法在不传递参数时,会使用默认值:
$path = PATH_OWN_FILE = '/app/system/include/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方法调用链:
doviewHtml → $view->dofetch → fetch → display → compile
关键点:
$_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:
上传恶意文件 → 通过文件包含执行 → 获取Webshell
修复建议
- 及时更新官方发布的最新补丁
- 对用户输入参数进行严格过滤
- 限制文件包含的目录范围
- 加强文件上传功能的验证机制
- 禁用危险函数如
call_user_func的直接调用
技术要点总结
- 参数注入:通过
m、c、a等参数控制程序流程 - 路径控制:利用
M_TYPE和M_MODULE控制包含路径 - 文件包含:通过
doviewHtml方法实现任意文件包含 - 上传绕过:利用白名单机制上传特定文件
- 组合利用:文件上传+文件包含=远程代码执行
防御措施
- 实施最小权限原则
- 对所有用户输入进行验证和过滤
- 禁用不必要的危险函数
- 定期进行安全审计和代码审查
- 部署WAF等防护设备
本漏洞展示了参数注入、文件包含和文件上传功能组合利用的典型案例,强调了输入验证和最小权限原则在Web应用安全中的重要性。