|
原文链接:ThinkPHP5.1文件上传漏洞攻击与漏洞修复攻防实验
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后门文件上传成功!
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。
0x5附加nginx目录安全配置
例子1:nginx,利用deny all;或者return 404;禁止访问,防止了上传目录的脚本执行权限。
- #nginx
- location ~ ^/upload/.*.(php|php5)$
- {
- deny all;
- }
- #nginx
- location ~ ^/upload/.*.(php|php5)$
- {
- return 404;
- }
复制代码 0x6参考文献:
[ThinkPHP5.1手册-文件上传]https://www.kancloud.cn/manual/thinkphp5_1/354121
|
|