主題:解析 HTTP 請求與回應(headers、body、cookies、status code),並用 Burp 與瀏覽器開發工具實作觀察、修改與重發請求
一、今日目標
熟悉 HTTP 請求(Request)與回應(Response)的主要構成:Method、URL、Headers、Body、Status Code、Cookies、Content-Type 等。
使用瀏覽器開發者工具觀察請求/回應,並用 Burp Suite 攔截、修改與重放(Repeater)請求。
用 curl 做基本請求示範(加 header、帶 cookie、POST body)。
記錄重點截圖與測試結果,並理解這些概念如何應用到 SQLi / XSS / CSRF 的測試與防禦。
二、HTTP 基本概念速記
Request line:METHOD URL HTTP/VERSION(例如 GET /index.php?id=1 HTTP/1.1)
Common Methods:GET(取資源)、POST(送資料/改變狀態)、PUT、DELETE、HEAD、OPTIONS
Headers:描述請求/回應的 metadata(例:Host、User-Agent、Content-Type、Cookie、Set-Cookie、Referer、Origin、Content-Length)
Body:POST/PUT 等方法帶的實際資料(form data、JSON、multipart)
Response:狀態列(Status Code, e.g. 200, 302, 404, 500)、headers(Content-Type、Set-Cookie)、body(HTML/JSON)
Cookies:伺服器透過 Set-Cookie 指示瀏覽器儲存,再由瀏覽器在後續請求以 Cookie header 發送
狀態碼重點:200 OK、301/302 Redirect、401 Unauthorized、403 Forbidden、404 Not Found、500 Server Error、503 Service Unavailable
三、用瀏覽器開發者工具觀察
在瀏覽器開啟 DVWA
開啟 DevTools → Network(網路)分頁,勾選 Preserve log(保留紀錄)。
執行一次操作(例如登入、點選某模組),在 Network 列表點選一個請求檢視右側面板:
Headers:檢視 Request URL、Request Method、Request Headers(含 Cookie)、Response Headers(含 Set-Cookie)。
Payload / Request Body:檢視表單資料或 JSON。
Response:檢視伺服器回應的 HTML 或 JSON。
四、用 Burp Suite 攔截與修改請求(實作步驟)
啟動 Burp → Proxy → 確認 Proxy Listener(例如 127.0.0.1:8080)開啟。
在瀏覽器設定代理為 Burp(HTTP 代理 127.0.0.1:8080)。
開啟 Burp → Proxy → Intercept → 確認 Intercept is on。
在瀏覽器執行一個操作(例如表單送出),Burp 會攔截請求並停下來顯示 Request。
修改 Method(POST → GET)、修改 Body、或新增/變更 Header(例如刪除 Referer、增加 X-Forwarded-For)
點 Forward 送出去或 Drop 丟棄
使用 Repeater:選 Request → Send to Repeater,進到 Repeater 標籤後可以多次修改並重發,觀察不同 payload 的回應差異(非常適合做 SQLi / XSS 測試)。
Burp 範例操作:攔截登入請求 → 在 body 把 password 改成 ' OR '1'='1' -- → Forward → 檢查回應是否繞過驗證(僅限 DVWA / 測試環境)。
五、用 curl 示範(命令列範例)
注意:以下範例只在測試環境使用。
GET 請求:
curl -i "http://localhost:8080/DVWA/vulnerabilities/sqli/?id=1"
-i 會印出 response headers。
帶 header 與 cookie 的 GET:
curl -i -H "User-Agent: MyAgent" -H "Accept: text/html" -b "PHPSESSID=xxxx; security=low" "http://localhost:8080/DVWA/vulnerabilities/sqli/?id=1"
POST 表單(x-www-form-urlencoded):
curl -i -X POST -d "username=admin&password=password&Login=Login" "http://localhost:8080/DVWA/login.php"
POST JSON:
curl -i -X POST -H "Content-Type: application/json" -d '{"name":"test"}' "http://localhost:8080/api/example"
觀察 redirect(顯示 Location header):
curl -i -L "http://localhost:8080/some_redirect"
六、常見 headers 與意義
Host:目標主機
User-Agent:瀏覽器 / 客戶端資訊(偽造 User-Agent 有時可測規則)
Referer / Origin:來源頁面(CSRF 防護常檢查)
Content-Type:告訴伺服器 body 格式(application/x-www-form-urlencoded、multipart/form-data、application/json)
Cookie / Set-Cookie:會話管理、認證資訊
Authorization:HTTP Basic / Bearer token
Content-Length:body 長度
七、如何把這些知識應用在攻防測試
SQLi / XSS:找到會回顯或納入 DB 的參數(看 Request Body / URL)→ 在 Burp Repeater 修改 payload → 觀察 Response body 是否有回顯或錯誤。
CSRF:觀察表單是否有 CSRF token(hidden input)或檢查 Origin/Referer 是否被驗證;若無可構造跨站偽造請求。
Session 流程:觀察 Set-Cookie 與 Cookie,確認是否有 HttpOnly / Secure / SameSite 設定;若沒設定,XSS 可能偷取 cookie(結合 XSS 攻擊)。
WAF/IDS 測試:透過修改 headers(例如刪除或偽造 X-Forwarded-For、User-Agent)觀察是否觸發防火牆/IDS 規則。
九、常見問題與解法
Burp 攔截不到請求:檢查瀏覽器代理是否設定正確,或是否有系統/瀏覽器擋掉代理(某些瀏覽器擴充套件會)。
看不到 Set-Cookie / Cookie:某些 cookie 設 HttpOnly(無法被 JS 讀取,但會在 headers 顯示);若未顯示,確認 Network 面板是否選到正確請求。
修改 request 後 server 回 400/500
curl 與瀏覽器行為不同:瀏覽器會自動處理 cookie、重定向與某些 headers;curl 需要手動帶 -b/-c 或 -L。
十、防禦要點
把 HTTP 知識寫到報告的防禦部分可以這樣表述:
強化 Session Cookie 設定:HttpOnly, Secure, SameSite=Lax/Strict。
對輸入/輸出進行嚴格驗證與編碼:Content-Type 與 body 處理要按預期解析,輸出給 HTML 時做 HTML escape。
檢查 Origin/Referer/CSRF Token:對改變狀態的請求(POST/PUT/DELETE)加入 CSRF token 驗證。
最小化敏感資訊在 header/body 的傳送:避免在 URL 或 Referer 中放敏感參數(避免在回溯 log 或 proxy 中洩露)。
錯誤處理:避免回傳過多內部錯誤資訊(500 stack traces);把詳細錯誤寫到伺服器日誌並保護日誌存取。
十一、當天成果
使用瀏覽器 DevTools 與 Burp 觀察並記錄 Request / Response 的 headers 與 body。
在 Burp 中攔截一個登入或表單請求,修改 payload 後用 Repeater 重發,觀察回應差異並保存截圖與 curl 輸出。
撰寫 HTTP 相關的防禦建議,並說明如何應用到後續的 SQLi / XSS / CSRF 測試。
十二、心得反思(範例)
掌握 HTTP Request / Response 的結構能讓我在做攻防測試時更有方向:知道要在哪裡放 payload、要觀察哪些 headers,以及如何模擬不同客戶端行為(瀏覽器 vs curl)來測試防護機制。Burp 的 Repeater 與 Intercept 是日常測試工作流的核心工具。