Tomcat漏洞之——通过PUT远程代码执行

原文链接:http://www.dubby.cn/detail.html?id=9034

本文仅为技术分享,任何利用里技术的行为都和本文无关。

这是Tomcat在2017.9.19日公布的一个漏洞:

根据邮件描述,我们下了windows版tomcat 7.0.79,安装成功后,需要首先允许tomcat进行PUT操作,也就是修改/conf/web.xml

<servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
</servlet>

其中新增了:

<init-param>
            <param-name>readonly</param-name>
            <param-value>false</param-value>
</init-param>

然后启动tomcat,使用postman发送一个put请求:

再在浏览器中正常访问http://localhost:8080/helloworld.jsp:

注:localhost:8080/helloworld.jsp/也可以替换成localhost:8080/helloworld.jsp%20,因为在windows下,%20(空格)和/都是不合法的文件命名,都会被去掉。

最后再去tomcat的目录webapps\ROOT下看看:

这就是刚才通过漏洞添加上去的文件,OK,这就是tomcat的put漏洞,解决方法,最简单的就是升级。

要使Tomcat适配HTTPS并发送PUT请求,您可以按照以下步骤操作: 1. 生成SSL证书:首先,您需要生成一个SSL证书并配置在Tomcat上。您可以使用工具如OpenSSL来生成自签名证书或购买证书。 2. 配置Tomcat服务器:在Tomcat的配置文件中,找到并编辑`server.xml`文件。在该文件中找到 `<Connector>` 元素,并进行以下配置: ```xml <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="path/to/your/keystore/file" keystorePass="your_keystore_password" /> ``` 在上述配置中,您需要将 `keystoreFile` 的值设置为您生成的SSL证书的路径,将 `keystorePass` 的值设置为您在生成证书时设置的密码。 3. 配置应用程序:如果您只想为特定应用程序启用HTTPS,可以在应用程序的配置文件中进行配置。找到并编辑应用程序的 `web.xml` 文件,并添加以下安全约束: ```xml <security-constraint> <web-resource-collection> <web-resource-name>Secure Resources</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> ``` 上述配置将确保所有URL模式都通过HTTPS进行访问。 4. 发送PUT请求:要发送PUT请求,您可以使用Java的HttpClient库。下面是一个示例代码: ```java import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.net.http.HttpHeaders; import java.net.http.HttpMethod; import java.nio.file.Files; import java.nio.file.Path; public class Main { public static void main(String[] args) throws Exception { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(new URI("https://your-domain.com/your-endpoint")) .header("Content-Type", "application/json") .method("PUT", HttpRequest.BodyPublishers.ofFile(Path.of("path/to/your/file"))) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); } } ``` 请确保将 `https://your-domain.com/your-endpoint` 替换为目标URL,并将 `path/to/your/file` 替换为要发送的文件路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值