MatesCTF Final Season 3 - Attack và Defense Web challenge

Đây là cuộc thi do Viettel Cyber Security tổ chức lần thứ 3, cũng như là lần đầu mình tham gia. Đây cũng là lần đầu mình tham gia 1 cuộc thi Attack-Defense, nhưng có vẻ do nội dung là Attack - Defense nên bằng 1 cách nào đó mình không feed mạnh trong thời gian thi. Giải khuyến khích (4th) tuy không là gì nhưng như anh @AlexanderTungPham (09) đã nói : “Họ có tiền còn chúng ta có tình anh em”

Phòng Thủ

Nói về việc phòng thủ thì khác với đội ae của tụi mình, tụi mình khá yếu phòng thủ, phương pháp phòng thủ duy nhất tụi mình đưa ra là drop những packet có dính filter bằng iptables và luôn luôn phòng thủ trước khi tấn công

Tấn công

Đội mình có được 2 món vũ khí là Munchi(Web) và secure_login(Crypto) và cũng vì đây là thể loại Attack-Defense nên chỉ cần cầm 2 tay 2 súng là tụi mình có thể bám trụ ở giữa BXH tới cuối cùng ( ban đầu tụi mình tính đi du lịch thôi mà, như vậy là quá thành công rồi ). Về phần mình thì mình không tìm được lỗi nào ngoài RCE và cũng vì thế nên cả thời gian thi mình chỉ tìm cách bypass filter của duy nhất lỗi RCE.

Source

Bài này có 4 lỗi: IDOR, RCE, XXE, và SSTI. Bài viết bằng Java Spring, nói về Java thì cũng vừa là thế mạnh vừa là thế yếu của mình, mình code Java mỗi ngày (trường dạy Java, nhưng mình chả quen thuộc với các đặc điểm đặc trưng của các lỗi trên Java như thế nào), cũng chính vì vậy bọn mình phải audit source hết 7749 lần trong suốt thời gian thi để tìm ra lỗi

IDOR

Lỗi này do người anh @duckota của mình tìm ra, mình không hiểu vì sao mà mình cũng như các đội khác đều không nhìn ra, chắc do quen nhìn code PHP rồi :)))

Endpoint:

Vì api user có thể dễ dàng gọi thông tin bất kì user nào dù không có quyền admin, nên có thể dễ dàng leak api-key -> win

Nói dễ hiểu hơn cho các bạn chưa hiểu đoạn này chỉ cần gửi 1 param là username=superadmin đến api user thì mình sẽ có được api-key của superadmin, sẽ thỏa được điều kiện của api secret

http://localhost:8000/api/v1/user?username=superadmin > lấy api-key
http://localhost:8000/api/v1/secret > POST cùng api-key

RCE

Endpoint:

Trong khi người anh của mình đang fuzz xem có thể XXE và XSS không thì nhiệm vụ của mình là audit phần source còn lại để tìm thêm điểm cho team. May mắn thay mình tìm được endpoint này, chỗ này URL đưa vào check không qua bất kì 1 hard filter nào nên mình có thể dễ dàng RCE vào bằng cách dùng param -D của curl

Fact: Sau khi bị tất cả các đội filter đi chữ -D thì tụi mình gần như đã tưởng no hope rồi thì mình lại tìm cách bypass qua filter trong khi @duckota thì tìm lỗi mới, trong lúc thi mình đã tìm ra -F của curl, escape ra để dùng ping,…. Đến cuối cuộc thi team mình vẫn ôm được bài web này để tấn công <3. Tổng cộng thì chỉ lỗi này mình đưa ra khoảng 7 payload, xin lỗi các team khác nếu phải filter liên tục :v

1 số payload mình dùng

Các lỗi không tìm ra trong thời gian thi

XXE

Endpoint: http://localhost:8000/api/v1/user?username=xxxx

Đoạn này chỉ cần API-Key là XXE được

POC:

EL Injection

Endpoint: http://localhost:8000/program/1/edit

User admin có quyền edit program dưới dạng html và preview lại

Mình có thể sử dụng tag thymeleaf để chèn Expression Language vào

POC:

Backconnect về không cần netcat

Sử dụng lỗi RCE và EL Injection để chạy các command sau

Kết

Theo em (1 người lần đầu chơi AD) thì giải MatesCTF Final lần này khá vui, mình có thể học thêm nhiều thứ trong khi thi mà Jeopardy không có, nếu phải góp ý thì em chỉ góp ý với BTC là nên đợi tất cả các team không còn sự cố về mạng, … rồi hãy bắt đầu. Còn lại thì bọn em không có gì để chê trách hết.

Written on July 1, 2019