成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Struts2漏洞淺析之Ongl代碼執行分析

安全 應用安全
本文將從源碼層面簡單的分析Struts2漏洞形成的根本原因。

一、簡述

2010年7月exploitdb爆出的《Struts2/XWork < 2.2.0 Remote Command Execution Vulnerability》,可以稱之為神一樣的漏洞,攻擊者只要構造出合適的語句,就有很大的幾率獲得系統權限(System或者root,因為tomcat默認都會以這樣的權限運行),而且時至今日存在這個漏洞的網站仍然大有存在。本文將從源碼層面簡單的分析Struts2漏洞形成的根本原因。

二、Ognl表達式實現代碼執行

Ognl表達式是一種基于Java的功能強大的表達式。通過使用它,我們能夠通過表達式存取Java對象樹中的任意屬性和調用Java對象樹的方法,可以輕松解決在數據流轉的過程中所碰到的各種問題。但是在實際使用中,編程人員更多使用的是Ognl的數據流轉傳輸的功能,卻忘記了Ognl表達式可以執行Java代碼的功能。下面我們來通過一個常用的方法來看下它的實現過程。

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;

}

}

上面這段代碼是我自己搭建的一個Struts2實現的簡單java web功能的action部分的代碼,具體功能就是,獲得用戶提交的username參數,然后從值棧(Value Stack)中找到符合參數值的內容,并打印。紅色字體部分的findValue方法是關鍵點,下面我將在這句代碼中加上斷點,來跟蹤分析它的行為。

跟蹤進入OgnlValueStack文件中的findValue(String expr)方法,關鍵代碼如下:

Object value = ognlUtil.getValue(expr, context, root);

繼續深入追蹤進入OgnlUtil文件,看到如下代碼:

public Object getValue(String name, Map context, Object root) throws OgnlException {

return Ognl.getValue(compile(name), context, root);

}

紅色部分為Ognl類自帶的方法,其作用是根據表達式(參數1),在上下文(參數2)和指定類中(參數3)查找響應的內容,并返回,若沒有則返回空。在查詢的過程中,表達式會被執行,這使得攻擊者有可乘之機,可以利用這個方法來執行一些惡意的行為。

三、利用實現

還是使用之前部分構造的代碼,搭建一個可以用于web交互的測試平臺。通過傳遞名為username的參數來看下這個函數的威力。提交如下url:

http://target:8080/Login.action?username='#_memberAccess["allowStaticMethodAccess"]=true,@java.lang.Runtime@getRuntime().exec('calc'))'

在目標服務器中,彈出了計算器

我們所傳遞的內容被作為參數傳遞給了AC.getValueStack().findValue,之后它的內容便被執行了。解釋下傳入的語句作用,首先是給#_memberAccess["allowStaticMethodAccess"]變量賦予true值,這個變量是Xwork用于管理Ognl權限類中的成員,它控制Ognl是否可以執行Java的靜態方法。第二句調用Java方法執行系統調用,“@”是Ognl調用Java靜態方法的標識。

四、總結

Ognl被用戶Xwork和Struts框架的核心代碼中,在這些框架中很多地方都存在findValue的調用,例如:Struts的校驗框架,如果類型不匹配則默認也會調用findValue函數來檢索用戶輸入的內容。2010年爆出的Struts2遠程代碼執行和其之后出現的代碼執行問題,都和這個函數有關系。

findValue函數很像是PHP中的eval、assert函數,可以造成代碼執行,但又是必須存在的函數。看Struts和Xwork修補它們漏洞的補丁也是,去對用戶輸入的內容進行過濾或檢驗。這方面的漏洞沒有被大范圍的發現和發掘,個人認為主要原因是因為,使用這些框架進行開發的源碼大多是閉源的,外界很難獲得,所以少有人去審計。但是,它的威脅性極其強大,本篇文章所涉及的不過是九牛一毛,相對于已經有完善審計方法的PHP,Java Web還算得上是尚未開發的處女地。

責任編輯:藍雨淚 來源: 紅黑聯盟
相關推薦

2013-05-22 10:28:19

2013-07-18 15:09:27

2013-07-19 09:36:04

struts2struts2漏洞

2016-04-29 10:58:13

2013-07-18 10:06:54

2017-07-11 09:42:22

漏洞

2017-03-08 22:23:02

2009-07-17 17:45:56

iBATIS Spri

2016-06-08 10:09:24

2013-07-22 10:45:56

2023-12-14 16:20:09

2012-12-18 16:38:26

2013-07-24 10:35:02

2013-07-18 15:57:42

2009-07-29 09:54:34

struts2和str

2017-07-14 13:51:19

2012-08-30 09:48:02

Struts2Java

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-06-08 16:44:00

struts2 ogn

2014-04-30 16:07:39

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰人人插 | 成人在线视频观看 | 亚洲日韩中文字幕一区 | 欧美激情欧美激情在线五月 | 亚洲精品国产综合区久久久久久久 | 亚洲高清久久 | 国产影音先锋 | 久草色视频| 精品一二三区 | 拍戏被cao翻了h承欢 | 日本视频在线播放 | 成人网av | 欧美精品一区二区三区四区五区 | 国产精品视频久久久久 | 中文字幕综合在线 | 久久不卡 | 亚洲精品乱码久久久久久按摩观 | 日韩精品久久久久久 | 精品欧美乱码久久久久久 | 爱爱小视频| 欧美成人精品激情在线观看 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 伊人中文字幕 | 中文字幕视频网 | 成人精品一区 | 国产日韩视频 | 蜜臀久久99精品久久久久久宅男 | 一区二区三区高清不卡 | 国产成人精品一区二区三区在线 | 久久久蜜桃| 亚洲交性| 中文成人无字幕乱码精品 | 久久久久久久电影 | 日本不卡在线观看 | 亚洲午夜网 | 99精品视频一区二区三区 | 午夜影院网站 | 黄色片在线观看网址 | 成人在线观看免费视频 | 亚洲免费一区二区 | 久久激情网 |