Chuyển đến nội dung chính
  1. Nghiên cứu & Ghi chép kỹ thuật/

Các lỗ hổng lộ lọt thông tin

·718 từ·4 phút
Nguyễn Hoàng Thanh Phong
Tác giả
Nguyễn Hoàng Thanh Phong
Sinh viên năm cuối ngành An toàn thông tin tại Đại học FPT. Chuyên nghiên cứu khai thác lỗ hổng bảo mật Web, kiến trúc bảo mật AWS và các công cụ tự động hóa
Web Security Iaw301 - Bài viết này là một phần của loạt bài.
Phần 2: Bài viết này

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
#

  1. Truy cập vào trang chủ bài lab: https://[YOUR-LAB-ID].web-security-academy.net/
Trang chủ Lab
  1. 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
Nội dung robots.txt
  1. Đườ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 ở đó.
Folder backup
  1. 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.
Mã nguồn
  1. Quay lại trang chủ, click submit solution, copy-paste mật khẩu vừa tìm thấy ở bước 4.
Thành công

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
#

  1. Truy cập vào trang chủ bài lab: https://[YOUR-LAB-ID].web-security-academy.net/
Trang chủ Lab
  1. 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/

  2. Tải xuống folder .git để sử dụng git để tra xét. Ở đây, chúng ta sẽ sử dụng git-dumper để tải trích xuất đầy đủ cấu trúc thư mục Git. Chúng ta cũng có thể dùng wget -r như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/index.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-dumper

    Windows:

    1
    
    pip install git-dumper

    Linux:

    1
    
    pipx install git-dumper
- Dump `.git` vào folder `git`:

```bash
git-dumper https://[YOUR-LAB-ID].web-security-academy.net/.git git
```

![.git folder](img/web-security-iaw301/lab2/git-dumper.png)
  1. Đọc git log và phát hiện có 2 lượt commit:
1
git log
git log
  1. So sánh 2 commit hash SHA-1 với nhau:
1
git diff c632874b3e0510fd6fece1017f54d70823c70a6e 6e35abdc10da396104fb9e6f7a20d74d70bdb803
Mật khẩu Admin
  1. Sử dụng tài khoản thông tin trên đăng nhập vào tài khoản administrator để xóa user carlos và hoàn thành bài lab.
Thành công
Web Security Iaw301 - Bài viết này là một phần của loạt bài.
Phần 2: Bài viết này