开源编辑器上传漏洞的原因是:服务器配置不当
温馨提示:这篇文章已超过570天没有更新,请注意相关的内容是否还可用!
文件上传漏洞漏洞介绍
文件上传漏洞是指攻击者上传了一个可执行的脚本文件,并借助此脚本文件获取了执行服务端命令的素质。该漏洞在业务应用平台中发生概率较高,究其理由是业务场景中上传附件、头像等用途十分常用,若在平台设计中忽视了相关的安全检测,则容易造成文件上传漏洞。
业务应用平台中的文件上传功能是造成上传漏洞的重要安全隐患之一。通过文件上传功能,用户可以直接将本地文件上传到服务端,若通过构造URL地址可以直接访问到已上传的文件,则会触发漏洞。例如,若上传的文件是一个非正常服务端文件,如JSP文件、ASP文件、ASPX文件、JSPX文件、PHP文件等可直接执行服务后端代码的文件,则该文件实际可视为“木马文件”。
程序开发中不严格或不安全的逻辑问题会造成文件上传漏洞,程序研发所使用的编程语言或者版本、所用的操作平台,以及不同的应用场景也或许促使文件上传漏洞,所以文件上传漏洞的体现方式与其特征息息相关。
借助文件上传漏洞php源码上传到,攻击者可以获得业务信息平台的,进一步通过对该业务平台或者服务器自身的操作平台进行操作,如提高、删除、修改、查看文件等敏感操作。因此相较于其他文件类型的漏洞,文件上传漏洞的危害更大。
产生原因
一些web应用程序中允许上传照片,文本以及其它资源到选定的位置,文件上传漏洞就是运用这种可以上传的地方将恶意代码植入到服务器中,再借助URL去访问以执行代码。
致使文件上传漏洞的理由是:
•服务器配置不当•开源编辑器上传漏洞•本地文件上传限制被跳过•过滤不严格被跳过•文件解析漏洞导致文件执行•文件路径截断
漏洞危害
•上传文件是web脚本语言,服务器的web容器解释并执行了客户上传的类库,导致代码执行。•上传文件是病毒以及木马时,主要用于诱骗用户以及管控员下载执行甚至直接自劢运行;•上传文件是Flash的思路文件.xml,黑客用以控制Flash在该域下的行为(其它通过类似方法控制策略文件的状况类似);•上传文件是病毒、木马文件,黑客用以欺骗客户以及管控员下载执行;•上传文件是钓鱼图片或为包括了脚本的照片,在这些版本的浏览器中会被成为脚本执行,被用于钓鱼和欺诈。除此之外,还有一些不常用的借助方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如截图解析模块;以及上传一个合法的文本文件,其内容包括了PHP脚本,再借助"本地文件包括漏洞(LocalFile)"执行此脚本。
审计要点
在代码审计中进行上传漏洞检查时,首先必须判定上传功能的代码是否对上传的文件进行了校验,如果没有任何校验即存在任意文件上传漏洞,但危险程度仍需进一步推断。(必须检查此处上传的文件是在本地而是在远端,是否存在脚本执行权限或环境支持等,现在这些程序会将附件上传到远端的OSS对象中存储。)
如果代码具有文件校验功能,接出来则必须验证文件校验代码是否建立,可以分别从前端和后端两个方面探讨校验的完整性。
•前端校验:主要是预测对上传文件的后缀名进行鉴权的完整性•后端校验:主要是预测黑名单扩展名拦截、白名单扩展名拦截、HTTP的-Typ验证、文件头验证、二次渲染验证和文件名随机化等几个校验步骤的完整性。
总结审计要点:寻找上传点,检查后缀名是否可自定义,若设定攻击,是否可避开;文件内容是否有校验,校验是否可绕过;能否检测了文件类型;文件上传路径是否可控;文件目录是否规定严禁脚本解析等。
image-防御建议
前端防御主要运用前端校验,利用对文件大小、扩展名等进行检测。后端校验是攻击的核心,主要是禁止对上传的文件目录进行解读,上传的文件随机且检测后缀名,设置文件后缀白名单(在使用PHP的变量进行后缀名测试时,要留意设置此变量的第三个参数为true,不然可借助此函数缺陷绕过检测),对文件内容、大小和种类进行测试等。
实验靶场备注:
接下来使用的靶场是c0ny1大大做的,我在当年下的是老版本的,只有20关。新版本有21关,插入了一个新的Pass-5,使用的方法是上传.user.ini,这个方法我在此处使用的是SUCTF的Web题。
靶场项目地址:
客户端检验绕过
通常都是在网站上写一段脚本,校验上传文件的前缀名,有白名单方式也是黑名单形式。判断方法:在浏览加载文件,但还未点击上传按钮时便跳出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而这时并没有发送数据包。
前端检测的跳过方法非常简洁,这里就不具体展开讲解了。绕过方法有如下几种:
1.通过火狐插件插件以及禁用IE中JS脚本;2.通过元素审查修改代码(如删除=”()”事件);3.通过元素审查脚本中添加上传文件类型;4.通过运用burp抓包改包,先上传一个png类型的木马,然后借助burp将其改为asp/php/jsp后缀名即可注意:这里设置文件名字后,请求头中的-的值也要改(burp默认会手动更改)。
靶场绕过示例
靶场:-labs(Pass-01)
当我们想要上传时,发现前端弹出告警窗口
PS:文章中的是本地解读的靶机,不是在线靶场哦!
image-
审计源代码,其中有一段代码用于测试文件扩展名。
绕过技巧:
首先设置的扩展名为.png,并启用Burp代理抓包
image-
将文件扩展名改回.php,放行即可
image-
审查页面元素,上传成功
image-服务端黑名单检验绕过扩展名黑名单绕过
黑名单检测:一般有个专门的文件,或者黑名单数组,里面会包括常用的危险脚本文件扩展名。
绕过方法:
•找黑名单扩展名的漏网之鱼:比如iis6.0中的asa和cer•可能存在大小写绕过漏洞:比如aSp(iis6.0中可以)和pHp(只能在高于php5.3.39中的linux中)之中•能被web容器解析的文件其它扩展名列表:
语言
可解析后缀
ASP/ASPX
asp,aspx,asa,ascx,ashx,asmx,cer,cdx
PHP
php,php5,php4,php3,phtml,pht
JSP
jsp,jspx,jspa,jsw,jsv,jspf,jtml
靶场绕过示例
靶场:-labs(Pass-03)
当我们想要上传时,提示不允许上传.asp,.aspx,.php,.jsp后缀文件。
image-
审计源代码,其中一段使用变量推断所上传文件的扩充名是否存在指定的扩展名黑名单中。
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array('.asp','.aspx','.php','.jsp');
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //收尾去空
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
绕过技巧:
我们可以尝试使用PHP的其他扩展名绕过,如phtml
image-
注:环境默认还是不会解读phtml、php3等扩展名文件的,若想让实验顺利成功,还必须在http.conf配置文件中自动添加
image-上传.文件绕过
.文件的作用:
.是一个纯文本文件,它上面放置着服务器配置相关的指令。
.主要的作用有:URL重写、自定义错误页面、MIME类别配置或者访问权限控制等。主要表现在伪静态的应用、图片防盗链、自定义404错误页面、阻止/允许特定IP/IP段、目录浏览与主页、禁止访问指定文件类型、文件密码保护等。
.的种类范围主要对于当前目录。
启用.的配置:
启用.php源码上传到,需要更改httpd.conf,启用,并可以用限制特定命令的使用。
本文来自网络,如有侵权请联系网站客服进行删除
还没有评论,来说两句吧...