# 1. Thông tin chung
* Mã báo cáo: Hell's Lab
* Phạm vi kiểm thử: https://cyberblack.tech/
* Thời gian kiểm thử: 04/03/2025 - 06/03/2025
# 2. Tóm tắt
## 2.1 Mục đích kiểm thử
Thực hiện kiểm thử bảo mật website, xác định lỗ hổng và đề xuất phương án khắc phục.
## 2.2 Kết quả tóm tắt
Bảng tóm tắt số lượng lỗ hổng phát hiện được theo mức độ nghiêm trọng:
<style>
table {
margin: auto;
}
</style>
| Mức độ | Số lượng |
| ------------- | -------- |
| Critical | 1 |
| High | 0 |
| Medium | 1 |
| Low | 0 |
| Informational | 0 |
# 3. Phương pháp và công cụ
* Phương pháp: OWASP Testing Guide, Top 10 OWASP, NIST SP 800-115,...
* Công cụ: Burp Suite, Nmap, Metasploit, SQLmap và 1 vài tool trên Kali
# 4.Kết quả chi tiết
## 4.1 Lỗ hổng 1
* **Tên lỗ hổng:** Broken Authentication
* **Mô tả:** Ta có thể truy cập thẳng vào trang admin cụ thể là https://cyberblack.tech/convert bằng cách đổi JWT Token của ta bằng jwt_tool và JWT_KEY ta lấy được từ source code ta nhận được
* **Mức độ nghiêm trọng:** Critical
* **PoC (Proof of Concept):**
Đầu tiên là nhờ 2 hint từ source code
hint 1:

hint 2: 

thì sử dụng 2 hint đó ta có được 1 vài thứ liên quan tới mã hoá AES

tiếp theo ta sẽ dùng code python để giải AES này
```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import binascii
# Key và IV từ đề bài
key = binascii.unhexlify("969bbc9a91330066499ebe6e309cba1b")
iv = binascii.unhexlify("57114c46cb8aefd48fe18734ed3c9125")
plaintext = b"gotohell"
padded_plaintext = pad(plaintext, AES.block_size) # PKCS7 padding
# Mã hóa bằng AES-CBC
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(padded_plaintext)
# In kết quả dạng hex
print("Ciphertext (hex):", binascii.hexlify(ciphertext).decode())
```
```
kết quả là: 640ac4e02546bdee1a7fc487b970d3ff
```
nó chính là <Admin key> cụ thể chính là JWT_KEY. Như vậy ta có thể dùng nó để chỉnh sửa, tạo ra 1 JWT token theo ý ta muốn
dùng https://jwt.io/ để chỉnh sửa
ta sẽ dùng chính jwt mà web đã tạo ra lúc ta đăng kí tài khoản và áp dụng JWT_KEY lên nó

Giờ thì có thể thấy chỉ cần chỉnh is_admin:1 là ta sẽ có quyền truy cập vào trang admin theo đường dẫn https://cyberblack.tech/convert mà không cần thông qua login
Giờ ta sẽ login vào tài khoản ta tạo trước đó để nó hiện ra token

Sau đó ta sẽ thay đổi nó bằng token ta đã tạo trước đó
```eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dpbiI6dHJ1ZSwidXNlcm5hbWUiOiJjaGF5ZW1ybyIsImlzX2FkbWluIjoxfQ.oj878Ll5iodFczrIMsF8udaDBOMJxii6TCyYRDCuM6E```

Như vậy ta đã vào được

* **Tác động:** Việc người dùng (user) có thể vào trang admin như vậy sẽ dẫn tới mất dữ liệu, làm lộ thông tin hệ thống, thậm chí người ta có thể xoá hoặc thêm các dữ liệu độc vào hệ thống thông qua các chức năng của trang admin
* **Khuyến nghị và cách khắc phục:** là đừng cho hint vào source code nhưng chắc anh chị làm vậy giúp em tìm ra JWT_KEY và vào được trong
Nhưng tất nhiên là có 1 số cách khắc phục theo đúng kĩ thuật là:
* Xác thực nguồn gốc token (```iss, aud```): Kiểm tra xem token có được phát hành từ hệ thống hợp lệ hay không.
* Ràng buộc thêm thông tin (```sub, iat```): Giúp giảm thiểu rủi ro giả mạo token.
* Thêm trường ```exp``` trong JWT để giới hạn thời gian sống của token. Sau khi hết hạn, token sẽ không còn hợp lệ. Sử dụng Refresh Tokens để yêu cầu cấp lại token mới sau khi token hết hạn, thay vì để token sống mãi.
## 4.2 Lỗ hổng 2
* **Tên lỗ hổng:** Path Traversal LFI
* **Mô tả:**
* Lỗ hổng Local File Inclusion (LFI) kết hợp với Path Traversal cho phép kẻ tấn công đọc các tệp quan trọng trên hệ thống thông qua HTTP request.
* Hacker có thể sử dụng kỹ thuật ../ để thoát khỏi thư mục giới hạn và truy xuất các tệp như /etc/passwd, .bashrc, .profile
* **Mức độ nghiêm trọng:** Low - Medium ( sẽ mức cao hơn nếu hacker leo được quyền)
* **PoC (Proof of Concept):**
Đầu tiên hacker sẽ bắt gói tin viewpdf

Sau đó thay vì /view_pdf?f=(id) thì ta sẽ thay bằng
```
/view_pdf?f=../../../../etc/passwd
/view_pdf?f=../../../../home/helllabs/.bashrc
/view_pdf?f=../../../../home/helllabs/.profile
```

* **Tác động:**
* **Tiết lộ thông tin nhạy cảm**: Đọc được file hệ thống quan trọng.
* **Leo thang đặc quyền**: Nếu tìm thấy key SSH hoặc script có quyền cao
* **Khuyến nghị và cách khắc phục:**
* **Lọc và kiểm tra đầu vào**: Chặn các ký tự như ../ trong các tham số file.
* **Sử dụng danh sách trắng**: Chỉ cho phép truy cập các file trong danh sách được định sẵn.
* **Cấu hình quyền hạn đúng**: Đảm bảo các file quan trọng không thể đọc bởi user web.
* **Giám sát log**: Kiểm tra log để phát hiện hành vi truy xuất file bất thường.
# 5. Kết luận và Khuyến nghị chung
## 5.1 Kết luận
Trong quá trình kiểm thử bảo mật website https://cyberblack.tech/, chúng tôi đã phát hiện ra hai lỗ hổng bảo mật đáng chú ý:
1. **Broken Authentication** (Mức độ: Critical):
* Ứng dụng sử dụng JWT Token nhưng không bảo vệ đủ tốt, dẫn đến việc có thể giả mạo Admin bằng cách khai thác JWT Key lấy từ source code.
Điều này cho phép kẻ tấn công truy cập trực tiếp vào trang quản trị (Admin Panel), dẫn đến nguy cơ thay đổi dữ liệu, chiếm quyền kiểm soát hệ thống.
2. **Path Traversal LFI** (Mức độ: Low - Medium):
* Hacker có thể sử dụng kỹ thuật Path Traversal để đọc các tệp quan trọng như /etc/passwd, .bashrc, .profile.
* Nếu có thêm yếu tố khác (ví dụ: tìm thấy SSH Key, file chứa mật khẩu hardcoded, hoặc lỗi thực thi lệnh từ xa), mức độ nghiêm trọng có thể tăng lên đáng kể.
Những lỗ hổng này cho thấy ứng dụng chưa có các biện pháp kiểm soát truy cập mạnh mẽ và an toàn. Nếu không khắc phục sớm, kẻ tấn công có thể khai thác để chiếm quyền, đánh cắp dữ liệu hoặc phá hoại hệ thống.
## 5.2 Khuyến nghị chung
Để giảm thiểu rủi ro và nâng cao bảo mật, chúng tôi đề xuất các biện pháp sau:
1. **Cải thiện bảo mật xác thực và quản lý phiên**
* Không hardcode JWT Key trong source code. Nên lưu trữ trong biến môi trường (Environment Variables) hoặc hệ thống quản lý bí mật (Secrets Management).
* Kiểm tra chữ ký JWT (Signature Validation) một cách nghiêm ngặt.
* Áp dụng RBAC (Role-Based Access Control) để đảm bảo chỉ người có quyền mới truy cập được trang admin.
* Thiết lập hạn sử dụng (expiration - ```exp``` claim) cho JWT Token để giảm nguy cơ bị lợi dụng.
2. **Bảo vệ chống Path Traversal & LFI**
* Xác thực và lọc dữ liệu đầu vào: Không cho phép chuỗi ../ trong tham số đường dẫn file.
* Chỉ cho phép tải file từ danh sách trắng (whitelist) hoặc thư mục giới hạn.
* Cấu hình quyền chặt chẽ: Tắt quyền đọc với những file nhạy cảm đối với user chạy webserver.
3. **Tăng cường giám sát và bảo mật hệ thống**
* Kích hoạt logging & monitoring để phát hiện sớm các hành vi đáng ngờ.
* Cấu hình WAF (Web Application Firewall) để chặn các request độc hại.
* Thực hiện kiểm thử bảo mật định kỳ để phát hiện và xử lý các lỗ hổng mới.
* Việc áp dụng các biện pháp trên sẽ giúp tăng cường bảo mật hệ thống, bảo vệ dữ liệu người dùng và hạn chế nguy cơ bị tấn công trong tương lai.