1.从开始出发—初步介绍MVC框架
MVC顾名思义是三个单词的首字母放在一起的简称,M-model(模型),V-view(试图),C-controller(控制器),其间的联系又是怎么样的呢,日常贴图
至于MVC框架的具体运作方式,会在后面的文章的介绍,在此不做过多赘述。
2.写配置文件
在mvc框架中,需重点审核的就是控制器下所对应的php文件。从安装开始,
index.php是入口文件,install是模块,index控制器,check.html对应的是方法,详细介绍见
《ThinkPHP5快速入门》
代码审计
在app/install/controller/index.php文件中,首先是config()方法,
在此处,变量$DB被赋值,已经是一个数组,可以看到,$db是可控的,继续跟进$DB,发现在后面的session()方法中,将$DB的值赋给db_config作用是设置session。见图
跟进db_config,发现其进入sql方法,并赋值给变量$dbconfig,并通过write_config()方法赋值给变量$conf,利用seay全局搜索write_config(),
发现此方法在app/install/common.php文件中,并且只是做简单的替换,没有任何过滤或者别的处理,直接写入database.php文件,于是便可以任意写配置文件。
在这里写。
但道路纵使曲折的,写进去了,但安装失败。参考Jokuuy师傅的文章发现,只有在write_config()之前的所有执行不报错的情况下,该方法才会执行。且如果想在数据表前缀处写一句话,则必须结合sql语句进行构造,否则安装数据库失败
就像这样。
此处又看了师傅们的文章,水平有限,真的定位不到这里了
之后就知道了,构造如下payload,
sy_user` set password=1 or '.@eval($_POST["q"]).'#
成功getshell,
该文章参考Jokuuy师傅。