Velocity Parse()函數(shù)引發(fā)的本地包含漏洞及利用方法
發(fā)布時(shí)間:2012-07-10 16:14:42 作者:佚名
我要評(píng)論

Velocity是一個(gè)基于java的模板引擎(template engine),它允許任何人僅僅簡(jiǎn)單的使用模板語(yǔ)言(template language)來(lái)引用由java代碼定義的對(duì)象
一 背景及描述
Velocity是一個(gè)基于java的模板引擎(template engine),它允許任何人僅僅簡(jiǎn)單的使用模板語(yǔ)言(template language)來(lái)引用由java代碼定義的對(duì)象。我們知道,越是功能強(qiáng)大、函數(shù)豐富的渲染層語(yǔ)言(從某種意義上來(lái)說,PHP也可歸類為渲染層語(yǔ)言)越會(huì)帶來(lái)一些安全問題。
有人認(rèn)為,velocity不能像jsp一樣編寫java代碼,是嚴(yán)格的mvc分離,所以相當(dāng)安全。那么請(qǐng)看看這篇文章吧,相信看完之后你不會(huì)繼續(xù)這么認(rèn)為:)
二 什么是本地包含漏洞(LFI)
本地包含(LFI)是一項(xiàng)經(jīng)典的web hacking技術(shù),攻擊者目的是將可控的包含惡意代碼的文件引入,并以渲染層語(yǔ)言執(zhí)行。由于語(yǔ)言特性(如include,require函數(shù)),此漏洞多發(fā)于PHP。
三Velocity Parse()函數(shù)
官方定義:The #parse script element allows the template designer to import a local file that contains VTL. Velocity will parse the VTL and render the template specified.
簡(jiǎn)單來(lái)說,Parse()函數(shù)是用來(lái)引入包含VTL的模板
常見用法:
#parse( "me.vm" )
與之類似且易混淆的的是Include()函數(shù),但需要注意的是,include函數(shù)引入文件內(nèi)容不經(jīng)過template engine處理。
常見用法
#include( "one.txt" )
然而,在實(shí)際代碼開發(fā)過程中,許多程序員會(huì)對(duì)變量進(jìn)行拼接,寫出以下代碼(有不少真實(shí)案例,非YY):
#parse("${path}.vm")
于是乎,當(dāng)Path變量用戶可控時(shí),漏洞產(chǎn)生了。
四 利用條件
1.parse中的變量用戶可控
2.velocity的模版讀取不只限定在web目錄下
3.能夠截?cái)?www.dbjr.com.cn
尤其是后兩個(gè)條件,看似非??量?。
但是如果仔細(xì)研究你會(huì)發(fā)現(xiàn),不少架構(gòu)師并不會(huì)將velocity模版目錄限定于WEB-INF甚至Webapp目錄下,這為我們的利用帶來(lái)了可能性。
所以,在velocity.properties中,類似以下的配置都是危險(xiǎn)的
resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = /opt/templates
file.resource.loader.path = /home/myhome/other_root_path
五 利用方法
與傳統(tǒng)LFI利用并無(wú)大的差別,總結(jié)來(lái)說無(wú)非有3種類型
1.文件跳轉(zhuǎn)讀取敏感信息
http://test.com/index.php?page=../../../../../../../../../../etc/passwd%00
2.在上傳點(diǎn)上傳含有惡意vtl代碼的jpg等文件,然后通過LFI進(jìn)行包含以使得正常文件以vm解析。
3.修改http包,在請(qǐng)求url或user-agent處攜帶惡意VTL代碼,再包含accesslog或/proc/self/environ以解析。
下面我們開始實(shí)戰(zhàn),也是用的LFI的經(jīng)典利用手法之一
Step1 我們?cè)趫D片文件中插入以下代碼:
#set ($exec ="thanks")$exec.class.forName("java.lang.Runtime").getRuntime().exec("calc")
Step2 上傳圖片至服務(wù)器
Step3 通過本地包含漏洞點(diǎn),進(jìn)行目錄跳轉(zhuǎn)并%00截?cái)?br />
六 防御方法
1.velocity.properties文件進(jìn)行類似如下配置
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/
2.對(duì)用戶提交的的參數(shù)進(jìn)行../過濾
七 小結(jié)
國(guó)內(nèi)關(guān)于java安全研究不多,明顯的例子就是struts漏洞,常年無(wú)人問津直至前段時(shí)間出了利用程序才在國(guó)內(nèi)火熱起來(lái)。
安全最重要的是思路,漏洞并不只會(huì)發(fā)生在PHP上,希望本文能成為一個(gè)啟示
Velocity是一個(gè)基于java的模板引擎(template engine),它允許任何人僅僅簡(jiǎn)單的使用模板語(yǔ)言(template language)來(lái)引用由java代碼定義的對(duì)象。我們知道,越是功能強(qiáng)大、函數(shù)豐富的渲染層語(yǔ)言(從某種意義上來(lái)說,PHP也可歸類為渲染層語(yǔ)言)越會(huì)帶來(lái)一些安全問題。
有人認(rèn)為,velocity不能像jsp一樣編寫java代碼,是嚴(yán)格的mvc分離,所以相當(dāng)安全。那么請(qǐng)看看這篇文章吧,相信看完之后你不會(huì)繼續(xù)這么認(rèn)為:)
二 什么是本地包含漏洞(LFI)
本地包含(LFI)是一項(xiàng)經(jīng)典的web hacking技術(shù),攻擊者目的是將可控的包含惡意代碼的文件引入,并以渲染層語(yǔ)言執(zhí)行。由于語(yǔ)言特性(如include,require函數(shù)),此漏洞多發(fā)于PHP。
三Velocity Parse()函數(shù)
官方定義:The #parse script element allows the template designer to import a local file that contains VTL. Velocity will parse the VTL and render the template specified.
簡(jiǎn)單來(lái)說,Parse()函數(shù)是用來(lái)引入包含VTL的模板
常見用法:
#parse( "me.vm" )
與之類似且易混淆的的是Include()函數(shù),但需要注意的是,include函數(shù)引入文件內(nèi)容不經(jīng)過template engine處理。
常見用法
#include( "one.txt" )
然而,在實(shí)際代碼開發(fā)過程中,許多程序員會(huì)對(duì)變量進(jìn)行拼接,寫出以下代碼(有不少真實(shí)案例,非YY):
#parse("${path}.vm")
于是乎,當(dāng)Path變量用戶可控時(shí),漏洞產(chǎn)生了。
四 利用條件
1.parse中的變量用戶可控
2.velocity的模版讀取不只限定在web目錄下
3.能夠截?cái)?www.dbjr.com.cn
尤其是后兩個(gè)條件,看似非??量?。
但是如果仔細(xì)研究你會(huì)發(fā)現(xiàn),不少架構(gòu)師并不會(huì)將velocity模版目錄限定于WEB-INF甚至Webapp目錄下,這為我們的利用帶來(lái)了可能性。
所以,在velocity.properties中,類似以下的配置都是危險(xiǎn)的
resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path = /opt/templates
file.resource.loader.path = /home/myhome/other_root_path
五 利用方法
與傳統(tǒng)LFI利用并無(wú)大的差別,總結(jié)來(lái)說無(wú)非有3種類型
1.文件跳轉(zhuǎn)讀取敏感信息
http://test.com/index.php?page=../../../../../../../../../../etc/passwd%00
2.在上傳點(diǎn)上傳含有惡意vtl代碼的jpg等文件,然后通過LFI進(jìn)行包含以使得正常文件以vm解析。
3.修改http包,在請(qǐng)求url或user-agent處攜帶惡意VTL代碼,再包含accesslog或/proc/self/environ以解析。
下面我們開始實(shí)戰(zhàn),也是用的LFI的經(jīng)典利用手法之一
Step1 我們?cè)趫D片文件中插入以下代碼:
#set ($exec ="thanks")$exec.class.forName("java.lang.Runtime").getRuntime().exec("calc")
Step2 上傳圖片至服務(wù)器
Step3 通過本地包含漏洞點(diǎn),進(jìn)行目錄跳轉(zhuǎn)并%00截?cái)?br />

六 防御方法
1.velocity.properties文件進(jìn)行類似如下配置
resource.loader = webapp
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path=/WEB-INF/vm/
2.對(duì)用戶提交的的參數(shù)進(jìn)行../過濾
七 小結(jié)
國(guó)內(nèi)關(guān)于java安全研究不多,明顯的例子就是struts漏洞,常年無(wú)人問津直至前段時(shí)間出了利用程序才在國(guó)內(nèi)火熱起來(lái)。
安全最重要的是思路,漏洞并不只會(huì)發(fā)生在PHP上,希望本文能成為一個(gè)啟示
相關(guān)文章
DedeCMS全版本通殺SQL注入漏洞利用代碼及工具2014年2月28日
近日,網(wǎng)友在dedecms中發(fā)現(xiàn)了全版本通殺的SQL注入漏洞,目前官方最新版已修復(fù)該漏洞,大家早點(diǎn)去官方下載補(bǔ)丁2014年2月28日2014-02-28路由器、交換機(jī)及防火墻漏洞的發(fā)現(xiàn)與防范方法
在本文中,我們將探討為什么這些設(shè)備容易受到攻擊,現(xiàn)在有多少惡意網(wǎng)絡(luò)攻擊是瞄準(zhǔn)路由器、交換機(jī)和防火墻的以及企業(yè)應(yīng)該采取什么措施來(lái)保護(hù)其網(wǎng)絡(luò)2013-12-11- 最近看到網(wǎng)上曝出的dedecms最新版本的一個(gè)注入漏洞利用,漏洞PoC和分析文章也已在網(wǎng)上公開.但是在我實(shí)際測(cè)試過程當(dāng)中,發(fā)現(xiàn)無(wú)法復(fù)現(xiàn)2013-06-11
nginx+cgi解析php容易出現(xiàn)的漏洞的分析
本文簡(jiǎn)要的分析nginx+cgi解析php容易出現(xiàn)的漏洞2012-10-25163郵箱記事本存儲(chǔ)型Xss漏洞分析與補(bǔ)救
我們來(lái)分析一下163郵箱記事本存儲(chǔ)型Xss漏洞分析與補(bǔ)救措施2012-10-23- 偶爾在網(wǎng)上看到這些,拿來(lái)和大家一塊看看,也好讓各個(gè)站長(zhǎng)懂得保護(hù)自己的網(wǎng)站2012-10-16
微軟發(fā)布Fix it工具修復(fù)IE7/8/9漏洞 ie用戶請(qǐng)盡快修復(fù)(0day漏洞)
日前有安全機(jī)構(gòu)曝光了IE瀏覽器的一個(gè)0day漏洞,利用這個(gè)0day漏洞(CVE-2012-4681)攻擊者可以繞過Windows的ASLR(地址空間布局隨機(jī)化)防護(hù)機(jī)制,訪問用戶曾訪問過的計(jì)算機(jī)2012-09-20網(wǎng)站的九大敵人有哪些 千萬(wàn)別給Web應(yīng)用漏洞可趁之機(jī)
過去,網(wǎng)站的內(nèi)容大多是靜態(tài)的。隨著HTML5的流行,Web應(yīng)用進(jìn)入一個(gè)嶄新階段,內(nèi)容的動(dòng)態(tài)化和實(shí)時(shí)共享讓阻攔不良內(nèi)容或惡意軟件變得更加復(fù)雜,公司和個(gè)人的重要信息也被暴于2012-08-23WEBSHELL箱子系統(tǒng)V1.0收信箱子代碼漏洞分析及解決方法
來(lái)分析一下WEBSHELL箱子系統(tǒng)的漏洞2012-08-17了解網(wǎng)站的九大敵人 謹(jǐn)防web漏洞威脅
過去,網(wǎng)站的內(nèi)容大多是靜態(tài)的。隨著HTML5的流行,Web應(yīng)用進(jìn)入一個(gè)嶄新階段,內(nèi)容的動(dòng)態(tài)化和實(shí)時(shí)共享讓阻攔不良內(nèi)容或惡意軟件變得更加復(fù)雜,公司和個(gè)人的重要信息也被暴于2012-08-09