(CVE-2016-1240 )Tomcat本地提权漏洞本地环境复现及个人分析


0x00.前言
今年10.1爆出了这个漏洞,后来因为我们学校要举办ctf,由于这个漏洞利用难度不大又比较新所以想到把这个漏洞结合到比赛的题目中,于是便有了这次测试。

0x01.漏洞分析
其实这个漏洞影响范围挺广泛的,基本所有使用了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文件提权一样。

0x02.漏洞利用
测试环境:
Ubuntu 16.04 LTS
tomcat 6.0 deb包

1. 本地安装ubuntu虚拟机,并通过apt-get获取tomcat deb包并安装tomcat环境并运行。

2. 切换到tomcat用户权限,删除catalina.out文件,再创建一个指向/etc/ld.so.preload的符号链接,之后我们就可以写一个so来覆盖系统的getuid方法从而获得root权限,由于以上操作freebuf的exp都有写到,所以我直接复制exp利用。

# exp利用

在root用户下重启tomcat服务,即可获得rootshell

0x03.修复建议
1.及时更新tomcat版本
2.加入-h参数防止其他文件所有者被更改

chown -h $TOMCAT6_USER “$CATALINA_PID” “$CATALINA_BASE”/logs/catalina.out

参考链接:
http://www.freebuf.com/vuls/115862.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注