某开源PHP存储系统后台文件上传漏洞分析
在一次内部对抗中,遇到一个存储系统,开发语言为PHP,主界面可进行用户名与口令字的爆破,因此在爆破成功获取用户名与口令后进入后台进行手工测试,测试一些功能
0x00 Preface [前言/简介] 在一次内部对抗中,遇到一个存储系统,开发语言为PHP,主界面可进行用户名与口令字的爆破,因此在爆破成功获取用户名与口令后进入后台进行手工测试,测试一些功能点,是否存在可以利用的地方。因为是开源的系统,首先读了一下源码,发现是通过MVC模式编写的,对于我来说,审计起来较为困难PHP文件上传,所以先进行黑盒测试,测试具体功能点。 0x01 黑盒测试-存储功能 在进入到后台后,因为是一个私人网盘,首先浏览了以下是否存在一些私密文件,包含目标公司的相关信息等内容(无果); 接下来针对该系统进行测试,因为目标系统允许上传任意类型的文件,所以黑盒测试中,我第一个测试的功能就是;在不知道目标系统如何存储上传文件的情况下,是否可以将上传文件跨目录存储,(这里猜测存储文件的目录下是没有执行权限的,所以是否可以通过拼接路径等方式,将文件存储到其他目录下面)。 经测试,未果。 0x02 黑盒测试-用户管理界面模板编辑功能 在针对上述测试无果后,直接来到了后台的功能区,经测试,在模板编辑这一功能中发现可以用户自定义模板文件来上传任意PHP代码。 0x03 白盒审计 对MVC开发模式的审计仅停留在国内的ThinkPHP框架中,复现了一些漏洞,具体动态调试查看请求是如何路由到哪一个具体的控制器的方法中。所以根据之前的经验,小弟的审计思路如下: 已经通过黑盒测试得到了具体漏洞触发的URL,并且此版本的系统无法搭建在windows环境下,没有具体搭建linux + php + Xdebug环境。
所以根据漏洞触发URL,直接定位到apps/templateeditor下的目标文件。 使用的视图文件直接是该文件夹下的 /templates/settings-admin.php 文件 所以定位到了该文件夹下。这个步骤是跳过了从index.php文件路由至该编辑模板文件的这一过程。后续寻找也没有准确的找出这一过程,先存疑。 具体漏洞调用链: 在 \OCA\TemplateEditor\App 这个命令空间下实例化的 TemplateEditor 类,(这个类是继承的\OCP\AppFramework\App 这个类)并是使用了其中的注册路由的方法; 回溯该路由: 回溯RouteConfig类中的Register方法, 调用了processSimpleRoutes方法,具体解析字符串设置路由在该函数中。通过解析字符串来匹配。 最终路由至文件: WBEROOT/apps/templateeditor/controller/adminsettingscontroller.php文件中的updateTemplate方法; 该方法中实例化调用了MailTemplate类中的setContent方法 传入的参数为POST所提交的Content参数值; 最终调用到了 file_put_contents方法,将恶意代码写入到文件中,路径为 /WEBROOT/themes/$theme/$template 在黑盒测试+审计后,尝试该漏洞是否可经未授权直接写入文件,在WEBROOT/index.php文件中引用了 lib/base.php 文件 该文件中定义了OC类并于最底部初始化了该类: 其中又交叉引用了许多类与方法来初始化系统的一些全局参数,其中 在index.php中引用的OC::handleRequest();方法检测了用户的凭据。 所以无法未授权直接调用。 并且后续查看IREQUEST接口,该接口为对HTTP 所提交的参数有多余的过滤操作。 0x04Summary总结 在审计过程中使用的是逆向思维“通过漏洞找代码触发点”,但如果正向审计估计以我现在的阶段,审计起来较为困难。还望师傅们能够不吝赐教! --征鞍 感谢征鞍师傅的积极投稿,也欢迎大家加入我们,互相交流和分享技术,共同成长进步!--NOVASEC END 如您有任何投稿、问题、建议、需求、合作、请后台留言NOVASEC公众号! 或添加NOVASEC-MOYU以便于及时回复。 感谢大哥们的对NOVASEC的支持点赞和关注 加入我们与萌新一起成长吧! 本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!! (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |