1. Lộ source code thông qua các files backup#
1.1. Lý thuyết cần nắm trước khi khai thác lỗ hổng:#
Rò rỉ mã nguồn qua tập tin sao lưu xảy ra khi các tệp tạm do trình soạn thảo tự động tạo ra (như ~, .bak, .swp) bị bỏ quên trên thư mục gốc của web; do máy chủ không được cấu hình để thực thi các định dạng này nên khi truy cập, nó sẽ trả về toàn bộ mã nguồn dưới dạng plain-text thay vì thực thi chúng (như với tệp .php). Việc lộ mã nguồn này không chỉ làm rò rỉ trực tiếp dữ liệu nhạy cảm được hard-code (API keys, thông tin đăng nhập) mà còn giúp kẻ tấn công chuyển từ kiểm thử hộp đen sang hộp trắng, từ đó dễ dàng hiểu rõ logic ứng dụng để khai thác các lỗ hổng phức tạp hơn, điển hình như Insecure Deserialization.
1.2. Các bước giải quyết bài lab#
- Truy cập vào trang chủ bài lab: https://[YOUR-LAB-ID].web-security-academy.net/

- Chúng ta có nhiều cách để dò tìm các thư mục/file ẩn, cách cơ bản nhất là đọc file
robots.txt. Truy cập vào url: https://[YOUR-LAB-ID].web-security-academy.net/robots.txt

- Đường dẫn bị ẩn đi là
/backup, truy cập vào url https://[YOUR-LAB-ID].web-security-academy.net/robots.txt sẽ thấy có 1 file code.java.bakđang nằm ở đó.

- Phân tích file
ProductTemplate.java.bak, chúng ta có thể rút ra một số kết luận sau:
- Backend sử dụng framework Spring Boot (JdbcConnectionBuilder).
- JDBC Driver: org.postgresql.Driver
- Giao thức: postgresql
- IP/Hostname: localhost
- Cổng: 5432
- Tên Database: postgres
- Username: postgres (tài khoản có đặc quyền root/admin)
- Mật khẩu: 0fe…vat
String.format("SELECT * FROM products WHERE id = '%s' LIMIT 1", id)có nguy cơ tồn tại SQLi do nối chuỗi trực tiếp vào câu lệnh truy vấn nếu không . Ở đây chúng ta chỉ quan tâm mật khẩu tài khoản postgres vì bài lab yêu cầu.

- Quay lại trang chủ, click
submit solution, copy-paste mật khẩu vừa tìm thấy ở bước 4.

2. Lộ lọt thông tin qua lịch sử kiểm soát phiên bản#
1. Lý thuyết cần nắm trước khi khai thác lỗ hỏng.#
Rò rỉ lịch sử quản lý phiên bản xảy ra khi thư mục ẩn .git bị cấu hình sai và công khai trên môi trường thực tế. Bằng cách tải toàn bộ thư mục này về và phân tích bằng công cụ Git cục bộ, kẻ tấn công có thể xem được nhật ký thay đổi (commit logs) và so sánh sự khác biệt mã nguồn giữa các phiên bản (diff). Quá trình này giúp họ dễ dàng nắm bắt logic ứng dụng hoặc đánh cắp các thông tin nhạy cảm (như mật khẩu, API keys) từng bị hard-code trước đó, bởi những dữ liệu này dù đã bị xóa ở phiên bản hiện tại nhưng vẫn tồn tại vĩnh viễn trong lịch sử quản lý của dự án.
2. Các bước giải quyết bài lab#
- Truy cập vào trang chủ bài lab: https://[YOUR-LAB-ID].web-security-academy.net/

Chúng ta có nhiều cách để dò tìm các thư mục/file ẩn, do bài lab hướng đến version control history nên ta truy cập vào
/.git. Truy cập vào url: https://[YOUR-LAB-ID].web-security-academy.net/.git/Tải xuống folder
.gitđể sử dụnggitđể tra xét. Ở đây, chúng ta sẽ sử dụnggit-dumperđể tải trích xuất đầy đủ cấu trúc thư mục Git. Chúng ta cũng có thể dùngwget -rnhưng nó có một nhược điểm: nó chỉ tải được các file có link tham chiếu, nó không tải được các file mã nguồn thực sự nằm ẩn dưới dạng mã băm trong.git/objects/. Vì không có liên kết trực tiếp, các công cụ trích xuất (như git-dumper) bắt buộc phải đọc.git/indexvà.git/refs/để lấy bản đồ mã băm, từ đó mới biết chính xác cần tải những file object nào. - Cài đặt git-dumperWindows:
1pip install git-dumperLinux:
1pipx install git-dumper
- Dump `.git` vào folder `git`:
```bash
git-dumper https://[YOUR-LAB-ID].web-security-academy.net/.git git
```

- Đọc git log và phát hiện có 2 lượt commit:
| |

- So sánh 2 commit hash SHA-1 với nhau:
| |

- Sử dụng tài khoản thông tin trên đăng nhập vào tài khoản
administratorđể xóa usercarlosvà hoàn thành bài lab.
