目录
前言
一、复现
二、漏洞分析
前言
提示:这里可以添加本文要记录的大概内容:
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位要写入的文件名:
传入了一句话木马,尝试蚁剑连接
之后可以尝试反弹shell直接获取靶机的控制
二、漏洞分析
thinkphp框架首先调用了handle方法进行session的初始化,通过getname()将$cookieName的值赋给为PHPSESSID
$cookieName的值为定义好的PHPSESSID,最后进入setId()函数对$SessionId进行赋值即PHPSESSID的值。
未对$id做除了32位长度外的任何限制
最后进入save()函数进行session数据的保存,并添加sess_前缀,最后调用wirteFile()函数中的file_put_contents()方法写入内容
$path即为PHPSESSID的内容,$content为参数param的内容,导致了任意文件的写入。
参考文章:ThinkPHP v6.0.0~6.0.1 任意文件操作漏洞分析 | J0k3r's Blog