Templated

Search for a command to run...

No comments yet. Be the first to comment.
Docker Docker là gì? Docker là gì? Docker là nền tảng sử dụng để phát triển, đóng gói và chạy ứng dụng. Về cơ bản, Docker sử dụng công nghệ Container hóa để cô lập các ứng dụng và tách nó ra khỏi hạ tầng sử dụng, bằng cách này thì việc triển khai và ...
Walkthrough Đề bài đưa ra một Source code bao gồm hàm bị mật mã hóa (encrypt) và một đoạn thông báo(message) đã bị mật mã hóa. Về cơ bản đoạn mã hóa này chỉ sử dụng toán học và mã hóa (encoding) để sinh ra bản mã(cipher text). def encryption(msg): ...
Tóm tắt Đây lại là một bài Whitebox, cần một chút hiểu biết(đã từng làm) về các lỗ hổng khác để có thể hoàn thành bài. Điểm đang chú ý nhất là việc lỗi dẫn đến lỗ hổng SSRF ở bài này là việc chuyển đổi từ String tới bytes có thể dẫn tới lỗ hổng. Wa...

Tóm tắt Bài này tiếp tục là một bài Whitebox. Lỗi đến từ việc sử dụng thư viện có lỗ hổng ở đây là Pillow. Walkthrough Nói sơ qua về Web thì đây là một Web cho phép upload ảnh là tập hợp chúng lại thành một ảnh Gif Xem qua một chút source thì có du...

Đây một bài Blackbox cần quan sát thêm ở các thông tin đưa ra là có thể nhận ra.
Vector attack ở bài này liên quan tới SSTI (sever side template injection) khi cho phép người dùng tùy ý điều khiển ở một số page tưởng như vô hại dẫn đến RCE.
Đầu tiên khi bước vào thì website hiển thị duy nhất thông tin về Framework sử dụng.

Dựa vào tên Framework là Flask/Jinja2 và tên của Challenge thì tìm đã search được về lỗi hổng SSTI ở framework này. Nhưng mà website này trống, lấy gì để injection đây? Mình thử test thêm URL random xem lấy thêm được thông tin gì không ._.

Ồ, nó sử dụng template để in ra tên page lỗi? Injection thử payload trong Cheat sheet xem thế nào nhỉ ._.

Đúng như dự đoán, có thể Injection tại đây. Vậy làm như thế nào để RCE đây? Thì các tài liệu liên quan đến lỗ hổng SSTI của Python nhắc đến rất nhiều từ khóa MRO (method resolution order). Mình đọc qua thì cơ bản nó là cách mà Python lookup các attributes khi mà Python cho phép đa kế thừa (multiple inheritance) thì việc các lớp cha có cùng thuộc tính là có thể xảy ra, việc lookup này diễn ra từ dưới lên trên, từ trái qua phải của các lớp kế thừa. Và các lớp này có thể truy cập thông qua phương thức mro() hoặc __mro__ . Từ đây ta có thể gọi các lớp hoặc thuộc tính khác từ đây.
Trở lại với website thì thử với các thuộc tính của một string lớp bình thường xem sao nhé

Vậy là từ đây có thể gọi đến các thuộc tính của lớp object là cha tất cả lớp khác. Phương thứcsubclasses() có thể gọi ra được tất cả các subclass đó.

Ta có ở đây một lô các lớp. Lớp Popen có thể RCE nên lấy đúng vị trí của nó là được =)) Nhưng nhiều thế này đếm đến bao giờ :"< Rất may python có phương thức slice mảng khá hay nên tìm nó cũng không đến mức phải đếm từng cái một.

Vậy xác định được index của lớp Popen. Rồi tạo một instance rồi lấy data ra thôi. Payload đầy đủ sẽ thế này.
"".__class__.__mro__[1].__subclasses__()[414](["cat flat.txt"],shell=True,stdout=-1).communicate()
Và lấy flag ra thôi :v
