PHP代码审计-Ourphp任意文件上传漏洞(CNVD-2021-18284)
2023-2-25 23:18:0 Author: xz.aliyun.com(查看原文) 阅读量:27 收藏

漏洞描述:
OurPHP最新版是一款专业的建站系统,OurPHP最新版可以快速、安全地开启一个大气、功能强大的企业网站,OurPHP最新版不但可以帮助用户的企业树立形象,还可以实现在用户自已的官方网站上展开电子商务。软件支持创建世界上任何语言的网站,软件内有着强大的强大的SEO优化设置。

OurPHP采用国际UTF-8编码开发,符合W3C标准。后台支持创建(N)国语言的网站,一个后台数据互通,前台一键语言自由切换,后台兼容所有移动设备。

影响版本:
OurPHP V3.0.0
漏洞分析:
漏洞位于ourphp_filebox.php,由于在后缀黑名单中未过滤上传.user.ini文件
攻击者可以通过上传.user.ini文件,再上传一个图片马从而进行getshell

我们在编辑模板功能点处抓包查看路由

可以看到数据包路径为
/client/manage/ourphp_filebox.php?path=edit&ok

通过路由找到ourphp_filebox.php相应代码,在代码209行看到我们需要POST传入的参数,code、md,也就是上面抓包我们POST传入的参数,仔细观察发现code参数就是我们上面功能点里的代码部分,而md参数则是模板文件路径。这里我们大概猜出代码的执行逻辑,将code传入的参数写入到md传入的文件中。
这里代码212-216是一个安全码校验对于我们接下来的漏洞利用并没有什么影响。

在代码226行处这里就是存在过滤的地方,在这里将内容以及写入的文件后缀进行过滤。

其实这里就是一个黑名单过滤,这里只要有php、jsp、asp等字样就会直接被检测到,但是这里并没有过滤.user.ini文件。

这样我们就能通过上传.user.ini文件来包含任意文件来执行PHP代码。该文件相当于一个可以用户自定义的php.ini文件,而且.user.ini文件可以被被动加载。
我们接着向下看这里是怎么进行文件写入。在代码231行处我们发现这里通过fopen()、fwrite()函数实现了文件的写入,在这过程中没有由于过滤的不严谨,从而上传.user.ini文件getshell。

漏洞复现:
由于使用.user.ini去包含文件时需要找一处可以上传图片马并且可以知道上传路径的功能点,在后台尝试功能点的时候发现上传缩略图处可以上传图片马且回显上传路径。

我们将图片马上传并记录上传路径

然后通过.user.ini中auto_prepend_file来包含我们刚才上传的图片马。


由于上传到了根目录下,所以所有文件执行的时候都会自动包含上述的图片马,我们刷新刚才的页面可以看到图片马被成功包含,所以.user.ini也可以作为一个很好的后门来使用。


文章来源: https://xz.aliyun.com/t/12219
如有侵权请联系:admin#unsafe.sh