漏洞复现-文件上传

在某次对某单位进行渗透测试时,遇到一个上传点,网站是java写的,但是上传jsp和jspx时会被waf拦截,但由于上传路径可控,经过不懈努力最终成果拿到shell,于是写这篇文章记录一下

0x01 环境介绍

由于原来网站已经关闭了,所以我这几简单写了一个demo,实现了指定路径上传文件,但是过滤了jsp后缀名

图片

图片

当我们上传文件时,会自动上传到upload目录下

图片

图片

如果后缀名为jsp或者jspx则会被拦截

图片

0x02 前置知识

在 Java web 应用程序中/WEB-INF目录通常是的一个特定目录,它用于存放与应用程序配置、安全性和资源管理相关的文件和目录,并且该目录下的资源文件无法直接通过浏览器访问

图片

/WEB-INF下的一般有固定的名称和结构。

  • /WEB-INF/web.xml 配置文件,它包含有关应用程序的部署和配置信息。这包括 servlet 映射、过滤器配置、监听器配置、会话管理等。

  • /WEB-INF/classes 目录通常用于存放 Java 类文件,包括 servlet 类和其他应用程序特定的 Java 类。这些类文件在应用程序中可以被加载和调用。

  • /WEB-INF/lib 通常用于存放应用程序所需的外部 Java 库(JAR 文件)。这些库文件包含应用程序依赖的代码,例如框架、工具库和第三方库,应用程序的类加载器将从该JAR文件中加载相应的资源。

当使用某个类时,Web应用程序将尝试从/WEB-INF/classes加载该类,如果找不到,则尝试从/WEB-INF/lib下的JAR文件中搜索它。

在JAR文件的/META-INF/resources目录中可以用来放置JSP的静态资源,在servlet3.0协议规范中,包含在jar文件 /META-INFO/resources/ 路径下的资源是可以直接访问的。

例如在 Java web 应用程序的/WEB-INF/lib中添加一个jar包,在其/META-INF/resources/中有一个index.html

图片

启动tomcat,请求的URL包含/demo/index.html ,会使用这个JAR文件中的/META-INF/resources/index.html,因为实际上在/demo/目录下不存在index.html。

图片

0x03 利用过程

既然可以上传至任意路径,那么我们可以把webshell放在/META-INFO/resources/路径下打包成jar包,然后上传jar包到/WEB-INF/lib

首先使用idea新建一个项目,生成器选择Jakarta EE,模板选择

图片

然后生成的模板中demo2\src\main\resources下新建目录META-INF/resources,然后在其下面放入webshell,这里我以打印一句话作为示例

然后运行mvn package构建项目并打包成jar包

然后发包将生成的jar上传至/WEB-INF/lib

POST /demo/upload?uploadDirectory=/WEB-INF/lib HTTP/1.1Host: 127.0.0.1:8082Content-Type: multipart/form-data; boundary=----WebKitFormBoundary67oVSNngE4QsAxoKUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36Sec-Fetch-User: ?1Cookie: JSESSIONID=3989AD45810239F4B46930C472A48DB7; Content-Length: 229
------WebKitFormBoundary67oVSNngE4QsAxoKContent-Disposition: form-data; name="file"; filename="test.jar"Content-Type: application/octet-stream
PK\x03\x04......(省略)\x00\x00\x08\x00\x00y\x8dPW\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x00\x00\x00META-2\x00\x00V\x04\x00\x00\x00\x00------WebKitFormBoundary67oVSNngE4QsAxoK--

(下图中上传文件使用的是yakit语法)

图片

上传成功,但是现在直接访问http://127.0.0.1:8082/demo/shell.jsp会提示404

图片

这是因为在Tomcat中重新加载位于lib目录中的JAR文件通常需要重启Tomcat服务器,因为lib目录中的JAR文件是在Tomcat启动时加载的,而不是在运行时可以动态重新加载的。

然而有一种方法:

默认情况下,autoDeploy 设置为 true,代表tomcat默认开启热部署,一旦web应用的web.xml文件的时间戳发生变化(创建时间,修改时间或访问时间发生变化),tomcat就会重新加载应用。

那怎样使web.xml文件时间戳发生变化呢?可以通过上传一个同名同内容的文件覆盖它,即在/WEB-INF目录下上传相同内容的web.xml

POST /demo/upload?uploadDirectory=/WEB-INF HTTP/1.1Host: 127.0.0.1:8082Content-Type: multipart/form-data; boundary=----WebKitFormBoundary67oVSNngE4QsAxoKUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36Sec-Fetch-User: ?1Cookie: JSESSIONID=3989AD45810239F4B46930C472A48DB7; Content-Length: 229
------WebKitFormBoundary67oVSNngE4QsAxoKContent-Disposition: form-data; name="file"; filename="web.xml"Content-Type: application/octet-stream
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"         version="4.0">        </web-app>------WebKitFormBoundary67oVSNngE4QsAxoK--

图片

当上传成功后可以观察到tomcat日志信息,成功重新加载应用

图片

再次访问http://127.0.0.1:8082/demo/shell.jsp也成功解析

图片

此外,由于可以该改变web.xml中的内容,所以如果可以寻找到未授权的危险类也可以直接在web.xml中添加路由调用对应的类。

来源:https://forum.butian.net/share/2499

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@学习更多渗透技能!体验靶场实战练习

免费领取安全学习资料包!(私聊进群一起学习,共同进步)

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 请注意,.htaccess文件本身并不会造成上传漏洞,它是一种用于配置Apache服务器的文件。我猜测您的问题是如何利用配置错误或者漏洞上传.htaccess文件来实现服务器攻击的。 一些常见的.htaccess文件上传漏洞如下: 1. 目录遍历漏洞: 如果一个服务器上的网站没有正确限制文件上传的目录,攻击者可以上传包含攻击代码的.htaccess文件到网站的某个目录,然后通过访问该目录下的文件来执行攻击代码。 2. 文件名绕过漏洞: 有些服务器在处理上传的文件名时可能会忽略.htaccess后缀,因此攻击者可以上传包含攻击代码的.htaccess文件并将其命名为其他文件类型的后缀名,例如.php、.jpg、.gif等,然后通过访问该文件来执行攻击代码。 3. MIME类型绕过漏洞: 攻击者可以上传一个包含攻击代码的.htaccess文件,并在其中设置MIME类型为可执行文件,这样当服务器处理该文件时就会将其作为可执行文件来执行其中的代码。 请注意,这些漏洞都是由于服务器配置错误或者漏洞造成的,因此最好的解决方法是及时更新服务器软件并开启安全防护措施,例如限制上传文件的类型、大小、目录等。同时,还应该定期检查服务器配置和日志来发现潜在的安全问题。 ### 回答2: .htaccess文件上传漏洞是一种常见的Web漏洞之一,攻击者可以通过该漏洞上传恶意的.htaccess文件来对受影响的网站进行进一步的攻击。 首先,攻击者需要找到使用了.htaccess文件的目标网站,因为只有使用了.htaccess文件的网站才会存在这个漏洞。然后,攻击者需要找到可以上传文件的功能或接口,这可能是一个后台管理系统、论坛或其他用户交互的页面。 接下来,攻击者需要准备一个恶意的.htaccess文件。这个文件可以包含任意的指令,用于控制网站的访问权限、重定向链接、阻止特定的IP地址或用户等。例如,攻击者可以将.htaccess文件设置为重定向用户流量到恶意网站或者隐藏敏感文件等。 然后,攻击者通过上传功能或接口将准备好的.htaccess文件上传到目标网站的服务器上。在上传文件时,攻击者可能会利用一些漏洞或者绕过文件上传过滤的技巧,以确保文件被成功上传。 最后,攻击者需要验证上传的.htaccess文件是否生效。他们可以通过访问目标网站来检查是否按照设定的指令进行了操作。如果.htaccess文件成功生效,那么攻击者将获得对目标网站重要功能的控制,可能会导致进一步的攻击活动。 为了防止.htaccess文件上传漏洞的利用,网站管理员可以采取以下措施: 1. 检查服务器的配置,确保禁止上传.htaccess文件或限制其使用; 2. 对文件上传功能进行严格的输入验证和过滤,过滤掉恶意的文件类型和内容; 3. 及时更新软件和补丁,确保服务器和相关软件的安全; 4. 启用防火墙和入侵检测系统,以便及时发现和阻止任何恶意活动; 5. 加强对服务器和网站的监控和日志记录,及时发现异常行为。 总之,.htaccess文件上传漏洞是一种严重的Web安全威胁,攻击者可以利用该漏洞来控制目标网站。为了保护网站的安全,网站管理员需要及时修复漏洞,并采取适当的预防措施来阻止该漏洞的利用。 ### 回答3: .htaccess文件上传漏洞是一种安全漏洞,它可能允许攻击者将恶意文件上传到服务器上,并在服务器上执行任意代码。 要复现.htaccess文件上传漏洞,可以按照以下步骤进行: 1. 首先,需要找到一个存在.htaccess文件上传漏洞的目标网站。这可以通过向目标网站发送恶意文件上传请求或者查找已知的漏洞报告来实现。 2. 确定目标网站的文件上传功能是否存在安全漏洞。这可以通过上传不同类型的文件来测试是否可以绕过文件类型限制。 3. 如果文件上传功能存在漏洞,则可以使用.htaccess文件进行攻击。创建一个包含恶意代码的.htaccess文件,例如包含PHP代码的.htaccess文件。 4. 通过网站的文件上传功能上传制作好的.htaccess文件。如果上传成功,那么.htaccess文件将被保存在服务器上,并且服务器将执行其中的恶意代码。 5. 最后,攻击者可以利用已经成功上传的.htaccess文件执行各种恶意操作,例如在服务器上创建后门、执行任意命令、获取敏感数据等。 为了防止.htaccess文件上传漏洞,应采取以下预防措施: 1. 对文件上传功能进行严格的输入验证和过滤,确保只能上传安全的文件类型。 2. 对上传的文件进行严格的文件类型检查,避免可以执行恶意代码的文件类型被上传。 3. 设置最小化的文件上传权限,仅允许必要的文件上传操作。 4. 定期更新网站的软件和插件,以保持与最新的安全修补程序同步。 5. 监控网站的日志文件,及时发现异常文件上传行为。 总之,.htaccess文件上传漏洞是一种严重的安全威胁,为了保护网站和用户的安全,应该进行安全验证和限制,以防止攻击者利用该漏洞进行恶意操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值