# Information disclosure vulnerabilities
## Lab 1: Information disclosure in error messages

- Khi chọn **View detail** của sản phẩm bất kì, chúng ta được chuyển tới thư mục `/product`. Quan sát thanh URL nhận thấy trang web hiển thị tới giao diện người dùng chi tiết sản phẩm thông qua tham số `productId=1`. Mình đã thử thay `producId=-1` và nhận được kết quả

- Như vậy tham số chỉ nhận giá chỉ là số nguyên dương và các trường hợp còn lại sẽ rơi vào các `exception`. Sau đó mình thử cho tham số `producId` bằng 1 chuỗi abc để xem `exception` khi khác kiểu dữ kiệu là gì

- Kết quả hệ thống báo lỗi và in ra luôn phiên bản sử dụng của framework `Apache Struts 2 2.3.31`

## Lab 2: Information disclosure on debug page

- Trang web chứa một trang debug tiết lộ một số thông tin quan trọng. Chúng ta cần tìm kiếm giá trị biến môi trường **SECRET_KEY**
- Sau khi kiểm tra source code thì mình thấy đoạn comment cho biết một đường dẫn `/cgi-bin/phpinfo.php` tới một trang Debug.


## Lab 3: Source code disclosure via backup files

- Trang web bị lộ file backup trong một thư mục ẩn, chúng ta cần tìm kiếm database password chứa trong file backup đó.
- Sau khi truy cập vào roots.txt mình thấy có đường dẫn chứa file backup

- Truy cập vào thì có thông tin như sau


- Ta thấy passwork database là `g7t4vrnx8ypbfakr2jdxs7nj9nybolb3`

## Lab 4: Authentication bypass via information disclosure

- Giao diện administrator của trang web chứa lỗ hỏng xác thực và có thể khai thác bằng các lỗ hổng qua phương thức HTTP. Chúng ta cần truy cập vào trang admin panel từ đó xóa tài khoản người dùng `carlos`. Chúng ta được cung cấp một tài khoản hợp lệ `wiener:peter` cho mục đích kiểm thử.
- Mình đã thử thêm `/admin` thì nhận được phản hồi như sau

- Đổi phương thức `GET` thành `TRACE` ta được

- Ở đây mình ý header **X-Custom-IP-Authorization: 183.81.120.97**. Đây là header xác định IP người dùng. Bởi vậy, để trở thành local user, có thể sử dụng header này với IP 127.0.0.1 giả mạo local user.



## Lab 5: Information disclosure in version control history

- Trang web tiết lộ một số thông tin nhạy cảm qua các công nghệ kiểm soát phiên bản lịch sử mã nguồn. Chúng ta cần khai thác, tìm kiếm mật khẩu người dùng `administrator`, từ đó xóa tài khoản người dùng `carlos`.
- Mình thử thêm `/.git` vào url thì nhận được kết quả:

- Đây là dấu hiệu cho thấy trang web sử dụng công nghệ git quản lý mã nguồn và đang bị lộ thông tin tại thư mục `/.git`.
- Ở đây, tôi sử dụng hệ điều hành Linux để khai thác lỗ hổng này. Sử dụng lệnh `wget -r https://example-website/.git` để crawl toàn bộ dữ liệu về:

- Bây giờ mình sẽ đi kiểm tra nhật ký của git xem đã có chuyện gì xảy ra


- Vậy là tại `commit 9d91833db7ade41ac68762a69c4f07c9fdc452ef` mật khẩu admin bị xóa khỏi file config. Vì vậy mình đã dùng lệnh `git checkout 9d91833db7ade41ac68762a69c4f07c9fdc452ef` để chuyển đến commit và nó đã xuất hiện thêm 1 file mới là `admin.conf` so với lúc ban đầu

- Sau khi đọc file `admin.conf` thì mình thu được

- Vậy mình có username và password là `administrator:jv77qpxazn8muomtep4c`
