某Shop供应商后台本地文件包含导致权限提升
字数 1193 2025-08-26 22:11:28
TPshop供应商后台本地文件包含漏洞分析与利用
0x01 漏洞概述
TPshop(Thinkphp shop)是由深圳搜豹网络有限公司开发的一套多商家模式的商城系统。该系统存在一个本地文件包含漏洞,攻击者可以利用该漏洞读取服务器上的任意文件,并在特定条件下实现远程代码执行,从而提升权限。
0x02 受影响版本
所有使用受影响代码的TPshop版本
0x03 漏洞原理分析
漏洞位置
漏洞位于/Application/supplier/Controller/Order.php文件中的delivery_print和order_print方法。
关键代码分析
- delivery_print方法:
531 Line: 从外部获取参数为template的值,默认值为print并赋给$template
532 Line: 调用基类中的fetch方法,并将$template传入,$template为模板文件
- order_print方法:
512 Line: 从外部获取参数为template的值,默认值为picing并赋给$template
513 Line: 调用基类中的fetch方法,并将$template传入,$template为模板文件
漏洞成因
- 模板参数
template完全由用户控制 - 系统没有对输入进行有效过滤和验证
- 当
template参数带有后缀时,程序不会自动添加路径和后缀,导致可以直接包含任意文件 - 系统没有
append方法,只有delivery_print方法可以触发漏洞
0x04 漏洞验证与利用
漏洞探测
- 基本探测:
http://target.com/supplier/order/delivery_print?template=1
观察系统是否自动添加路径和后缀
- 带后缀探测:
http://target.com/supplier/order/delivery_print?template=1.php
观察系统是否直接使用提供的文件名
- 文件读取测试(读取robots.txt):
http://target.com/supplier/order/delivery_print?template=robots.txt
完整利用步骤
-
上传恶意文件:
- 访问用户个人资料修改页面:
http://target.com/Home/User/info.html- 上传一张包含恶意代码的图片(确保文件名不包含特殊字符)
-
触发文件包含:
- 构造URL包含上传的图片文件:
http://target.com/supplier/order/delivery_print?template=public/upload/user/[用户ID]/head_pic/[图片文件名].png&w=phpinfo();- 其中
w参数用于传递PHP代码
-
验证代码执行:
- 观察返回内容是否包含
phpinfo()的输出
- 观察返回内容是否包含
0x05 漏洞修复建议
-
输入验证:
- 对
template参数进行严格过滤,限制只能包含字母、数字和下划线 - 禁止路径穿越字符(如
../)
- 对
-
文件包含限制:
- 限制包含的文件必须在特定目录下
- 强制添加模板文件后缀(如
.html)
-
权限控制:
- 确保供应商后台有严格的权限控制
- 限制可包含的文件类型
-
代码修改:
- 在调用
fetch方法前,对template参数进行白名单验证 - 添加文件存在性检查
- 在调用
0x06 漏洞影响
- 任意文件读取:攻击者可以读取服务器上的敏感文件(如配置文件、数据库凭证等)
- 远程代码执行:通过包含上传的恶意文件,攻击者可以在服务器上执行任意代码
- 权限提升:供应商账户可以利用此漏洞获取更高权限
0x07 防御措施
- 及时更新到官方最新版本
- 对上传文件进行严格的内容检查,而不仅仅是扩展名检查
- 实施最小权限原则,限制供应商后台的权限
- 在生产环境中禁用错误报告,避免泄露路径信息
0x08 总结
TPshop的本地文件包含漏洞源于对用户输入的不当处理,通过精心构造的请求,攻击者可以利用该漏洞实现从文件读取到代码执行的全过程。开发人员应始终遵循"不信任用户输入"的原则,对所有用户提供的参数进行严格验证和过滤。