因为工做缘由,分析了不少的cms也都写过文章,不过以为好像没什么骚操做都是网上的基本操做,因此也就没发表在网站上,都保存在本地。最近忽然发现本身博客中实战的东西太少了,决定将之前写的一些文章搬过来,因为当时写的初4是给本身留个记录,之后方便查看,因此写的都很简单,只有代码审计和复现,没有详细写挖掘中遇到的一些坑。之后写的文章中会尽可能写详细的php
-----------------------------------------------------------------------------------shell
CVE-2019-5886
在shopxo\application\install\controller\Index.php文件中,Add方法中没有校验锁文件,致使攻击者能够重装数据库(我是后来才知道的,能够利用MySQL LOAD DATA LOCAL INFILE读取任意客户端文件)数据库
Index.php文件是处理系统安装的CreateConfig文件,可是惟独它的Add方法中没有校验锁文件,且方法内第174行处调用CreateConfig()生成数据库配置文件,而$params是从post参数中取的,进入CreateConfig方法中小程序
能够看到该方法中是将$params中的值写入database.php中,包括数据库地址,数据库名以及帐号密码等。这样咱们重装系统将数据库绑定到攻击者本身的数据库上。服务器
---------------------------------------------------------------------------app
这个地方是写入php文件中,理论上咱们能够插入php代码后getshell的,当时我当时技术很菜,由于各类缘由没成功(具体什么我也不记得了),不过我如今知道了一个新的方法:函数
闭合array后 Array.eval($_GET['evil']),相似这样。post
漏洞复现:网站
访问install模块下的index控制器下的add方法,并构造以下请求spa
能够发现本地数据库中新建了一个shopxo2的数据库,实际场景中攻击者能够在本身额公网服务器中的数据库开启远程链接,连上本身的数据库。
最关键的地方是数据库配置文件也修改了
CVE-2019-5887漏洞分析
在shopxo/extend/base/FileUtil.php文件的201行处发现调用了rmdir函数:
追踪$aim_dir发现是可控的,发现shopxo/service/AppMiniService.php文件中的Delete方法中调用了UnlinkDir方法:
当$path不以".zip"结尾时,会调用UnlinkDir方法,而$path来源于params['id']。继续回溯:
shopxo/application/admin/controller/Appminialipaylist.php这个Controller文件的Delete方法调用了AppMiniService::Delete,改项目中全部的Controller的构造函数中都会调用父类的input(),也就是将请求参数中的值为$params赋值。
漏洞复现
在后台小程序操做处,点击删除
使用burp抓包,构造请求
能够看到返回包中已经成功删除