I. Tổng quan về CommonsCollections1 chainChain này có tác dụng là RCE.Để hiểu và phân tích chain này cần có kiến thức về các cơ chế sau trong Java:
Reflection API
Dynamic Proxy
CC1 có thể sử dụng 1 trong 2 method để khai thác:
Một là sử dụng LazyMap.get(), lúc này tổng thể chain sẽ trông như sau:
12345678910111213141516ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entrySet() AnnotationInvocationHandler.invoke() LazyM...
I. Lời nói đầuĐợt này mình rảnh rảnh đọc sách System Design Interview của anh Alex Xu. Ngay chapter 1 đã giới thiệu về rất nhiều loại Database, từ relational database cho tới non-relational database. Mình cũng từng dùng được 1 vài database nhưng thật sự ko hiểu nổi cơ chế đằng sau như thế nào.Cụ thể thì mình luôn tự hỏi: “Thật sự lưu dữ liệu dạng bảng (table) trong SQL nó là cái quái gì ? Dữ liệu được lưu vào đâu, máy tính sẽ đọc như thế nào để có thể lưu và truy vấn nó ra sao ?”Cũng nhờ thời...
I. Tổng quan về CommonsCollections2 chainChain này có tác dụng là RCE.Để hiểu và phân tích chain này cần có kiến thức về các cơ chế sau trong Java:
Reflection API
Javasisst (Java Assist)
CC1 có thể sử dụng 1 trong 2 method để khai thác:
Một là sử dụng LazyMap.get(), lúc này tổng thể chain sẽ trông như sau:
12345678910111213141516ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entrySet() AnnotationInvocationHandler.invoke() ...
I. Kiến thức nềnVề thuật ngữ source và sink:
https://sheon.hashnode.dev/java-security-2-phan-tich-urldns-chain-ysoserial
Về Java bytecode và framework ASM:
https://sheon.hashnode.dev/java-learning-7-java-bytecode
https://sheon.hashnode.dev/java-learning-8-java-bytecode-asm-framework
Tổng quan về Gadget Inspector
được công bố trong bài trình bày Automated Discovery of Deserialization Gadget Chains bởi Ian Haken tại hội thảo DEFCON26 năm 2018
Slide của bài trình bày Automated Discovery of D...
Type descriptor
Kiểu trong Java
Type descriptor
boolean
Z
char
C
byte
B
short
S
int
I
float
F
long
J
double
D
Object
Ljava/lang/Object;
int[]
[I
Object[][]
[[Ljava/lang/Object;
Method descriptor
Method ví dụ
Method descriptor tương ứng
void m(int i, float f)
(IF)V
int m(Object o)
(Ljava/lang/Object;)I
int[] m(int i, String s)
(ILjava/lang/String;)[I
Object m(int[] i)
([I)Ljava/lang/Object;
Object m(String str)
(Ljava/lang/String;)Ljava/lang/Object;
pu...
Lời nói đầuNhư đã nói, sang bài này tôi sẽ phân tích chain URLDNS trong công cụ ysoserial.
Kiến thức nềnĐể hiểu được các khái niệm nói trong bài này, bạn cần có kiến thức về cơ chế Serialization/Deserialization và Reflection API. Tôi có viết về các cơ chế này trong series Java Learning, cụ thể là 2 bài sau:https://sheon.hashnode.dev/java-learning-5-serialization-deserializationhttps://phmclong.github.io/myblog/2023/07/19/java_reflection/
Ngoài ra có 1 khái niệm mà tôi sẽ dùng trong ...
Lời nói đầuMở đầu cho series Java Security, tôi sẽ viết về lỗ hổng Insecure Deserialization.
Kiến thức nềnTrước khi đến với chủ đề này, bạn nên có hiểu biết về cơ chế Serialization/Deserialization trong Java. Tôi có viết về cơ chế này trong series Java Learning, cụ thể là bài này: https://sio.hashnode.dev/java-learning-5-serialization-deserialization
Insecure Deserialization là gì ?Khi data được deserialize là data do người dùng có thể kiểm soát (user-controllable data hay untrusted data...
Lời nói đầuHôm nay tôi sẽ giới thiệu ngắn gọn về Reflection API trong Java. Việc hiểu được cơ chế của Reflection API sẽ là tiền đề quan trọng cho việc nghiên cứu lỗ hổng bảo mật Deserialization trong Java.
Kiến thức nềnTrước khi tìm hiểu Reflection, trước tiên bạn nên hiểu 2 khái niệm: giai đoạn biên dịch (compile time) và giai đoạn chạy (run time).
Compile time
Là giai đoạn mà source code được compiler biên dịch thành code mà máy tính có thể thực thi (executable code).
Trong Java, đó là quá ...
Lời nói đầuTrước khi đến với Dynamic Proxy, ta sẽ tìm hiểu Proxy Pattern là gì ?
I. Java Proxy PatternĐể nói về proxy pattern, trước hết ta cần hiểu khái niệm proxy (đối tượng đại diện/trung gian). Trong hình minh họa bên dưới, đối tượng trung gian (hoặc người đại diện) chính là thứ mà chúng ta gọi là proxy.
(Lưu ý: Hình ảnh có thể minh họa kịch bản người thuê nhà → người môi giới/đại diện → chủ nhà.)
Trong Java, Proxy Pattern là một mẫu thiết kế cấu trúc (structural design patter...