tomcat配置url跳转_Tomcat进程注入技术复现

更多全球网络安全资讯尽在邑安全

最近学习了一下tomcat进程注入技术,其原理在于Java在Java SE5后引入了Java Instrumentation,该功能指的是可以用独立于应用程序之外的代理程序来监测和协助包括但不限于获取JVM运行时状态,替换和修改类定义等。这里主要利用GitHub上rebeyond的memShell工程对该技术进行复现。

技术关键点

我们希望通过访问web服务器上的任意一个url,无论该url是静态资源抑或jsp文件,无论是原生servlet还是struts action,甚至无论它是否存在,只要我们传递请求给tomcat,tomcat就能响应我们的指令。要实现这一目的,必须找到一个关键的类,这个类要尽可能在http请求调用栈的上方,又不能与具体的URL有耦合,且还能接受客户端request中的数据。分析后发现,org.apache.catalina.core.ApplicationFilterChain类的internalDoFilter方法最符合要求,internalDoFilter方法的原型如下:

private void internalDoFilter(ServletRequest request, ServletResponse response)throws IOException, ServletException {}

该方法有ServletRequest和ServletResponse两个参数,里面封装了用户请求的request和response,同时internalDoFilter方法也是自定义filter的入口:

private void internalDoFilter(ServletRequest request, ServletResponse response)throws IOException, ServletException {//Call the next filter if there is oneif (pos < n) {ApplicationFilterConfig filterConfig = filters[pos++];Filter filter = null;try {filter = filterConfig.getFilter();support.fireInstanceEvent(InstanceEvent.BEFORE_FILTER_EVENT,filter, request, reponse);...if ( Global.IS_SECURITY_ENABLED ) {final ServletRequest req = request;final ServletResponse res = response;Principal principal = ((HttpServletRequest) req).getUserPrincipal();Object[] args = new Object[]{req, res, this};SecurityUtil.doAsPrivilege("doFilter", filter, classType, args, principal);} else {filter.doFilter(request, response, this);}......

所以要实现内存注入就需要对该方法插入我们定制的代码段(具体代码可在memShell工程中找到)

复现环境搭建

1. Java环境搭建

首先去官网下载jdk文件,本次复现过程在Ubuntu虚拟机中实现,因此下载Linux版本的jdk文件,然后将下载的压缩包解压:

e577d4df583fbcbfed822a937efeb045.png

然后设置环境变量:

vi /etc/profile

这里我将jdk文件夹放到了/usr/local文件夹中,所以在文件末尾加入以下语句:

export JAVA_HOME=/usr/local/jdk1.8.0_261sexport JRE_HOME=${JAVA_HOME}/jreexport CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/libexport PATH=.:${JAVA_HOME}/bin:$PATH

然后使配置生效:

source /etc/profile

输入命令java -version检查配置是否生效:

c35209f2165e7f3e32c83810a6c556d8.png

2. 下载安装tomcat

首先去官网下载tomcat,这里选择了tomcat9,将压缩包放置于/usr/local文件夹下解压:

tar zxvf apache-tomcat-9.0.38

sudo mv apache-tomcat-9.0.38 tomcat9

然后配置tomcat,并新建用户以非root用户来启动tomcat

# 进入Tomcat安装目录下的bin目录
cd usr/local/tomcat9/bin
# 解压commons-daemon-native.tar.gz
tar zxvf commons-daemon-native.tar.gz
cd commons-daemon-1.2.2-native-src/unix/
# 使java配置生效
source /etc/profile
# 编译
./configure
make
# make后,会在当前文件夹下生成一个名为 jsvc 的文件,将其复制到$CATALINA_HOME/bin目录
cp ../..
# 添加一个用来运行Tomcat的用户
sudo adduser tomcat(根据提示设置密码)
# 回到$CATALINA_HOME/bin目录下
cd ../../
# 设置$CATALINE_HOME文件夹及其所有子文件Owner为tomcat
sudo chown -R tomcat:tomcat /usr/local/tomcat9
# 认证tomcat用户
su tomcat
# 启动tomcat
./daemon.sh start

访问127.0.0.1:8080,页面如下:

47bc1cc817997da1ed3b63abcc2c602e.png

3. 使用memShell工程文件对tomcat进行内存注入

将memShell文件上传到tomcat服务器文件夹任意位置,然后执行命令

java -jar inject.jar pppd

执行成功后,在url后加上anyurl?pass_the_word=pppd,即得到帮助信息:

5b42b47f2a0f894de753645379068583.png

执行whoami获取用户名:

6345bfc1054e1d36f821f04e4fba0fa7.png

其他功能参考帮助信息。

后记

本文主要以Java+tomcat为例进行了tomcat进程注入技术复现,该工程仅对内存webshell进行了技术实现,此外还可以通过修改源代码来实现其它功能,同时对于其他容器如JBOSS和WebLogic,只是“定位关键类”那一步稍有不同,其他环节都是一般化的工作,理论上也可以实现类似功能。

转自先知社区

欢迎收藏并分享朋友圈,让五邑人网络更安全

36a4d6e43fe56ebc3592a796fc6d28aa.png

欢迎扫描关注我们,及时了解最新安全动态、学习最潮流的安全姿势!

推荐文章

1

新永恒之蓝?微软SMBv3高危漏洞(CVE-2020-0796)分析复现

2

重大漏洞预警:ubuntu最新版本存在本地提权漏洞(已有EXP) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值