灰鴿子遠(yuǎn)程控制軟件

標(biāo)題: Struts2漏洞淺析之Ongl代碼執(zhí)行分析灰鴿子論壇www.dumiaotech.com [打印本頁(yè)]

作者: admin    時(shí)間: 2012-12-19 22:07
標(biāo)題: Struts2漏洞淺析之Ongl代碼執(zhí)行分析灰鴿子論壇www.dumiaotech.com

(, 下載次數(shù): 428)


2010年7月exploitdb爆出的《Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability》,可以稱(chēng)之為神一樣的漏洞,攻擊者只要構(gòu)造出合適的語(yǔ)句,就有很大的幾率獲得系統(tǒng)權(quán)限(System或者root,因?yàn)閠omcat默認(rèn)都會(huì)以這樣的權(quán)限運(yùn)行),而且時(shí)至今日存在這個(gè)漏洞的網(wǎng)站仍然大有存在。本文將從源碼層面簡(jiǎn)單的分析這個(gè)漏洞形成的根本原因。
0x02 Ognl表達(dá)式實(shí)現(xiàn)代碼執(zhí)行
Ognl表達(dá)式是一種基于Java的功能強(qiáng)大的表達(dá)式。通過(guò)使用它,我們能夠通過(guò)表達(dá)式存取Java對(duì)象樹(shù)中的任意屬性和調(diào)用Java對(duì)象樹(shù)的方法,可以輕松解決在數(shù)據(jù)流轉(zhuǎn)的過(guò)程中所碰到的各種問(wèn)題。但是在實(shí)際使用中,編程人員更多使用的是Ognl的數(shù)據(jù)流轉(zhuǎn)傳輸?shù)墓δ埽瑓s忘記了Ognl表達(dá)式可以執(zhí)行Java代碼的功能。下面我們來(lái)通過(guò)一個(gè)常用的方法來(lái)看下它的實(shí)現(xiàn)過(guò)程。
public class Login extends ActionSupport{
     public String execute() {
         ActionContext AC = ActionContext.getContext();
         Map Parameters = (Map)AC.getParameters();
         String[] username = (String[])Parameters.get("username");
         System.out.println(AC.getValueStack().findValue(username[0]));
         return SUCCESS;
     }
}
上面這段代碼是我自己搭建的一個(gè)Struts2實(shí)現(xiàn)的簡(jiǎn)單java web功能的action部分的代碼,具體功能就是,獲得用戶提交的username參數(shù),然后從值棧(Value Stack)中找到符合參數(shù)值的內(nèi)容,并打印。紅色字體部分的findValue方法是關(guān)鍵點(diǎn),下面我將在這句代碼中加上斷點(diǎn),來(lái)跟蹤分析它的行為。
跟蹤進(jìn)入OgnlValueStack文件中的findValue(String expr)方法,關(guān)鍵代碼如下:
Object value = ognlUtil.getValue(expr, context, root);
繼續(xù)深入追蹤進(jìn)入OgnlUtil文件,看到如下代碼:
public Object getValue(String name, Map context, Object root) throws OgnlException {
     return Ognl.getValue(compile(name), context, root);
}
紅色部分為Ognl類(lèi)自帶的方法,其作用是根據(jù)表達(dá)式(參數(shù)1),在上下文(參數(shù)2)和指定類(lèi)中(參數(shù)3)查找響應(yīng)的內(nèi)容,并返回,若沒(méi)有則返回空。在查詢(xún)的過(guò)程中,表達(dá)式會(huì)被執(zhí)行,這使得攻擊者有可乘之機(jī),可以利用這個(gè)方法來(lái)執(zhí)行一些惡意的行為。
0x03利用實(shí)現(xiàn)
還是使用之前部分構(gòu)造的代碼,搭建一個(gè)可以用于web交互的測(cè)試平臺(tái)。通過(guò)傳遞名為username的參數(shù)來(lái)看下這個(gè)函數(shù)的威力。提交如下url:

http://target:8080/Login.action?username='#_memberAccess["allowStaticMethodAccess"]=true,@java.lang.Runtime@getRuntime().exec('calc'))'
在目標(biāo)服務(wù)器中,彈出了計(jì)算器
我們所傳遞的內(nèi)容被作為參數(shù)傳遞給了AC.getValueStack().findValue,之后它的內(nèi)容便被執(zhí)行了。解釋下傳入的語(yǔ)句作用,首先是給#_memberAccess["allowStaticMethodAccess"]變量賦予true值,這個(gè)變量是Xwork用于管理Ognl權(quán)限類(lèi)中的成員,它控制Ognl是否可以執(zhí)行Java的靜態(tài)方法。第二句調(diào)用Java方法執(zhí)行系統(tǒng)調(diào)用,“@”是Ognl調(diào)用Java靜態(tài)方法的標(biāo)識(shí)。
0x04總結(jié)
Ognl被用戶Xwork和Struts框架的核心代碼中,在這些框架中很多地方都存在findValue的調(diào)用,例如:Struts的校驗(yàn)框架,如果類(lèi)型不匹配則默認(rèn)也會(huì)調(diào)用findValue函數(shù)來(lái)檢索用戶輸入的內(nèi)容。2010年爆出的Struts2遠(yuǎn)程代碼執(zhí)行和其之后出現(xiàn)的代碼執(zhí)行問(wèn)題,都和這個(gè)函數(shù)有關(guān)系。Struts2漏洞淺析之Ongl代碼執(zhí)行分析灰鴿子論壇www.dumiaotech.com
作者: linuvzg    時(shí)間: 2022-7-10 22:41

強(qiáng)烈感謝樓主




歡迎光臨 灰鴿子遠(yuǎn)程控制軟件 (http://www.dumiaotech.com/) Powered by Discuz! X3.4
主站蜘蛛池模板: 亚洲av无码一区二区三区乱子伦| 无码视频免费一区二三区| 内射人妻无套中出无码| 中文字幕av无码不卡| 日韩av无码久久精品免费| 无码中文字幕av免费放| 国产成人无码精品久久久免费| 无码国产69精品久久久久网站| 国产精品无码AV天天爽播放器| 亚洲AV综合色区无码一区| 国产成人无码aa精品一区 | 亚洲无码在线播放| 亚洲国产精品无码第一区二区三区| 亚洲Av无码乱码在线播放| 亚洲最大av资源站无码av网址| 国产午夜无码视频在线观看| 无码人妻精品一区二区蜜桃百度 | 亚洲AV无码一区二区三区在线观看 | 亚洲爆乳大丰满无码专区| 亚洲国产a∨无码中文777| 天堂无码在线观看| 国产成人精品无码专区| 精品深夜AV无码一区二区老年| 中文有无人妻vs无码人妻激烈| 国产午夜无码片在线观看影院 | 亚洲成AV人片在线观看无码| 日韩精品无码Av一区二区| 无码人妻精品一二三区免费| 亚洲综合无码无在线观看| 伊人无码精品久久一区二区| 精品多人p群无码| 无码精品尤物一区二区三区| 97免费人妻无码视频| 久久亚洲AV成人无码国产| 人妻丰满av无码中文字幕| 秋霞无码一区二区| 中文字幕久久久人妻无码 | 中文字幕无码成人免费视频| 无码专区人妻系列日韩精品少妇| AV无码精品一区二区三区| 67194成l人在线观看线路无码|