文件上传漏洞的学习和总结(upload 您所在的位置:网站首页 漏洞分析与挖掘实验报告怎么写好一点 文件上传漏洞的学习和总结(upload

文件上传漏洞的学习和总结(upload

2024-06-14 09:01| 来源: 网络整理| 查看: 265

1.什么是文件上传漏洞:

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

2.什么是webshell:

WebShell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称之为一种网页后门。攻击者在入侵了一个网站后,通常会将这些asp或php后门文件与网站服务器web目录下正常的网页文件混在一起,然后使用浏览器来访问这些后门,得到一个命令执行环境,以达到控制网站服务器的目的(可以上传下载或者修改文件,操作数据库,执行任意命令等)。 WebShell后门隐蔽较性高,可以轻松穿越防火墙,访问WebShell时不会留下系统日志,只会在网站的web日志中留下一些数据提交记录。

3.产生文件上传漏洞的原因:

对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的MIMETYPE(用于描述文件的类型的一种表述方法) 没有做检查 权限上没有对于上传的文件目录设置不可执行权限,(尤其是对于shebang类型的文件) 对于web server对于上传文件或者指定目录的行为没有做限制。

原理解释就是: 在 WEB 中进行文件上传的原理是通过将表单设为 multipart/form-data,同时加入文件域,而后通过 HTTP 协议将文件内容发送到服务器,服务器端读取这个分段 (multipart) 的数据信息,并将其中的文件内容提取出来并保存的。通常,在进行文件保存的时候,服务器端会读取文件的原始文件名,并从这个原始文件名中得出文件的扩展名,而后随机为文件起一个文件名 ( 为了防止重复 ),并且加上原始文件的扩展名来保存到服务器上

文件上传后导致的常见安全问题一般有:

上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代 码执行;

上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(其 他通过类似方式控制策略文件的情况类似);

上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行:

上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执 行,被用于钓鱼和欺诈。

除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传-一个合法的文本文件, 其内容包含了PHP脚本,再通过“本地文件包含漏洞(Local File Include)"执行此脚本;等等。此类问题不在此细述。 

4.我们以upload-labs这个案例来讲述文件上传漏洞的攻击与防御方式:(一共21关,我们从原理和绕过方法来详细的讲述)

第1关:我上传一个test.php到服务器。但是提示我不允许上传此类文件

但是它的这个拦截仅限于前端的页面。我们来看他的代码。

那么既然它只做了前端的限制。那我们现在就修改它的前端代码。然后再次上传。如图所示:

我把代码下载下来,然后进行修改。直接将文件上传至对应的地址。然后再次发起:

第2关:检查扩展名。就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传 在检查扩展名是否合法的时候,有两种策略:白名单和黑名单。这两种策略,大家可以网上百度一下。那么我们对于这样的情况怎么办呢?

我们看他的源码是这样的。检测的是type类型。那么我们就可以针对这种情况进行绕过:

我们再次使用我们的burp工具。来进行一次修改。如图所示:

我们就可以骗过后台的验证。传递webshell文件上去。

第3关:这里使用了黑名单系列。对文件的后缀名进行了限制。我们就需要对后缀名进行修改

达到过滤的目的。利用其它后缀名进行绕过php3、phtml,php5.

如图:虽然文件上传到服务器,但是解析还是和平台中间件有关系。需要本机的中间件支持解析才可以。很多系统使用的Apache,就会解析这个。

第4关:限制的类型更多。可以利用的漏洞减少。我们该如何去做呢?

如图所示:

但其实这个考察的知识点是: .htaccess文件,上传一个.htaccess内容如下的文件:

SetHandler application/x-httpd-php,这样所有文件都会解析为php,然后再上传图片马,就可以解析。

第5关:通过对代码的分析,我们知道他进行了过滤,去点,转换大小写。然后进行匹配。

我所部署的这套代码,似乎与网上大部分的有出路。因为作者增加了一个第五题。导致不一样。后续的题目就会恢复正常。

那我们进行如下操作:在文件的末尾加入. .这样的字符,达到绕过的可能。

 

第6关:通过查看源码,可以知道代码中没有对大小写进行过滤。也就是没有对大写进行行校核。

如图所示,这样我们就达到了我们的目的。我们其实分析代码就是知道原理,然后避开代码的逻辑。

第7关:通过分析下面代码,整个代码都没有取出空格的操作,也就是trim函数的使用。末尾我们添加空格来达到绕过的作用。

 

第8关:通过对源码的分析,我们知道没有对点进行删除。所以我们就针对这个进行绕过。

第9关:通过对代码的分析,可以知道我们尝试使用 ::$DATA 加在后缀之后进行绕过。这个是利用到了windows NTFS文件系统特性绕过,想详细了解的可以查看相关文档。

第10关:这关和第五关类似。所以就不在阐述。

第11关:查看源代码。对比可以发现。过滤替换的至于黑名单中的字符。所以我们选择进行伪装,然后绕过。

第12关:我们利用%00截断的功能,来上传我们的文件。我们查看源代码:

第13关:这一关和上一关大体类似。只是请求方法变为了post。

同样是白名单,这次的save_path是通过post传进来的,还是利用00截断,但这次需要在二进制中进行修改,因为post不会像get对%00进行自动解码。当然我这边是没有成功的。

其他关,我放在下一个文章中阐述。怕太长,人们看起来费劲。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有