建立一個本地可啟動的脆弱 Web Lab(含反射/儲存 XSS 範例)。
用 Docker 把環境封裝成映像,能快速啟動/重置。
確認可以在 lab 做 Day5/Day4 的測試(抓封包、重放 payload)。
僅在本機或隔離 VM 執行。
啟動時請綁定到 localhost(127.0.0.1),不要對外開放。
若你在可共用網路,啟動時加 --network none 或用 127.0.0.1:PORT 綁定。
app.py
from flask import Flask, request, render_template_string
app = Flask(__name__)
@app.route('/')
def index():
return '<a href="/search">Go to search</a>'
@app.route('/search')
def search():
q = request.args.get('q', '')
# 故意不做輸出編碼(vulnerable)
template = """
<h1>Search</h1>
<form action="/search" method="get">
<input name="q" value="{{q}}" />
<button type="submit">Search</button>
</form>
<div>Results for: %s</div>
""" % q
return render_template_string(template)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=False)
requirements.txt
Flask==2.2.5
Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]
docker-compose.yml(可選,方便管理)
version: "3.8"
services:
vuln_web:
build: .
ports:
- "127.0.0.1:5000:5000" # 僅綁定本機
restart: unless-stopped
啟動步驟(在 vuln_lab 目錄)
建檔後,建立映像:
docker build -t vuln_lab:1.0 .
或使用 compose:
docker-compose up --build -d
開瀏覽器到 http://127.0.0.1:5000,點 Search,輸入 alert('XSS') 測試反射 XSS。
若要停止並移除容器(reset lab):
docker-compose down
# 或
docker ps | grep vuln_lab && docker stop <container_id> && docker rm <container_id>
安全強化(測試結束後建議)
停止容器、移除映像:docker rmi vuln_lab:1.0
若你在公開網路執行過,記得檢查防火牆與 port 映射,並移除任何外放設定。
今天完成 Day6:在本機用 Flask + Docker 建置脆弱實驗室並成功觸發反射型 XSS。過程學會把容器綁定於 localhost、建立映像與重置流程,體會測試需在隔離環境進行以確保安全。下一步計畫加入儲存型 XSS 與自動化測試,並把測試步驟與證據整理成可重複的報告。