DBShop前台RCE
前言
处理重装系统的Controller在判断是否有锁文件后用的是重定向而不是exit,这样后面的逻辑代码还是会执行,导致了数据库重装漏洞和RCE。
正文
InstallController.php中除了indexAction大多数的Action都是使用checkInstallStep()来判断系统是否已经安装,但是该方法中判断完后并没有exit,而是return+重定向,这样返回之前的Action后还是会执行接下来的代码。
再看下checkMysqlConnectAction,该方法一是用于检测数据库是否连接成功,同时还用请求中的参数更新数据库配置文件
当数据库能成功连接时,会将配置参数写入/data/Database.ini.php
其中这五个地方是受我们控制的,但是由于程序对username和password做了校验,不让有单引号,由于在写入配置之前会先进行连接测试,所以port和localhost也不能随意修改,于是只能利用dbname了。
先在数据库中创建如下数据库
构造请求
返回true后再看/data/Database.ini.php
访问首页
当然也可以直接绑定远程的恶意mysql服务器,然后结合MySQL LOAD DATA LOCAL INFILE来读取任意客户端文件