thinkphp 6.x 任意文件写入漏洞

目录

前言

一、复现

二、漏洞分析


前言

提示:这里可以添加本文要记录的大概内容:

ThinkPHP v6.0.0~6.0.1 存在任意文件操作漏洞,主要原因是调用了session的进行了文件的写入,导致的漏洞,补丁对传入的$sessionId进行了检测是否只由字母或数字字符组成。


提示:以下是本篇文章正文内容,下面案例可供参考

一、复现


后端index/vuln页自定义一个漏洞的方法:
public function vuln(Request $request, Session $session)
    {
	$param = $request->get('param');
	$session->set('session_key', $param);
	return "success";
    }

访问index/vuln页面,传入param的值并且修改PHPSESSID为32位要写入的文件名:

thinkphp 6.x 任意文件写入漏洞_第1张图片

 

传入了一句话木马,尝试蚁剑连接

 thinkphp 6.x 任意文件写入漏洞_第2张图片

thinkphp 6.x 任意文件写入漏洞_第3张图片 

 之后可以尝试反弹shell直接获取靶机的控制

二、漏洞分析

thinkphp框架首先调用了handle方法进行session的初始化,通过getname()将$cookieName的值赋给为PHPSESSIDthinkphp 6.x 任意文件写入漏洞_第4张图片

$cookieName的值为定义好的PHPSESSID,最后进入setId()函数对$SessionId进行赋值即PHPSESSID的值。

 

未对$id做除了32位长度外的任何限制 

 最后进入save()函数进行session数据的保存,并添加sess_前缀,最后调用wirteFile()函数中的file_put_contents()方法写入内容

thinkphp 6.x 任意文件写入漏洞_第5张图片

 $path即为PHPSESSID的内容,$content为参数param的内容,导致了任意文件的写入。

参考文章:​​​​​​ThinkPHP v6.0.0~6.0.1 任意文件操作漏洞分析 | J0k3r's Blog

你可能感兴趣的:(php,web安全)