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来读取任意客户端文件

猜你喜欢

转载自www.cnblogs.com/jinqi520/p/11274729.html