General
Cũng lâu rồi mình không viết gì cũng như là không nghiên cứu cái gì đó ra hồn nên sau đây sẽ là chuỗi bài note lại quá trình mình tìm hiểu về kỹ thuật memshell trong Java.
Memshell ?
Memshell hay còn gọi là "fileless webshell", đúng như tên gọi thì ta có thể hiểu đơn giản là webshell được load vào memory, từ đó ta có thể gọi đến thông qua một điều kiện nào đó từ request mà không cần phải truy cập đến file webshell.
Tại sao lại là memshell ?
Kỹ thuật memshell theo mình thấy là nghiên về post exploit nhiều hơn. Khi đa số trường hợp mình dùng đến memshell là đều đã RCE hoặc exploit deserialize thành công, mà server lại giới hạn việc khai thác như: chặn out bound, quyền thấp không thể write,... Điều này khiến việc RCE cũng trở nên gần như là vô nghĩa, do đó ta cần một kỹ thuật như memshell giúp giải quyết những tình huống khó ở trên.
Thêm vào đó, với các tool pivot thông qua webserver phổ biến thì đều sử dụng webshell để pivot (ví dụ như reGeorg) nên buộc ta phải có webshell sau khi compromised được server nếu như muốn tiếp tục đánh vào hệ thống. Đối với các ứng dụng java chạy với file jar build sẵn không load jsp hoặc đơn giản hơn là web không dùng đến jsp thì nếu không tìm đến memshell mình cũng chưa biết phải dùng kỹ thuật nào khác.
Cuối cùng memshell khó bị detect hơn webshell thông thường một chút
Điều kiện để triển khai memshell
Để triển khai memshell ta sẽ cần 1 trong 2 điều kiện sau:
Có thể upload file bất kỳ lên server (webshell hoặc file bất kỳ)
Có thể exploit deserialize (hoặc lỗ hổng nào đó cho phép thực thi Java code như SpEl chẳng hạn)
Vậy thì làm thế nào để triển khai memshell ?
Mình sẽ giới thiệu các cách cơ bản triển khai memshell trong các bài viết dưới đây
Last updated