Gadget Chain Common-Collection (Part 1)

Gadget Chain Common-Collection (Part 1)

  • Đây là chuỗi bài phân tích gadget chain của Common Collection của Java.

Reflection trong Java

Reflection là một API của java được sử dụng để truy xuất và chỉnh sửa các hành vi của các class, interface, method trong thời gian thực thi của chương trình.
Thông qua Reflection, chúng ta có thể invoke được các phương thức trong thời gian thực thi và có thể bỏ qua các hạn chế truy cập của chúng (private, protected)

Setup

Ở đây, IDE được sử dụng để phân tích sẽ là IntelliJ Ultimate của nhà JetBrain. (Chứa các công cụ và tiện ích hỗ trợ mạnh trong quá trình debug và phân tích, có thể dùng mail edu để có thể sử dụng bản Ultimate một cách miễn phí) Mình sẽ sử dụng JDK có version 1.8.0_181
  • Bắt đầu, tạo một dự án Jaav mới trong IDE với Build System là Maven để dễ dàng trong việc cài đặt các Library.
  • Trong tệp pom.xml, thêm đoạn bên dưới để thêm CC vào trong dự án.
<dependencies> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>20040616</version> </dependency> </dependencies>

Common Collection 1 - CC1

Trong gadget này, chain sẽ có dạng như bên dưới (Xem nó ở resource repository của Ysoserial)
ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entrySet() AnnotationInvocationHandler.invoke() LazyMap.get() ChainedTransformer.transform() ConstantTransformer.transform() InvokerTransformer.transform() Method.invoke() Class.getMethod() InvokerTransformer.transform() Method.invoke() Runtime.getRuntime() InvokerTransformer.transform() Method.invoke() Runtime.exec()
Nếu như bạn cũng là người mới như mình lúc viết bài này, thì để hiểu chain ở phía trên là gì và hoạt động ra sao? Thì đơn giản các bạn chỉ cần hiểu được gadget chain phía trên như là một dòng suối đổ từ trên cao xuống, và chúng ta là những người đứng ở dưới thác (Sink) phải tìm cách để vượt ngược thác để tìm đến đỉnh nguồn của thác (Source) xem nước chảy như thế nào.

Phân tích

Trong IntelliJ, có thể dùng tổ hợp phím Crtl + N để có thể tìm các Module và Class trong các thư viện.
 

Loading Comments...