前言
早就写了但忘了发,当笔记用了,近日闲来无事,复习一下thinkphp5的rce,顺便看看过滤_method
后还有什么可以用的点
环境搭建
composer create-project topthink/think=5.0.5 thinkphp5.0.1 --prefer-dist
去compsoer.json中改一下版本
"require": {
"php": ">=5.4.0",
"topthink/framework": "5.0.1"
}
执行composer update
5.0.x method __contruct导致rce
thinkphp5.0.1
导致rce的原因:
通过覆盖类属性,来添加一个filter,这个filter会回调函数,导致命令执行
打个断点在起点
往下走,在检测路由时会进入method方法
里面是关键部分
Config::get('var_method')
从全局变量$config
中获取var_method
等于是获取$config['_sys_']['var_method']
,该变量值为_method
于是我们就控制了$this->method
这个变量,接下来的$this->{$this->method}($_POST)
中就可以调用Request.php中的任意方法,且参数可控
我们选择调用__construct
方法
在这个循环中我们可以覆盖Request类中属性,覆盖filter,值为system
之后zairequest类中的param,该方法获取获取当前请求的参数,其中调用了input方法
input中会解析过滤器,具体执行在filterValue方法中,这是thinkphp触发rce的关键
回调函数执行任意方法,至此结束rce
Comments | NOTHING