【网络安全】文件上传漏洞 详解

文件上传漏洞

1.什么是文件上传

将客户端数据以文件形式封装,通过网络协议发送到服务器端。在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存。

通常一个文件以HTTP协议进行上传时,将POST请求发送至Web服务器,Web服务器收到请求并同意后,用户与Web服务器将建立连接,并传输数据。

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

服务器配置不当

文件上传限制被绕过,过滤不严

开源编辑器的文件上传漏洞

文件解析漏洞导致文件执行

3.文件上传漏洞危害

攻击者通过上传恶意文件传递给解释器去执行,然后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作,从而控制整个网站、服务器。

这个恶意的文件又称WebShell。

可能存在漏洞的位置

图片上传功能

头像上传功能

文档上传功能

4.webshell

了解

webshell 是以asp、jsp、或cgi等网页文件形式存在的一种命令执行环境,也可以称之为网页木马后门。

攻击者可以通过这种网页后门获得网站服务器操作权限,控制网站服务器进行上传下载文件、查看数据库、执行命令等。

后门

一台计算机上有65535个端口,每个端口是计算机与外界连接所开启的门,每个门都有计算机提供的一些服务,攻击者利用这些服务,获取服务器的权限,给自己进入计算机留下一个后门。

分类
  1. 根据文件大小分类:

    一句话木马:通常只有一行代码

    小马:只包含文件上传功能

    大马:包含很多功能,代码通常会进行加密隐藏

  2. 根据脚本类型分类

    jsp

    asp

    aspx

    php

特点
  1. webshell大多以动态脚本形式出现
  2. webshell就是一个asp或者php木马后门
  3. webshell可以穿越服务器防火墙,攻击者与被控服务器交换数据都是通过80端口传递
  4. webshell一般不会在系统日志中留下记录,只会在web日志中留下数据传递记录。
攻击流程
  1. 利用web漏洞获取web权限
  2. 上传小马
  3. 上传大马
  4. 远程调用webshell执行命令
常见webshell

PHP

<?php eval($_GET[pass]);?> <?php eval($_POST[pass]);?>

pass为参数,打开木马后需要在网址中回显

http…/?pass = phpinfo(); 或者system(ipconfig);等命令

ASP

<%eval request(“pass”)%>

ASPX

<%@ Page Language=“Jscript”%><%eval(Request.Item[“pass”])%>

JSP

<%Runtime.getRuntime().exec(request.getParameter(“i”)));%>

5.webshell基本原理

1.可执行脚本

​ HTTP数据包

2.数据传递

3.执行传递的数据

​ 直接执行

​ 文件包含执行

​ 动态函数执行

​ 回调函数

一句话小马
<?php fputs(fopen("up.php","w"),'<?php eval($_POST["cmd"])?>');?>

在当前目录下创建up.php文件,文件内容为PHP代码

通过小马上传大马

使用base64工具将PHP代码转成字符串(需要二次编码去除+=等特殊字符)

创建up.php,将文件上传PHP代码写入up.php中

<?php fputs(fopen(base64_decode(dXAucGhw),w),base64_decode(base64_decode(PHP代码编码)));?>

base64_decode()做解码处理 dXAucGhw是up.php的编码处理。

之后可以通过文件上传功能传入大马。

6.webshell管理工具

1.中国菜刀(caidao) (比较落后,有后门)

2.c刀(cknife)

3.Weevely3 (kali中自带)

4.中国蚁剑(AntSword)

5.冰蝎(Behinder)

对数据传递会进行加密,可以很好的绕过防火墙。

7.文件上传检测方式

客户端JavaScript检测(检测文件扩展名)(前端检测)

服务端MIME类型检测(检测content-type内容)

MIME 参考手册 (w3school.com.cn)

服务端目录路径检测(检测根path参数相关的内容)

服务端文件扩展名检测(检测跟文件extension相关的内容)

服务端文件内容检测(检测内容是否合法,是否含有恶意代码等)

8.绕过方法

使用burpsuite工具进行抓包,然后进行对文件的修改,使其达到符合服务器检测的形式。

绕过客户端检测(前端JavaScript检测)

客户端检测原理:

通常在上传页面里含有专门检测文件上传的JavaScript代码,最常见的就是检测文件类型和扩展名是否合法。


方法:

在本地浏览器客户端禁用JS即可。

可以使用火狐浏览器的NoScript插件、IE中禁用JS等方式实现。


绕过服务端检测

服务端检测原理:

服务端的代码通常检测三个点:

MIME类型、文件后缀、文件内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afZHgJBZ-1677413271759)(C:\Users\wrz\AppData\Roaming\Typora\typora-user-images\image-20230226183230079.png)]

文件幻数:文件中开头的几个字节,可以标识文件为何类型的文件。

文件格式的幻数File Format and Magic Number_BloodyEve的博客-CSDN博客_文件幻数

使用WinHex工具可以查看相应文件幻数。


绕过方法:

1.绕过MIME类型检测

原理:

检测图片类型文件上传过程中http包的Content-Type字段的值,来判断上传文件是否合法。

方法:

用burpsuite截取并修改数据包文件的content-type类型进行绕过。


2.绕过文件后缀检测-黑名单

原理(黑名单策略):

文件扩展名在黑名单中为不合法,一般有个专门的黑名单列表,里面会包含常见的危险脚本文件。

方法:

  1. 后缀大小写绕过 (.pHp)

    在对后缀的判断中,如果只是对字符串进行单独的比较来判断是不是限制文件,可以采用后缀名大小写绕过。

  2. 空格绕过 (.php )

    如果黑名单没有对后缀名进行去空处理

    可以通过在后缀名后加空进行绕过。

  3. 点绕过 (.php.)

    如果黑名单没有对后缀名进行去点处理

    利用Windows系统的文件名特性,会自动去掉后缀名最后的点,通过对文件名后缀加点进行绕过。

  4. ::$DATA绕过

    如果黑名单没有进行去::$DATA处理

    利用Windows下NTFS文件系统的一个特性,可以在后缀名后加::$DATA,绕过黑名单的检测。

    Windows会自动把::$DATA过滤。

  5. 配合Apache解析漏洞

    Apache解析有一个特点:

    解析文件从右往左判断,如果不可识别解析再往左判断。

    如aa.php.owf.rar文件,Apache不可识别解析rar和owf,便会解析成php文件。

  6. .htaccess文件(分布式配置文件)

    配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测。

    .htaccess文件,全称为Hypertext Access(超文本入口)。

    提供了针对目录改变配置的方法。

    文件上传到服务器时,服务器会找到.htaccess文件进行读取,解析配置。

    可以自定义此配置,来使文件绕过检测。


3.绕过文件后缀检测-白名单

原理(白名单策略):

文件扩展名不在白名单中为不合法。

绕过方法:

服务端判断文件类型是从后往前判断,而对文件解析是从前往后解析。

可以利用00截断的方式进行绕过,包括%00截断与0X00截断。

例子:上传文件名为aa.php%00.png的一个文件

服务端判断文件类型是从后往前判断,服务器读取到%00时会解析成0X00,当存在0X00时,自动忽略0X00后面的内容,

那么就会把此文件当成png文件上传,绕过白名单。

当服务器保存文件时,从前往后解析,自动忽略.png,就会保存为php文件。

注意

在url中变为aa.php%00.png,在文件扩展名中,需要将%00进行解码再添加进文件扩展名。

用burpsuite工具添加,先在需要添加%00的地方添加空格,然后查看HEX位置,空格的HEX是20,将此位置改为00,即为%00的解码。


4.绕过文件内容检测

原理:

一般通过检测文件内容来判断上传文件是否合法。

两种检测方法:

通过检测文件幻数。

调用API或者函数对文件进行加载测试。常见的是图像渲染测试(可能会二次渲染测试)。

绕过方法:

  1. 绕过文件幻数检测

​ 在文件开头添加相应文件幻数。

​ 如:绕过jpg文件幻数检测就要添加FF D8 FF E0 10 4A 46 49 46

  1. 绕过文件加载检测

对渲染/加载测试攻击----代码注入绕过

攻击原理:

​ 在不破坏文件本身的渲染情况下找一个空白区进行填充代码

​ 一般是图片的注释区,可以保证文件结构完整。

对二次渲染的攻击方式-----攻击文件加载器自身

攻击原理:

​ 通过溢出攻击对文件加载器进行攻击,

​ 上传恶意文件后,服务器上的文件加载器会主动测试,加载测试 时被溢出攻击执行shellcode.

9.Web解析漏洞

Apache解析漏洞

解析文件从右往左判断,如果不可识别解析再往左判断。

如aa.php.owf.rar文件,Apache不可识别解析rar和owf,便会解析成php文件。

IIS6.0解析漏洞

1.目录解析

形式:www.xxx.com/xx.asp/xx.jpg

原理:服务器默认会把.asp目录下的文件都解析成asp文件。

2.文件解析

形式:www.xxx.com/xx.asp;.jpg

原理:服务器默认不解析分号后面的内容,因此xx.asp;jpg 便被解析成asp文件了

IIS7.0解析漏洞

形式:任意文件名/任意文件名.php

**原理:**IIS7.0/7.5是对php解析时有一个类似于Nginx的解析漏洞,

对任意文件名 只要在URL后面追加上字符串"/任意文件名.php"就会按照php的方式去解析

Nginx解析漏洞

形式1:任意文件名/任意文件名.php

**原理:**对任意文件名 后面添加"/任意文件名.php"就会按照php的方式去解析,如test.jpg/x.php

形式2:任意文件名%00.php

对低版本的Nginx可以在任意文件名后面添加%00.php进行解析攻击

(Nginx版本<=0.8.37)

猜你喜欢

转载自blog.csdn.net/love_wgll/article/details/129230797