一 背景及描述 Velocity是一個基于java的模板引擎(template engine),它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。我們知道,越是功能強大、函數(shù)豐富的渲染層語言(從某種意義上來說,PHP也可歸類為渲染層語言)越會帶來一些安全問題。 有人認為,velocity不能像jsp一樣編寫java代碼,是嚴格的mvc分離,所以相當安全。那么請看看這篇文章吧,相信看完之后你不會繼續(xù)這么認為:) 二 什么是本地包含漏洞(LFI) 本地包含(LFI)是一項經(jīng)典的web hacking技術,攻擊者目的是將可控的包含惡意代碼的文件引入,并以渲染層語言執(zhí)行。由于語言特性(如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. 簡單來說,Parse()函數(shù)是用來引入包含VTL的模板 常見用法: #parse( "me.vm" ) 與之類似且易混淆的的是Include()函數(shù),但需要注意的是,include函數(shù)引入文件內容不經(jīng)過template engine處理。 常見用法 #include( "one.txt" ) 然而,在實際代碼開發(fā)過程中,許多程序員會對變量進行拼接,寫出以下代碼(有不少真實案例,非YY): #parse("${path}.vm") 于是乎,當Path變量用戶可控時,漏洞產生了。 四 利用條件 1.parse中的變量用戶可控 2.velocity的模版讀取不只限定在web目錄下 3.能夠截斷 www.jb51.net 尤其是后兩個條件,看似非常苛刻。 但是如果仔細研究你會發(fā)現(xiàn),不少架構師并不會將velocity模版目錄限定于WEB-INF甚至Webapp目錄下,這為我們的利用帶來了可能性。 所以,在velocity.properties中,類似以下的配置都是危險的 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利用并無大的差別,總結來說無非有3種類型 1.文件跳轉讀取敏感信息 http://test.com/index.php?page=../../../../../../../../../../etc/passwd%00 2.在上傳點上傳含有惡意vtl代碼的jpg等文件,然后通過LFI進行包含以使得正常文件以vm解析。 3.修改http包,在請求url或user-agent處攜帶惡意VTL代碼,再包含accesslog或/proc/self/environ以解析。 下面我們開始實戰(zhàn),也是用的LFI的經(jīng)典利用手法之一 Step1 我們在圖片文件中插入以下代碼: #set ($exec ="thanks")$exec.class.forName("java.lang.Runtime").getRuntime().exec("calc") Step2 上傳圖片至服務器 Step3 通過本地包含漏洞點,進行目錄跳轉并%00截斷 ![]() 六 防御方法 1.velocity.properties文件進行類似如下配置 resource.loader = webapp webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader webapp.resource.loader.path=/WEB-INF/vm/ 2.對用戶提交的的參數(shù)進行../過濾 七 小結 國內關于java安全研究不多,明顯的例子就是struts漏洞,常年無人問津直至前段時間出了利用程序才在國內火熱起來。 安全最重要的是思路,漏洞并不只會發(fā)生在PHP上,希望本文能成為一個啟示 |
免責聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業(yè)用途,如果損害了您的權利,請聯(lián)系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質的創(chuàng)業(yè)信息和品牌營銷服務,與站長一起進步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨!
掃一掃,關注站長網(wǎng)微信