## https://sploitus.com/exploit?id=B8D4763C-AF1B-5B76-8A78-7ABB55C2F66C
# EXPLOITWATCH WEB — Student Lab Edition
## 1. Mục tiêu
ExploitWatch là web app minh họa quy trình:
**Host/IP nội bộ → Nmap phát hiện dịch vụ/version/CPE → NVD trả CVE/CVSS → Exploit-DB local cho biết có exploit công khai hay không.**
Bản này có **Demo Mode** để trình bày ngay cả khi chưa cài Nmap hoặc chưa gọi được NVD.
## 2. Cấu trúc
- `app.py`: web Flask.
- `scanner.py`: gọi Nmap, đọc XML và lấy port/service/product/version/CPE.
- `nvd_client.py`: tra NVD CVE API 2.0.
- `exploitdb.py`: đối chiếu CVE với `data/files_exploits.csv`.
- `demo_data.py`: dữ liệu mẫu trình bày.
- `templates/index.html`: giao diện.
- `static/style.css`: định dạng giao diện.
- `data/files_exploits.csv`: bạn tự đặt file Exploit-DB đã tải ở đây.
## 3. Cài thư viện
Mở PowerShell trong thư mục dự án:
```powershell
python -m pip install -r requirements.txt
```
## 4. Chạy web
```powershell
python app.py
```
Mở Chrome:
`http://127.0.0.1:5000`
### Demo nhanh
- Chọn **Demo Mode**.
- Bấm **SCAN / SEARCH**.
- Web sẽ hiển thị host mẫu, dịch vụ Apache 2.4.49 và các CVE mẫu để trình bày.
## 5. Live Scan
### Điều kiện
1. Cài Nmap trên Windows.
2. Đặt `files_exploits.csv` vào:
`data/files_exploits.csv`
3. Máy có Internet để gọi NVD API.
4. Chỉ nhập `localhost` hoặc IP private/lab, ví dụ:
- `127.0.0.1`
- `192.168.1.20`
- `10.0.0.15`
- `172.16.0.10`
Bản nộp cố ý không cho nhập IP Internet công khai.
### Chạy
- Chọn **Live Scan (Private IP)**.
- Nhập IP.
- Bấm **SCAN / SEARCH**.
## 6. Nếu NVD giới hạn API
Có thể đăng ký NVD API key và khai báo trong PowerShell trước khi chạy:
```powershell
$env:NVD_API_KEY="API_KEY_CUA_BAN"
python app.py
```
Không bắt buộc cho Demo Mode.
Không có API key, ứng dụng chủ động làm chậm các yêu cầu NVD để tôn trọng giới hạn public API; Live Scan nhiều dịch vụ vì vậy có thể chậm hơn.
## 7. Cho máy khác trong cùng Wi-Fi/LAN truy cập
`app.py` lắng nghe ở `0.0.0.0:5000`.
Trên máy chạy ExploitWatch:
```powershell
ipconfig
```
Tìm IPv4, ví dụ `192.168.1.15`.
Máy thầy mở:
`http://192.168.1.15:5000`
Nếu Windows Firewall hỏi, chỉ cho phép trên **Private network**.
## 8. Nội dung có thể trình bày với giáo viên
- Nmap nhận diện service/version và CPE.
- CPE/product-version được dùng làm khóa tra cứu CVE.
- NVD cung cấp mô tả, CVSS, severity, ngày công bố/cập nhật.
- Exploit-DB bổ sung chỉ báo “đã có exploit công khai hay chưa”.
- CVSS phản ánh severity; mức ưu tiên thực tế của tổ chức còn cần asset criticality, exposure, KEV/EPSS và bối cảnh triển khai.
## 9. Phạm vi sử dụng
Chỉ sử dụng Live Scan trên hệ thống thuộc quyền quản lý hoặc đã được phép kiểm tra.
## 10. API của ExploitWatch
Sau khi chạy local:
- API docs JSON: `http://127.0.0.1:5000/api`
- Health: `http://127.0.0.1:5000/api/health`
- Demo: `http://127.0.0.1:5000/api/demo`
- Search CVE: `POST http://127.0.0.1:5000/api/search`
- Live scan lab: `POST http://127.0.0.1:5000/api/scan`
Xem chi tiết trong `API.md`.
## 11. Deploy lấy link công khai bằng Render
1. Tạo repository GitHub mới, ví dụ `exploitwatch-web`.
2. Upload toàn bộ file trong thư mục `ExploitWatch_Web` lên repository.
3. Đăng nhập Render.
4. Chọn `New` → `Web Service`.
5. Kết nối GitHub và chọn repository.
6. Build Command: `pip install -r requirements.txt`
7. Start Command: `gunicorn app:app`
8. Deploy.
Render cấp URL kiểu:
`https://exploitwatch-xxxx.onrender.com`
Sau đó:
- Web: `https://exploitwatch-xxxx.onrender.com`
- API docs: `https://exploitwatch-xxxx.onrender.com/api`
- Demo API: `https://exploitwatch-xxxx.onrender.com/api/demo`
- Search API: `https://exploitwatch-xxxx.onrender.com/api/search`
### Lưu ý quan trọng về Live Scan khi deploy cloud
Render chạy trên Internet, không nằm trong Wi-Fi/LAN của bạn. Vì vậy một app trên Render không thể quét trực tiếp `192.168.x.x` ở mạng nhà/trường của bạn. Chức năng `/api/search` và Demo hoạt động phù hợp trên cloud; `/api/scan` nên chạy trên máy trong cùng mạng lab với target.