Ngày 29 tháng 09, 2024
Mô tả:
Báo cáo này mô tả chi tiết quá trình và kết quả kiểm thử ứng dụng Memejutsu được thực hiện bởi Quoc Huy trong tháng 09,2024.
Đối tượng : Trang Web Memejutsu
Thành viên : Quoc Huy
Công cụ : Burp Suite,VS Code
Lỗ hổng
MJ-01-001: Infomation disclosure ability to leaked all source code
MJ-01-002: Insecure Direct Object Reference (IDOR) Personal information Disclosure
MJ-01-003:SQL Injection (SQLI) leading to read all database
MJ-01-004:Path Traversal Due to Insecure Cookie Serialization
MJ-01-005: Blind OS Command Injection
| 🔴 Critical | 🟠 High | 🟡 Medium | 🟢 Low | ⚪ None |
|---|---|---|---|---|
| 1 | 2 | 2 | 0 | 0 |
| Môi trường | Phiên bản | Special privilege | Soucre code | |
|---|---|---|---|---|
| Memejutsu | Windown | |||
| MacOS | không | có |
Description and impact
-File robots.txt của mã nguồn được lưu trữ trên server: http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/ dẫn đến địa chỉ của file backup trên server, kẻ tấn công có thể truy cập vào file robots.txt để có thể đọc được nội dung mã nguồn ứng dụng.
Step to reproduce
robots.txt trên url : http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/Phát hiện có một đường dẫn Disallow là /build/backup.zip
http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/](http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/random)build/backup.zipReconmendations
backup.zip không nằm trong thư mục truy cập công khai của serverrobots.txt . File robots.txt chỉ nên dùng để hướng dẫn các công cụ tìm kiếmReferences
https://www.webitservices.com/blog/best-practices-protecting-data-backups/
Description and impact
http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/](http://memejutsu-68f6f11c4a.cyberjutsu-lab.tech/random)u/{user} có thể thay đổi giá trị {user} thành admin và có thể truy cập vào trang cá nhân của admin .Ngoài ra ở phần tạo tài khoản cá nhân người dùng có thể tạo tên đăng nhập trùng với người khác chẳng hạn như admin và sau khi tạo xong người dùng vào trang cá nhân sẽ hiện lên trang cá nhân của admin . Những kẻ tấn công có thể lợi dụng lỗ hổng để truy cập vào dữ liệu mà họ không có quyền truy cập.Step to reproduce
adminHoặc ta tạo một trang cá nhân lấy tên khác admin
/u/test/u/{user} thành admin và ta có thể truy cập và trang adminRecommendations
Reference
https://www.imperva.com/learn/application-security/insecure-direct-object-reference-idor/
Description and impact
Search người dùng có thể tìm kiếm những tiêu đề của nội dung người dùng upload lên tại trang chủ của trang web . Những kẻ tấn công có thể tận dụng những câu lệnh SQL để khai thác lỗi SQLI để khai thác thêm nhiều dữ liệu trong databaseRoot cause analysis
core-service/app/Http/Controllers/SearchController.php và phân tíchSearchController để tìm kiếm người dùng và bài viết từ cơ sở dử liệu dựa trên dầu vào $search$search trong thanh tìm kiếm không được kiểm tra và xử lý đúng cách đước khi vào trong câu truy vấn SQL$search được lấy từ câu query và sử dụng để truy vấn tìm kiếm thông tin người dùng thêm vào$search vào câu truy vấn SQL tạo lỗ hổng bảo mật. Nếu người dùng nhập vào thanh tìm kiếm với những câu truy vấn SQL độc hại , kẻ tấn công có thể thực hiện SQL injectionStep to reproduce
')%20union%20select%20null,version(),null,null,null--+";
')%20union%20select%20null,current_database(),null,null,null--+";
database hiện tại là memejutsu .Tiếp theo ta xem tables của database là gì bằng payload')%20union%20select%20null,tablename,null,null,null%20from%20pg_tables%20where%20schemaname%20='public'--+";
tables là flag Tiếp theo ta check xem column_name bên trong tables bằng payload:')%20union%20select%20null,column_name,null,null,null%20from%20information_schema.columns%20where%20table_name%20='flag'--+";
column_name để đọc được flag ta sử dụng payload sau :')%20union%20select%20null,content,null,null,null%20from%20flag--+";
Recommendations
$search trước khi sử dụng nó trong câu truy vấn SQL. Sử dụng các phương pháp an toàn như prepared statements hoặc parameterized queries để truyền tham số vào câu truy vấn SQLReferences
https://www.hacksplaining.com/signup?next=/prevention/sql-injection
Description and impact
/random cho phép chúng ta chọn ngẫu hiên bất kì hình ảnh và kèm theo tiêu đề. Trang web tạo một cookies có tên là random_session được serialize và mã hóa base64 . Những kẻ tấn công có thể thay đổi đoạn cookies và sau đó có thể đọc được những thông tin nhạy cảm trên serverRoot cause analysis
core-service/app/Http/Controllers/RandomController.phpRandomPost được tạo ra, serialized và lưu vào cookieTa cùng phân tích bên trong file core-service/app/Http/Controllers/Cookie/RandomPost.php
Phương thức tĩnh lấy meme ngẫu nhiên từ hàm getMeme
Phương thức này gọi API để lấy danh sách meme và chọn một meme ngẫu nhiên
file_get_contents có thể dẫn đến lỗi bảo mật Path Traversal . Nội dung của file_get_contents rơi thẳng vào random_session dẫn đến Path traversal/etc/passwdStep to reproduce
random_session để kiểm tra thì ta thấy được một đoạn url https://i.imgflip.com/{number_id}.jpg để tạo một hình ảnh meme mới.18:"file:///etc/passwd";
base64 và sẽ gửi vào random_sessionbase64 và encode lại và đọc được file /etc/passwdRecommendations
url trước khi được truyền vào file_get_contents()unserialize() trực tiếp trên dữ liệu cookie mà không có kiểm tra có thể dẫn đến lỗ hổng bảo mật (Insecure Deserialization).References
https://www.imperva.com/learn/application-security/directory-traversal/
Description and impact
http://images.memejutsu-68f6f11c4a.cyberjutsu-lab.tech/ có chức năng upload_image và upload_avatar từ phía người dùng. Giá trị foar để giữ nguyên tỷ lệ khi thay đổi kích thước của bức ảnh rơi vào hàm os.system . Nhiều khả năng kẻ tấn công có thể sẽ sử dụng các lệnh OS Command khai thác Command Injection dẫn đến RCE đượcRoot cause analysis
image-service/app/main.pyupload_image để upload hình ảnh lên serverfoar không được kiểm tra và xử lý đúng cách trước khi vào hàm os.systemfoar chứa các câu lệnh OS CommandStep to reproduce
token bằng lỗi Path Traversal mà ta đã khai thác trên thì phát hiện được token nằm ở file /var/www/html/.env.exampletoken thông qua Path Traversalfoar có bị lỗi OS Command Injection không bằng payload ;sleep10; kết hợp với Token mà ta đã lấy được lúc nãy.png thông qua chức năng upload_image từ server bằng payload :;cat /flag* > /storage/user/{id}/{}.png;Recommendations
os.system , thay vào đó sử dụng thư viện Python để xử lý. Có thể thay thể sử dụng subprocess để tránh OS Command InjectionReferences
https://snyk.io/blog/command-injection-python-prevention-examples/