文件上传漏洞

文件上传漏洞

XXXXXXXXXXXXXXX

2025-04-03 发布8 浏览 · 0 点赞 · 0 收藏

文件上传漏洞介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。“文件上传” 本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

这种攻击方式是最为直接和有效的,所以我们需要思考的是如何绕过检测和过滤。

文件上传漏洞危害

1.上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行。
2.上传文件是病毒或者木马时,主要用于诱骗用户或者管理员下载执行或者直接 自劢运行;
3.上传文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在该域 下的行为(其他通过类似方式控制策略文件的情况类似);
4.上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行;
5.上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。 除此之外,还有一些不常见的利用方法,比如将上传文件作为一个入口,溢 出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其内容包含了PHP脚本,再通过"本地文件包含漏洞(Local File Include)"执行此脚本。

文件上传漏洞满足条件

上传的后门文件,需要能被脚本语言解析执行。

说明一:对方服务器运行的PHP环境,你不能上传一个JAVA的后门代码。
说明二:你上传文件的目录可以被脚本语言解析执行,如果你上传的目录没有执行权限也不行
说明三:一般文件上传后会返回你一个地址,如果无妨链接到也不能构成文件上传漏洞。
还有例外情况,非脚本文件也能被成功解析。比如:上传了一个图片🐎,如果对方中间件上存在一些漏洞的话,配合这些漏洞可以实现图片文件按照脚本文件解析。

文件检测流程

通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器接收到请求后并同意后,用户与web 服务器将建立连接,并传输data:
image.png
而一般一个文件上传过程中的检测如下图红色标记部分:
image.png
检测的内容一般有一下几个方面:

客户端 javascript 检测 (通常为检测文件扩展名)
服务端 MIME 类型检测 (检测 Content-Type 内容)
服务端目录路径检测 (检测跟 path 参数相关的内容)
服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
服务端文件内容检测 (检测内容是否合法或含有恶意代码)

在很多的渗透过程中,渗透人员会上传一句话木马(简称Webshell)到目前web服务目录继而提权获取系统权限,不论asp、php、jsp、aspx都是如此
先来看看最简单的一句话木马:

<?php @eval($_POST['attack']);?>

【基本原理】利用文件上传漏洞,往目标网站中上传一句话木马,然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录。@表示后面即使执行错误,也不报错。eval()函数表示括号内的语句字符串什么的全都当做代码执行。$_POST['attack']表示从页面中获得attack这个参数值。

入侵条件

其中,只要攻击者满足三个条件,就能实现成功入侵:

(1)木马上传成功,未被杀;
(2)知道木马的路径在哪;
(3)上传的木马能正常运行。

常见形式

常见的一句话木马:

php的一句话木马: <?php @eval($_POST['pass']);?>

asp的一句话是: <%eval request ("pass")%>

aspx的一句话是: <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

我们可以直接将这些语句插入到网站上的某个asp/aspx/php文件上,或者直接创建一个新的文件,在里面写入这些语句,然后把文件上传到网站上即可。

基本原理

首先我们先看一个原始而又简单的php一句话木马:

<?php @eval($_POST['cmd']); ?>

看到这里不得不赞美前辈的智慧。对于一个稍微懂一些php的人而言,或者初级的安全爱好者,或者脚本小子而言,看到的第一眼就是密码是cmd,通过post提交数据,但是具体如何执行的,却不得而知,下面我们分析一句话是如何执行的。

这句话什么意思呢?

(1)php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。

(2)@符号的意思是不报错,即使执行错误,也不报错。

image.png

为什么呢?因为一个变量没有定义,就被拿去使用了,服务器就善意的提醒:Notice,你的xxx变量没有定义。这不就暴露了密码吗?所以我们加上@。

(3)为什么密码是cmd呢?

那就要来理解这句话的意思了。php里面几个超全局变量:_POST就是其中之一。$_POST['a']; 的意思就是a这个变量,用post的方法接收。

注释:传输数据的两种方法,get、post,post是在消息体存放数据,get是在消息头的url路径里存放数据(例如xxx.php?a=2)

(4)如何理解eval()函数?

eval()把字符串作为PHP代码执行。

例如:eval("echo 'a'");其实就等于直接 echo 'a';再来看看<?php eval($_POST['pw']); ?>首先,用post方式接收变量pw,比如接收到了:pw=echo 'a';这时代码就变成<?php eval("echo 'a';"); ?>。结果如下:![image]image.png

连起来意思就是:用post方法接收变量pw,把变量pw里面的字符串当做php代码来执行。所以也就能这么玩:也就是说,你想执行什么代码,就把什么代码放进变量pw里,用post传输给一句话木马。你想查看目标硬盘里有没有小黄片,可以用php函数:opendir()和readdir()等等。想上传点小黄片,诬陷站主,就用php函数:move_uploaded_file,当然相应的html要写好。你想执行cmd命令,则用exec()。

当然前提是:php配置文件php.ini里,关掉安全模式safe_mode = off,然后再看看 禁用函数列表 disable_functions = proc_open, popen, exec, system, shell_exec ,把exec去掉,确保没有exec(有些cms为了方便处理某些功能,会去掉的)。

菜刀简介及应用

菜刀(China Chopper)是一款简单的网络渗透测试工具,它主要用于远程控制网站服务器。由于它的体积小、功能强,所以在一段时间内被一些黑客所使用。

功能特点

  1. 远程文件管理:用户可以通过菜刀上传、下载、执行服务器上的文件。

  2. 命令执行:可以在服务器上执行系统命令。

  3. 数据加密:菜刀会加密与服务器的通信数据,以减少被检测的风险。

  4. 小巧便携:菜刀的客户端非常小,只有一个可执行文件,便于携带和隐藏。

使用方法

菜刀的使用通常需要两个条件:

  1. 一个Webshell:Webshell 是植入到服务器上的一个脚本,通常是通过网站漏洞上传的。菜刀通过连接这个 Webshell 来控制服务器。

  2. 菜刀客户端:用户需要在本地计算机上运行菜刀客户端,输入Webshell的URL进行连接。

连接成功后,用户就可以像使用本地文件管理器一样管理服务器上的文件,执行命令等。

使用步骤:

1.右键空白处添加
image.png
2.添加成功后可以直接双击进入文件管理,也可以右键可以打开虚拟终端:
image.png

请前往 登录/注册 即可发表您的看法…