文件上传漏洞

本文内容来自蚁景网安课程。

Webshell原理

简介

Webshell就是以asp、php、jsp等网页文件形式存在的一种命令执行环境,也可以说是一种网络后门。黑客入侵网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或php后门,得到一个命令执行环境,以达到控制网站服务器的目的。

优点

可以穿越防火墙,因为与受控端交换的数据都是在80端口传递,不会被防火墙拦截,而且不会在系统日志中留下记录,只会在网站的Web日志中留下记录。

分类

WebShell根据编程语言可以分为php木马、asp木马,也有基于.NET的aspx木马和jsp木马。跟随时代和技术的变迁,国外也有用python编写的脚本木马,不过国内常用三种:大马、小马、一句话木马。

一句话木马

代码简短,通常只有一行代码,使用方便。

1
<?php eval($_GET['pass']); ?>
1
<?php eval($_GET['cmd']); ?>
1
<?php assert($_COOKIE['cmd']); ?>

更多一句话木马

小马

只包含文件上传功能,体积小。

大马

体积大,包含很多功能,代码通常会加密隐藏。

一句话木马剖析

传参:GET、POST、COOKIE

一句话木马用$_GET['']、$_POST['']、$_COOKIE['']接收我们传递的数据,并把接收的数据传递给一句话木马中执行命令的函数,进而执行命令。

执行命令:eval、assert等。

菜刀的使用

简介

为了方便对WebShell进行管理,出现了各种各样的WebShell的管理工具。

中国蚁剑

一款开源跨平台网站管理工具,主要面向于合法授权的渗透测试安全人员及进行常规操作的网站管理员。

项目地址

image-20220120132255068

冰蝎

使用AES算法加密,Java和.NET默认支持AES,php中需要开启openssl扩展,在V2.0版本后,php环境根据服务端支持情况动态选择,使得冰蝎更强大。

项目地址

冰蝎的Webshell只能使用冰蝎客户端进行连接,密码默认为rebeyond。

image-20220120132356951

image-20220120132333219

哥斯拉

由于冰蝎3.0bug众多,于是是@BeichenDream决定公开他所开发的一款shell权限管理工具,名为“哥斯拉”。

项目地址

生成

image-20220120133247473

image-20220120133340867

文件上传的介绍

简介

将客户端文件传到服务器的过程称为文件上传。

文件上传漏洞

如果服务器后端没有对上传文件进行严格验证和过滤,就容易造成上传任意文件的情况。一般只允许用户上传图片或文本文件,但攻击者可能绕过上传机制上传恶意代码文件从而控制服务器。

这个恶意代码文件又被称为WebShell。

文件上传漏洞的危害

上传恶意文件后,可能在服务器上执行恶意代码,进行数据库执行、服务器文件管理、命令执行等恶意操作从而控制整个网站甚至服务器。

必要条件

能上传WebShell

WebShell路径可知

WebShell可以被访问

WebShell可以被解析

文件检测方式

客户端检测

JavaScript检测

服务端检测

MIME类型检测
文件后缀检测

黑名单检测

白名单检测

文件内容检测

文件幻数检测

文件相关信息检测

图片渲染

二次渲染

绕过前端检测上传WebShell

检测方法

一般是使用javascript脚本检验文件后缀名。

判断方式:在点击上传按钮时就弹出对话框,内容如:只允许上传xx后缀名的文件,而此时没有发送数据包。

绕过技巧

在本地客户端禁用JS。

绕过MIME检测上传WebShell

MIME介绍

MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。用来表示文档、文件或字节流的性质和格式。在HTTP数据包中在Content-Type字段显示。

超文本标记语言.html文件:text/html

普通文本.txt文件:text/plain

PDF文档.pdf:application/pdf

PNG图像.png:image/png

GIF图像.gif:image/gif

MPEG文件.mpg、.mpeg:video/mpeg

绕过技巧

利用Burp Suite截获后修改数据包中的Content-Type类型为允许上传的类型从而绕过。

绕过黑名单检测上传webshell

黑名单

代码中包含一个数组或列表(存放非法字符或字符串),当检测到含有非法字符串时就不能上传。

如何确认黑名单

自定义一个文件扩展名,如果能上传,可能就是黑名单。

利用双写后缀绕过

有些代码会将文件后缀符合黑名单的字符串替换为空,可以将后缀改为.pphphp

利用其他后缀绕过

PHP: php2、php3、php5、phtml

ASP: asa、cer、cdx

ASPX: ascx、ashx、asac

JSP: jspx、jspf

利用apache配置文件绕过

.htaccess文件(Hypertext Access 超文本入口)。提供了针对目录改变配置的方法。

<FilesMatch "test.png">
setHandler application/x-httpd-php
</FilesMatch>

这样就会把test.png当作php来解析,这样就能绕过验证机制。

绕过白名单检测WebShell

白名单

与黑名单相反,数组或列表中包含的是合法字符串,如果上传的文件后缀不符合白名单就不能上传。

如何确认白名单

如果构造的文件不能上传,那么就是白名单类型。

绕过技巧

%00截断与0x00截断

前提:

PHP配置中magic_quotes_gpc=Off且版本低于5.3.29

Java:jdk < JDK1.7.0_40

%00截断

%00是一个url编码,url发送到服务器后就被服务器解码,这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即0x00。在url中%00表示ascii码中的0,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束。

image-20220123155902616

00截断

系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。但要注意是文件的十六进制的00,而不是文件名中的00。

image-20220123160337957

绕过文件内容检测上传WebShell

检测方法

文件幻数检测

通过比对前10个字节判断文件类型。

文件加载检测

调用API或函数对文件进行加载测试。常见为图像渲染测试,更严格的甚至是二次渲染。

文件幻数是什么

文件格式幻数(magic number),用于标记文件或协议的格式

二次渲染概念

根据用户上传的图片生成新突破,删除原始图片并将新图片加入到特殊数据库中。

绕过技巧

上传一张图片,再重新下载图片进行比较,在没有改变的地方插入webshell。

image-20220125104523696

解析漏洞+白名单getshell

解析漏洞概念

文件解析漏洞,是指Web容器(Apache、Nginx、IIS等)在解析文件时将文件解析成脚本文件格式并能够执行而产生的漏洞。

IIS6.0解析漏洞

目录解析:以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。

文件解析:*.asp;.jpg

;后面的会直接被忽略当成*.asp文件执行。IIS6.0默认的可执行文件除了asp还包含这三种

*.asa *.cer *.cdx

IIS7&7.5解析漏洞

IIS7/7.5在Fast-CGI运行模式下,在一个文件路径(/xx.jpg)后面加上/xx.php会将/xx.jpg/xx.php解析为php文件。

Nginx解析漏洞

用户配置不当造成的解析漏洞,在上传文件后增加/.php后缀,被解析成php文件。

Apache解析漏洞

Apache默认一个文件可以拥有多个扩展名。如果后缀名为不可解析的后缀名,就会从右往左判断。

所以上传一个test.php.jpg文件绕过验证且服务器依然会将其解析为php。

前提:Apache配置文件(Apache\conf\httpd.conf)存在以下代码:

AddHandler application/x-httpd-php .php

文件上传漏洞的修复方式

  1. 上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
  2. 对文件后缀的判断中使用白名单的方式。
  3. 文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。
  4. 不需要返回文件路径的情况下,随机改写文件名。