searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

热部署获取webshell相关方式

2023-07-07 09:04:55
44
0

0X01 热部署介绍

       顾名思义热部署就是在应用正在运行的时候升级软件,却不需要重新启动应用。总的来说,热部署的本质是让jvm重新加载新的class文件。程序运行时,类加载器只会加载一次Java类文件,且不能卸载,这很明显不符合热部署的需要。但是,因为类加载器是可以进行更换的,所以,我们采取的方式是自定义类加载器,在自定义的类加载器中,重写findClass方法,从而实现热部署。

在常用的中间件中都提供了相关热部署的方法,如springboot和tomcat。在springboot中主要是通过devtools实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties设置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动, 并且会立即重启应用(发生在保存时机),但默认情况下,/META-INF/maven, /META-INF/resources, /resources, /static, /templates, /public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了 -个LiveReload server,当资源发生改变时,浏览器刷新)。对于tomcat来说更加智能一点,其主要有三种方式实现,其检查相关的资源变动如:

• /tomcat-7/webapps/应用名.war

• /tomcat-7/webapps/应用名

• /tomcat-7/webapps/应用名/META-INF/context.xml

• /tomcat-7/conf/Catalina/localhost/应用名.xml

• /tomcat-7/conf/context.xml

​	对于一个War部署的应用,会检查以下资源是否发生变动:

• /tomcat-7/webapps/应用名.war

• /tomcat-7/conf/Catalina/localhost/应用名.xml

• /tomcat-7/conf/context.xml

​	对于一个描述符部署的应用,会检查以下资源是否发生变动:

• /tomcat-7/conf/Catalina/localhost/应用名.xml

​	指定的DocBase目录

• /tomcat-7/conf/context.xml

一旦这些文件或目录发生了变化,就会触发热部署,当然热部署也是有开关的,在Host上,默认是开启的。相关文件在conf目录下中的server.xml中:

 

此处默认autoDeploy为true,即可实现热部署。

这里需要注意的是,对于一个目录是否发生了变化,Tomcat只判断了这个目录的修改时间是否发生了变化,所以和热加载是不冲突的,因为热加载监听的是WEB-INF/classes和WEB-INF/lib目录,而热部署监听的是应用名那一层的目录。

 

0X02 tomcat热部署获取shell

在渗透测试过程中经常会遇到两种情况,一种是webapps目录下经常会遇到不允许被上传文件,第二种文件夹可能会被防篡改监控,在这种情况下有两种解决思路:

1、在\conf\server.xml中的<host></host>内部添加<context/>标签:

<Context debug="0" docBase="D:\1" path="/demo" privileged="true" reloadable="true"/>

docBase:项目路径,可以使用绝对路径或相对路径,相对路径是相对于webapps

path:访问项目的路径,如:http://127.0.0.1:8080/demo

reloadable:是否自动加载新增或改变的class文件.

即如下图:

但是在此处有个缺点,修改此文件时需要重启tomcat服务器,在实战中不是很适用

2、在 \conf\Catalina\localhost中添加一个XML文件,如shell.xml,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/tmp" reloadable="true" />

这种方式服务器会使用xml文件名的名字作为path属性的名字,如我在/tmp文件夹下建立一个shell.jsp文件,可访问的路径即为:

http://localhost:8080/shell/shell.jsp

此处的优点是不需要重新启动tomcat服务器,直接上传相关文件即可,利用此方法可绕过相关渗透过程中的限制。

此时也可正常解析:

可被成功连接:

0条评论
作者已关闭评论
d****n
1文章数
0粉丝数
d****n
1 文章 | 0 粉丝
d****n
1文章数
0粉丝数
d****n
1 文章 | 0 粉丝
原创

热部署获取webshell相关方式

2023-07-07 09:04:55
44
0

0X01 热部署介绍

       顾名思义热部署就是在应用正在运行的时候升级软件,却不需要重新启动应用。总的来说,热部署的本质是让jvm重新加载新的class文件。程序运行时,类加载器只会加载一次Java类文件,且不能卸载,这很明显不符合热部署的需要。但是,因为类加载器是可以进行更换的,所以,我们采取的方式是自定义类加载器,在自定义的类加载器中,重写findClass方法,从而实现热部署。

在常用的中间件中都提供了相关热部署的方法,如springboot和tomcat。在springboot中主要是通过devtools实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties设置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即devtools会监听classpath下的文件变动, 并且会立即重启应用(发生在保存时机),但默认情况下,/META-INF/maven, /META-INF/resources, /resources, /static, /templates, /public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了 -个LiveReload server,当资源发生改变时,浏览器刷新)。对于tomcat来说更加智能一点,其主要有三种方式实现,其检查相关的资源变动如:

• /tomcat-7/webapps/应用名.war

• /tomcat-7/webapps/应用名

• /tomcat-7/webapps/应用名/META-INF/context.xml

• /tomcat-7/conf/Catalina/localhost/应用名.xml

• /tomcat-7/conf/context.xml

​	对于一个War部署的应用,会检查以下资源是否发生变动:

• /tomcat-7/webapps/应用名.war

• /tomcat-7/conf/Catalina/localhost/应用名.xml

• /tomcat-7/conf/context.xml

​	对于一个描述符部署的应用,会检查以下资源是否发生变动:

• /tomcat-7/conf/Catalina/localhost/应用名.xml

​	指定的DocBase目录

• /tomcat-7/conf/context.xml

一旦这些文件或目录发生了变化,就会触发热部署,当然热部署也是有开关的,在Host上,默认是开启的。相关文件在conf目录下中的server.xml中:

 

此处默认autoDeploy为true,即可实现热部署。

这里需要注意的是,对于一个目录是否发生了变化,Tomcat只判断了这个目录的修改时间是否发生了变化,所以和热加载是不冲突的,因为热加载监听的是WEB-INF/classes和WEB-INF/lib目录,而热部署监听的是应用名那一层的目录。

 

0X02 tomcat热部署获取shell

在渗透测试过程中经常会遇到两种情况,一种是webapps目录下经常会遇到不允许被上传文件,第二种文件夹可能会被防篡改监控,在这种情况下有两种解决思路:

1、在\conf\server.xml中的<host></host>内部添加<context/>标签:

<Context debug="0" docBase="D:\1" path="/demo" privileged="true" reloadable="true"/>

docBase:项目路径,可以使用绝对路径或相对路径,相对路径是相对于webapps

path:访问项目的路径,如:http://127.0.0.1:8080/demo

reloadable:是否自动加载新增或改变的class文件.

即如下图:

但是在此处有个缺点,修改此文件时需要重启tomcat服务器,在实战中不是很适用

2、在 \conf\Catalina\localhost中添加一个XML文件,如shell.xml,其内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/tmp" reloadable="true" />

这种方式服务器会使用xml文件名的名字作为path属性的名字,如我在/tmp文件夹下建立一个shell.jsp文件,可访问的路径即为:

http://localhost:8080/shell/shell.jsp

此处的优点是不需要重新启动tomcat服务器,直接上传相关文件即可,利用此方法可绕过相关渗透过程中的限制。

此时也可正常解析:

可被成功连接:

文章来自个人专栏
渗透测试
1 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0