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

admin 2021年12月15日03:56:12评论4,302 views字数 1789阅读5分57秒阅读模式

ThinkPHP5.1文件上传漏洞攻防实验,基于最新版的ThinkPHP V5.1.41 LTS做的攻防实验。

实验目的:市面上基于ThinkPHP5.1开发的程序存在getshell高危后门很多没有维护或者得不到维护,对于没有一定技术含量用户也不知道怎么维护。同时waf防火墙防御getshell也有限,毕竟存在绕过可能。所以推出本教程,可以让一些用户做简单维护安全参考和临时后门修复。文章写的很菜请见谅,过阵子我会把环境开源出来。环境可以做攻防实验又可以满足运营,是一个轻量级安全的网址导航cms。

文章目录

0x1 存在上传漏洞的方法 示例0x2 攻击效果0x3 跟具官方文档修复漏洞方案0x4 防御效果0x5 附加nginx目录安全配置0x6 参考文献


0x1 存在上传漏洞的代码 示例

class Upload extends Base{    public function image(){        $sys = db('sysconfig')->where('varname', 'imagesurl')->find();        $file = request()->file('file');        if (empty($file)) {            $this->error('请选择上传文件');        }        $info = $file->move($_SERVER['DOCUMENT_ROOT'] . '/upload');            $filename = $info->getSaveName();            $filename = str_replace('\', '/', $filename);            $imgurl = $sys['value'] . $filename;            if ($filename) {                $arr = array(                    'state' => '1',                    'imgurl' => $imgurl,                );                return json($arr);            } else {                $this->error($file->getError());            }    }}

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

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


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

0x3 根具官方文档修复漏洞方案 示例

class Upload extends Base{    public function image(){        $sys = db('sysconfig')->where('varname', 'imagesurl')->find();        $file = request()->file('file');        if (empty($file)) {            $this->error('请选择上传文件');        }        $info = $file->validate(['ext' => 'jpg,png,gif'])->move($_SERVER['DOCUMENT_ROOT'] . '/upload');        if ($info) {            $filename = $info->getSaveName();            $filename = str_replace('\', '/', $filename);            $imgurl = $sys['value'] . $filename;            if ($filename) {                $arr = array(                    'state' => '1',                    'imgurl' => $imgurl,                );                return json($arr);            } else {                $this->error($file->getError());            }        } else {            $this->error('error不支持该文件格式上传');        }    }}

0x4防御效果:没有进入文件上传流程,返回错误提示。

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

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

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



0x5附加nginx目录安全配置

例子1:nginx,利用deny all;或者return 404;禁止访问,防止了上传目录的脚本执行权限

#nginxlocation ~ ^/upload/.*.(php|php5)$ { deny all; }#nginxlocation ~ ^/upload/.*.(php|php5)$ { return 404;}



0x6参考文献

[ThinkPHP5.1手册-文件上传]https://www.kancloud.cn/manual/thinkphp5_1/354121

本文始发于微信公众号(安全龙):ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月15日03:56:12
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验https://cn-sec.com/archives/448851.html

发表评论

匿名网友 填写信息