Tôi chỉ là một người mới, đang cố gắng sắp xếp lại các bài viết từ các chuyên gia để học tập.
Web
---
### CISCN2024 Quốc gia - Sanic
1. Bài này liên quan đến việc ô nhiễm prototype链 trong Python và khung Sanic. Trước khi làm bài Sanic's revenge, bạn nên làm bài này để hiểu rõ hơn. Target được triển khai trên靶 trường CTFSHOW.
WP tham khảo:
- https://www.cnblogs.com/gxngxngxn/p/18205235
- Từ Sanic trong CISCN2024 đến việc khai thác ô nhiễm prototype链 trong Python - Cộng đồng Tiên Tri
2. Phân tích mã nguồn:
- Tại route /login, người dùng cần gửi cookie "user" có giá trị "adm;n". Tuy nhiên, nếu gửi trực tiếp sẽ bị fail vì dấu ";" khiến request bị cắt ngang. Nguyên nhân nằm ở cách giải mã theo RFC2068 trong hàm _unquote của Sanic.
- Để vượt qua, cần encode ";" thành octal escape sequence: \073. Payload mẫu:
payload1: cookie:user="adm\073n" 3. Sau khi đăng nhập thành công và nhận được session admin, bạn có thể truy cập route /admin.
- Tại đây, hàm pydash.set_ được sử dụng để gán giá trị cho các biến. Phiên bản pydash==5.1.2 có lỗ hổng prototype chain pollution.
- Route /src cho phép đọc mã nguồn thông qua hàm eval và open(__file__). Bạn có thể khai thác để đọc file hệ thống như /etc/passwd:
payload2: {"key":".__init__\\\\.__globals__\\\\.__file__","value": "/etc/passwd"} 4. Để tìm kiếm file flag, bạn cần kích hoạt chức năng liệt kê thư mục:
- Pollution route /static handler:
payload3: {"key":"__class__\\\\.__init__\\\\.__globals__\\\\.app.router.name_index.__mp_main__\\.static.handler.keywords.directory_handler.directory_view","value": True} payload4: {"key":"__class__\\\\.__init__\\\\.__globals__\\\\.app.router.name_index.__mp_main__\\.static.handler.keywords.directory_handler.directory._parts","value": ["/"]} - Truy cập /static/, bạn sẽ thấy danh sách file trong root directory và có thể tìm thấy tên file flag.
### Sanic's Revenge
WP tham khảo: https://www.cnblogs.com/gxngxngxn/p/18290489
1. Introduction về prototype chain pollution trong Python:
- Mỗi đối tượng trong Python đều có prototype. Khi truy cập một thuộc tính không tồn tại, hệ thống sẽ tìm kiếm lên prototype链. Lỗ hổng Prototype Pollution xảy ra khi kẻ tấn công có thể thay đổi các thuộc tính prototype để ảnh hưởng đến các đối tượng khác.
2. Phân tích mã nguồn:
- Route /pollute cho phép sử dụng pydash.set_ để gây ô nhiễm prototype chain.
- WAF được kích hoạt nếu detect thấy các từ khóa như 'parts' hoặc 'proc' trong request.
- Route bí mật /Wa58a1qEQ59857qQRPPQ đọc file /h111int.
3. Exploit:
- Pollution thuộc tính file_or_directory của static handler để đọc file:
payload1: {"key":"__class__\\\\.__init__\\\\.__globals__\\\\.app.router.name_index.__mp_main__\\.static.handler.keywords.file_or_directory","value": "/"} - Truy cập /static/proc/1/cmdline để đọc đường dẫn啟動 của process.
- Sử dụng payload1 để đọc mã nguồn và file flag.