Thinkphp 文件上传漏洞(CVE-2022-44289)

admin 2022年12月27日14:53:58评论383 views字数 1411阅读4分42秒阅读模式

代码逻辑错误导致文件上传getshell
Verify version:Thinkphp5.1.41/Thinkphp5.0.24
Install:composer create-project topthink/think tp 5.xxx

测试版本:Thinkphp5.1.41
如果用户直接
像这样使用thinkphp的move方法:像官方文档一样添加上传控制器:https://www.kancloud.cn/manual/thinkphp5_1/354121

<?phpnamespace appindexcontroller;
class Upload { public function index(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到框架网站目录/uploads/ 目录下 $info = $file->move( './uploads'); if($info){ // 成功上传后 获取上传信息 // 输出 jpg echo $info->getExtension(); // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); // 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } }
}

会导致后缀为php的文件直接上传
因为在thinkphplibrarythinkFile.php第272行是允许的

public function checkImg(){        $extension = strtolower(pathinfo($this->getInfo('name'), PATHINFO_EXTENSION));
/* 对图像文件进行严格检测 */ if (in_array($extension, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf']) && !in_array($this->getImageType($this->filename), [1, 2, 3, 4, 6, 13])) { $this->error = 'illegal image files'; return false; }
return true; }

Thinkphp 文件上传漏洞(CVE-2022-44289)

Thinkphp 文件上传漏洞(CVE-2022-44289)

我认为问题是 true 和 false 写反了。和 !in_array getImageType

逻辑应该是?

public function checkImg(){        $extension = strtolower(pathinfo($this->getInfo('name'), PATHINFO_EXTENSION));
/* 对图像文件进行严格检测 */ if (in_array($extension, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf']) && in_array($this->getImageType($this->filename), [1, 2, 3, 4, 6, 13])) { return true; }
return false; }
原文链接:https://github.com/top-think/framework/issues/2772

原文始发于微信公众号(Ots安全):Thinkphp 文件上传漏洞(CVE-2022-44289)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月27日14:53:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Thinkphp 文件上传漏洞(CVE-2022-44289)http://cn-sec.com/archives/1456143.html

发表评论

匿名网友 填写信息