實驗環境
操作機: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的權限,也就是低權限賬戶
然后執行命令
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日志文件的所述用戶更改為低權限用戶
這個腳本看似是沒有什么問題的。但是從上面的腳本可以得出三點信息:
- 這個腳本運行時的權限必然是root權限。因為普通用戶是無法使用
chown
命令,也就是沒有更高的權限。
- 該腳本使用touch命令創建文件,此時存在以下:文件存在、不存在、存在為符號鏈接等情況,當文件為符號鏈接時會默認地對鏈接的文件進行操作。
- 腳本運行完畢后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的內容的:

現在我們需要登陸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