安全矩阵

 找回密码
 立即注册
搜索
查看: 2960|回复: 0

ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-8-7 09:10:57 | 显示全部楼层 |阅读模式
原文链接:ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验

ThinkPHP5.1文件上传漏洞攻防实验,基于最新版的ThinkPHP V5.1.41 LTS做的攻防实验。
实验目的:市面上基于ThinkPHP5.1开发的程序存在getshell高危后门很多没有维护或者得不到维护,对于没有一定技术含量用户也不知道怎么维护。同时waf防火墙防御getshell也有限,毕竟存在绕过可能。所以推出本教程,可以让一些用户做简单维护安全参考和临时后门修复。文章写的很菜请见谅,过阵子我会把环境开源出来。环境可以做攻防实验又可以满足运营,是一个轻量级安全的网址导航cms。
文章目录
  1. 0x1 存在上传漏洞的方法 示例
  2. 0x2 攻击效果
  3. 0x3 跟具官方文档修复漏洞方案
  4. 0x4 防御效果
  5. 0x5 附加nginx目录安全配置
  6. 0x6 参考文献
复制代码
0x1 存在上传漏洞的代码 示例
  1. class Upload extends Base
  2. {
  3.     public function image()
  4. {
  5.         $sys = db('sysconfig')->where('varname', 'imagesurl')->find();
  6.         $file = request()->file('file');
  7.         if (empty($file)) {
  8.             $this->error('请选择上传文件');
  9.         }
  10.         $info = $file->move($_SERVER['DOCUMENT_ROOT'] . '/upload');
  11.             $filename = $info->getSaveName();
  12.             $filename = str_replace('\\', '/', $filename);
  13.             $imgurl = $sys['value'] . $filename;
  14.             if ($filename) {
  15.                 $arr = array(
  16.                     'state' => '1',
  17.                     'imgurl' => $imgurl,
  18.                 );
  19.                 return json($arr);
  20.             } else {
  21.                 $this->error($file->getError());
  22.             }
  23.     }
  24. }
复制代码

0x2攻击效果:后缀.php后门文件上传成功!


0x3 根具官方文档修复漏洞方案 示例
  1. class Upload extends Base
  2. {
  3.     public function image()
  4. {
  5.         $sys = db('sysconfig')->where('varname', 'imagesurl')->find();
  6.         $file = request()->file('file');
  7.         if (empty($file)) {
  8.             $this->error('请选择上传文件');
  9.         }
  10.         $info = $file->validate(['ext' => 'jpg,png,gif'])->move($_SERVER['DOCUMENT_ROOT'] . '/upload');
  11.         if ($info) {
  12.             $filename = $info->getSaveName();
  13.             $filename = str_replace('\\', '/', $filename);
  14.             $imgurl = $sys['value'] . $filename;
  15.             if ($filename) {
  16.                 $arr = array(
  17.                     'state' => '1',
  18.                     'imgurl' => $imgurl,
  19.                 );
  20.                 return json($arr);
  21.             } else {
  22.                 $this->error($file->getError());
  23.             }
  24.         } else {
  25.             $this->error('error不支持该文件格式上传');
  26.         }
  27.     }
  28. }
复制代码

0x4防御效果:没有进入文件上传流程,返回错误提示。防御逻辑:使用手册中validate()方法,通过ext配置项,定义允许上传文件的白名单过滤。validate(['ext' => 'jpg,png,gif']);然后通过对象赋值的$info进行判断真假,抛出相对于的error。


0x5附加nginx目录安全配置
例子1:nginx,利用deny all;或者return 404;禁止访问,防止了上传目录的脚本执行权限。
  1. #nginx
  2. location ~ ^/upload/.*.(php|php5)$
  3. {
  4. deny all;
  5. }
  6. #nginx
  7. location ~ ^/upload/.*.(php|php5)$
  8. {
  9. return 404;
  10. }
复制代码
0x6参考文献
[ThinkPHP5.1手册-文件上传]https://www.kancloud.cn/manual/thinkphp5_1/354121


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-29 12:41 , Processed in 0.012613 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表