Tomcat本地提权漏洞分析与防御(CVE-2016-1240)

实验环境

操作机:Windows XP
目标机:Kali 1.1.0
目标服务器:172.16.12.2

实验工具

vim编辑器: vim编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下。vim是一款十分高效的文本编辑器,本次实验主要使用该编辑器在Centos6.5下的文本编辑功能。

xshell: Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。本次实验主要使用了 Xshell 的远程连接 Kali 目标主机,操作 Kali 目标主机的功能。

实验目的

1.掌握Tomcat 本地提权的原理
2.掌握Tomcat 本地提权的方法

实验内容

漏洞危害
Debian系统的Linux上管理员通常利用apt-get进行包管理,CVE-2016-1240这一漏洞其问题出在Tomcat的deb包中,使 deb包安装的Tomcat程序会自动为管理员安装一个启动脚本:/etc/init.d/tocat*利用该脚本,可导致攻击者通过低权限的Tomcat用户获得系统root权限!

影响版本
Tomcat 8 <= 8.0.36-2
Tomcat 7 <= 7.0.70-2
Tomcat 6 <= 6.0.45+dfsg-1~deb8u1

前置知识
提权: 提权顾名思义就是提高自己在服务器中的权限,主要针对网站入侵过程中,当入侵某一网站时,通过各种漏洞提升WEBSHELL权限以夺得该服务器权限。本次实验主要是通过 Tomcat7 的低权限用户提权到 root 权限的用户。
root用户: ROOT存在于Linux系统、UNIX系统等的操作系统中,它是系统中唯一的超级用户,相当于Windows系统中的SYSTEM用户。其具有系统中所有的权限,如启动或停止一个进程,删除或增加用户,增加或者禁用硬件等等。而普通用户,一般权限较低,不能增删修改一些敏感文件。
deb包: Debian包是Unixar的标准归档,将包文件信息以及包内容,经过gzip和tar打包而成。处理这些包的经典程序是dpkg,经常是通过Debian的apt-get来运作。
符号链接:LINUX 下的符号链接相当于Windows下的快捷方式。
poc: 根据漏洞,对应的验证此漏洞存在的脚本即为poc。

实验步骤

步骤1: 漏洞代码分析

本步将根据脚本进行漏洞原理分析

Debian系统的Linux上管理员通常利用apt-get进行包管理,CVE-2016-1240这一漏洞其问题出在Tomcat的deb包中,使用deb包安装的Tomcat程序会自动为管理员安装一个启动脚本:/etc/init.d/tomcat<版本号>.sh。利用该脚本,可导致攻击者通过低权限的Tomcat用户获得系统root权限。
现在我们查看文件 /etc/init.d/tomcat7 操作如下:
首先我们使用 Evrething搜索xshell,选中xshell.exe运行xshell,然后连接上目标机的低权限用户tomcat7,账号是tomcat7,密码是:tomcat7。


然后执行命令whoami,可以看到,现在是tomcat7的权限,也就是低权限账户
Fig.2
Fig.2

然后执行命令vim /etc/init.d/tomcat7, 然后按Esc键,接下来输入英文状态下的字符冒号: set number,找到171行。:

小i提示:vim是一个文本编辑器,vim /etc/init.d/tomcat7的意思是编辑/etc/init.d/文件夹下的tomcat7文件。


其造成漏洞核心代码如下:

# Run the catalina.sh script as a daemon 
set +e 
touch "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out
chown $TOMCAT6_USER "$CATALINA_PID" "$CATALINA_BASE"/logs/catalina.out

我们阅读上面的shell脚本

  • 第一行,set +e,要知道set +e是什么意思,得先清楚set -e的含义:
    使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式,set -e的意思是若指令传回值不等于0,则立即退出shell,而set +e的意思反之
  • 第二行,touch是创建文件夹的意思,创建了catalina.out日志文件,前面的两个字符串定位了PID和BASE,涉及到其他变量这里不做探讨
  • 第三行,chown是改变文件夹权限的命令,它将catalina.out日志文件的所述用户更改为低权限用户

这个脚本看似是没有什么问题的。但是从上面的脚本可以得出三点信息:

  1. 这个脚本运行时的权限必然是root权限。因为普通用户是无法使用chown命令,也就是没有更高的权限。
  1. 该脚本使用touch命令创建文件,此时存在以下:文件存在、不存在、存在为符号链接等情况,当文件为符号链接时会默认地对链接的文件进行操作。
  1. 脚本运行完毕后Tomcat服务器启动,此时catalina.out这个log文件的所属用户为tomcat,所属组为root。

综述上述,这就给漏洞利用创造了可能。

接下来我们来验证是否可以利用:

当前的用户为tomcat7。这就是说我们能够更改所属用户为tomcat7的catalina.out这个log文件的内容和属性。
更改它的属性,让他指向/etc/shadow/文件夹下,现在我们创建一个指向 /etc/shadow 的符号链接。
使用命令ln -fs /etc/shadow /var/log/tomcat7/catalina.out,这时候就可以在/etc/shadow下创建一个链接,就相当于Windows的快捷方式一样。


此时我们查看文件cataline.out的内容,此时是权限不够,禁止读取cataline.out的内容的:
Fig.5
Fig.5

现在我们需要登陆root账户重启tomcat。登陆方法与登陆Tomcat7 用户相同,账号为:root, 密码为:123456 。重启Tomcat的命令为:

service tomcat7 restart

重启成功之后我们再次使用低权限用户读取cataline.out的内容:使用命令

head /var/log/tomcat6/catalina.out

使用head命令可以输出文件前十行的内容,而cat命令则是预览文件的全部内容。


原理:当Tomcat服务重启时,系统默认重新加载/var/log/tomcat6/catalina.out脚本,由于此时tomcat的日志文件指向了/etc/shadow文件; 而该文件就是我们之前创建的链接文件,而链接文件属于Tomcat7这个低权限用户,因此,我们就可以查看其中内容了

步骤2: 漏洞验证

本步将使用poc根据Tomcat7漏洞进行提权

我们访问实验地址file.ichunqiu.com/p96mg145下载poc文件:
然后执行命令cd /tmp进入目录,然后编辑文件vim poc.sh。将桌面的poc.sh使用Notepad++打开,将文件内容粘贴进去。然后按键盘Esc键,再输入:wq,之后按 Enter 键将文件保存。
如果无法写入文件,使用命令

chmod 755 poc.sh

执行命令后,再次重复上一步即可,chmod的意思是改变文件的权限,775是什么权限呢?第一个数字代表文件所属者的权限,第二个数字代表文件所属者所在组的权限,第三个数字代表其它用户的权限,7=4+2+1

4:执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。
2:执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。
1:设置粘着位。


这时,poc文件就已经构造好了,接下来运行脚本运行命令为:

./poc.sh /var/log/tomcat7/catalina.out

运行之后,会出现卡顿现象,这时候我们切换到root用户,重新启动Tomcat7,这时候使用命令whoami查看当前用户,这时候已经是 root 用户了,这时候就提权成功了。


可以看到,命令提示符的开头为tomcat低权限用户,而我们执行whoami命令的时候,显示的权限却是root,这样就成功的提权了。

步骤3: 漏洞修复

目前,Debian、Ubuntu等相关操作系统厂商已修复并更新受影响的Tomcat安装包。受影响用户可采取以下解决方案:
1、更新Tomcat服务器版本:
(1)针对Ubuntu公告链接 http://www.ubuntu.com/usn/usn-3081-1/
(2)针对Debian公告链接https://lists.debian.org/debian-security-announce/2016/msg00249.htmlhttps://www.debian.org/security/2016/dsa-3669https://www.debian.org/security/2016/dsa-3670
2、加入-h参数防止其他文件所有者被更改,即更改Tomcat的启动脚本为:

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

思考

1、针对本次漏洞,请参考试验中的poc,根据理解,自己动手写poc
2.、在本次的Tomcat的提权过程中,目标机是kali操作系统。目标机能不能替换为其他的操作系统,可以的话,应该换为什么操作系统?Tomcat的版本能不能替换?可以的话,应该替换为什么版本?

参考资料

http://www.freebuf.com/vuls/115862.html

课后习题

第1题:在本次Tomcat7提权的过程中,能否在Tomcat7用户下,通过touch创建poc.sh文件,并写入poc()
A、能
B、不能
第2题:在受影响用户采取解决方案中,使用chown -h 参数的作用是()
A、更改文件权限
B、更改 归属组
C、更改归属人
第3题:tomcat7提权成功之后,执行命令,whoami 的执行结果是_________ 。

参考答案:

1、B;2、A;3、root

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,245评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,749评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,960评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,575评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,668评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,670评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,664评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,422评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,864评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,178评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,340评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,015评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,646评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,265评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,494评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,261评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,206评论 2 352

推荐阅读更多精彩内容