Dedecms include\dialog\select_soft_post.php Upload Any Files To The Specified Directory Via Variable Not Initial Flaw Bypass Extension Defence
目录
. 漏洞描述
. 漏洞触发条件
. 漏洞影响范围
. 漏洞代码分析
. 防御方法
. 攻防思考
1. 漏洞描述
综合来说,这个漏洞的根源是"register_globals = on",在这个漏洞的前提下,攻击者可以发动这样的攻击向量
. 当前网站的"register_globals = on"已开启
. 在代码中没有显式声明、初始化的变量
. 在用户提交的HTML表单中提交了相同名字的字段
. 在以上的前提下,黑客可以任意控制代码中变量的值
大体来说,黑客可以有两种利用、及入侵方式
. 通过注入、覆盖变量$cfg_basedir,导致可以饶过身份认证和系统变量初始化文件,导致可以上传任意文件到指定目录
. 通过注入、覆盖变量$cfg_not_allowall、$newname等字段,绕过文件扩展名检查防御代码,向目标文件夹直接上传WEBSHELL
这两种攻击向量的最终目的都是向服务端上传WEBSHELL(.PHP、.ASP、.htaccess)等文件
Relevant Link:
http://huaidan.org/archives/3386.html
http://sebug.net/vuldb/ssvid-12518
http://4byte.cn/learning/51122.html
https://code.google.com/p/webfiles/source/browse/files/localhost/htdocs/cxtx/include/dialog/select_soft_post.php?spec=svn40&r=17
2. 漏洞触发条件
. register_globals = on: 网站本身的安全设置
. 攻击者可以通过自定义表单为相关的变量赋值: 伪造HTTP数据包
3. 漏洞影响范围
. Dedecms 5.5
. DEDECMS v5. Final
4. 漏洞代码分析
/include/dialog/select_soft_post.php
Relevant Link:
http://www.verydemo.com/demo_c116_i56826.html
5. 防御方法
0x1: 升级到最新的DEDECMS版本
0x2: Patch Code
我们知道,这个漏洞的根源是因为PHP变量覆盖导致的恶意文件上传,没法直接针对性的防御,要进行代码级的防御,可以从堵住入侵GETSHELL的最终目的这个角度入手
. 在代码流的相对末尾位置布置文件名检测
. 采取正则匹配文件名中是否有".php、.asp"等特征,来达到防止WEBSHELL上传的目的
/include/dialog/select_soft_post.php
defence code
....
if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)$#i', trim($filename)))
{
ShowMsg("你指定的文件名被系统禁止!",'javascript:;');
exit();
}
$fullfilename = $cfg_basedir.$activepath.'/'.$filename;
$fullfileurl = $activepath.'/'.$filename;
....
这个修复防御代码在Linux上运行没有问题,但是对于运行在Windows操作系统上的WEB系统,存在一个绕过的风险,这和windows对文件名的命名规约有关系
. 以下字符不能表示文件名
) <
) >
) /
) \
) |
) :
) "
) *
) ?
) 、
. 允许文件或者文件夹名称不得超过255个字符
. 文件名除了开头之外任何地方都可以使用空格
. 文件结尾不能以下列字符
) .
黑客可以通过上传文件名为"xxx.php."这种类型的文件名,WEB系统向磁盘上上写入文件之后,windows操作系统会自动删除结尾的".",这导致了WEB系统的防御逻辑和操作系统的文件名规约不一致,导致绕过的场景发生
..
if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename)))
{
ShowMsg("你指定的文件名被系统禁止!",'javascript:;');
exit();
}
$fullfilename = $cfg_basedir.$activepath.'/'.$filename;
$fullfileurl = $activepath.'/'.$filename;
..
6. 攻防思考
0x1: 官方修复方案
文件上传属于WEB系统通用的功能,最佳的防御实践是将防御代码做成通用的代码模块,放置在WEB系统的关键节点位置,使用面向对象OO的思想对所有的文件上传进行防御
DEDECMS本身已经做了这方面的工作了
. include/common.inc.php
//检查和注册外部提交的变量
function CheckRequest(&$val)
{
if (is_array($val))
{
foreach ($val as $_k=>$_v)
{
CheckRequest($_k);
CheckRequest($val[$_k]);
}
}
else
{
if( strlen($val)> && preg_match('#^(cfg_|GLOBALS)#',$val) )
{
exit('Request var not allow!');
}
}
} . /include/uploadsafe.inc.php
//为了防止用户通过注入的可能性改动了数据库
//这里强制限定的某些文件类型禁止上传
$cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml";
...
if(!empty(${$_key.'_name'}) && (eregi("\.(".$cfg_not_allowall.")$",${$_key.'_name'}) || !ereg("\.",${$_key.'_name'})) )
{
if(!defined('DEDEADMIN'))
{
exit('Upload filetype not allow !');
}
}
Copyright (c) 2014 LittleHann All rights reserved
Dedecms include\dialog\select_soft_post.php Upload Any Files To The Specified Directory Via Variable Not Initial Flaw Bypass Extension Defence的更多相关文章
- 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?
复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...
- How to Upload multiple files to documentLibrary in one time
In a Sharepoint 2013 website,we can upload one file to the documentlibrary by click "Uploa ...
- How to configure Veritas NetBackup (tm) to write Unified and Legacy log files to a different directory
Problem DOCUMENTATION: How to configure Veritas NetBackup (tm) to write Unified and Legacy log files ...
- Maximum number of WAL files in the pg_xlog directory (2)
Jeff Janes: Hi, As part of our monitoring work for our customers, we stumbled upon an issue with our ...
- Maximum number of WAL files in the pg_xlog directory (1)
Guillaume Lelarge: Hi, As part of our monitoring work for our customers, we stumbled upon an issue ...
- dedecms /include/uploadsafe.inc.php SQL Injection Via Local Variable Overriding Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 . dedecms原生提供一个"本地变量注册"的模拟 ...
- dedecms /include/helpers/archive.helper.php SQL Injection Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 Relevant Link: http: ...
- Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )
更新 : 2018-01-22 之前漏掉了一个 image 优化, 就是 progressive jpg refer : http://techslides.com/demos/progressi ...
- Retrofit Upload multiple files and parameters
Retrofit 的介绍以及基本使用 这里不再说明. 关于多文件上传 以及上传文件的同时携带多个参数说明 网上涉及到的不是太多. 上一张帅图: 代码: apiService: /** params 参 ...
随机推荐
- python基础随笔
一: 作用域 对于变量的作用域,只要内存中存在,该变量就可以使用. 二:三元运算 name = 值1 if 条件 else 值2 如果条件为真:result = 值1 如果条件为假:result = ...
- jquery判断div滚动条到底部
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop.scrollLeft.scrollHeight.其中 scrollHeight 属性,互联网上几乎搜 ...
- FMDB简单使用
1.增删改查://注意:dataWithPath中的路径参数一般会选择保存到沙箱中的Documents目录中: //如果这个参数设置为nil则数据库会在内存中创建: //如果设置为@””则会在沙箱中的 ...
- usb驱动开发6之端点描述符
学到这里不容易,先说一段故事吧. 二兄弟住一大楼的第80层,某深夜回家忘看通知(内容今夜停电). 兄弟俩背着沉重的大背包,在楼底下商量一下,决定一鼓作气,爬楼梯回家.两人抖擞精神,开始爬楼.爬到20楼 ...
- 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体
WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式.但是AllowTransparency ...
- WP老杨解迷:如何获得更多的应用评价和解读内容刷新
Windows Phone的市场评论功能研究的时间比较长,只是这一功能,估计就能写一篇论文,我曾搞过多款评论数超高的游戏,其中<少林塔防>是重量级的作品,至今稳坐最高评分第一把交椅,如果不 ...
- salt-ssh
1.生产---测试--开发 salt-runners salt-run manage.status#显示当前up或down的minion salt-run manage.down salt-run m ...
- text/html与text/plain有什么区别?
MIME是服务器通知客户机传送文件是什么类型的主要方法,客户机浏览器也通过MIME告诉服务器它的参数. 在网上,如果接收到的文件没有MIME头,就默认它为HTML格式.但这样也不好,因为当MIME的包 ...
- Linq To Entities 及其相关
说到Linq,很多人都非常熟悉,我们可以很方便的用它来操纵对象的集合.今天要说的是Linq To Entities及其相关的操作.下面一步一步的来进行.这里我着重强调的是语法上面的一些注意点.所以怎么 ...
- C语言操作符优先级
C语言操作符优先级 优先级 运算符 含 义 要求运算 对象的个数 结合方向 1 () [] -> . 圆括号 下标运算符 指向结构体成员运算符 结构体成员运算符 自左至右 2 ! 逻辑非运 ...