iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
Security

Izumi從零開始的30日WEB馬拉松系列 第 10

Day-10 認識基本攻擊XSS

  • 分享至 

  • xImage
  •  

今天來到了第八天,既然前面學了那麼久(好啦,其實也沒到真的很久)的前備知識,那麼也適時後來適任一下基本的攻擊手段了,當然我們一樣也是從最基本的開始學起,而我們今天要學的就是XSS攻擊。

什麼是XSS攻擊?

XSS的中文全名叫做跨站腳本攻擊,通常這個攻擊在CTF的題目或真實網站的漏洞裡都蠻常見的,英文則叫做Cross-Site Scripting,而為甚麼會說對我們而言XSS攻擊算是基本的呢?因為我們之前學了HTML/JS/Cookie,剛好能夠銜接上,因為XSS就是利用將惡意JS程式碼插進網頁中,而當其他的使用者打開頁面時,這段程式碼就會在他們的瀏覽器中執行。

例如當我們插入這段代碼<script>alert("我要進來囉!")</script>,其他人打開這個頁面時,就會跳出alert視窗,並寫著「我要進來囉!」,這就是最最最簡單的XSS攻擊。

XSS的種類

而XSS又能根據攻擊的觸發位置、持續性、利用方式的不同,分類成反射型/儲存型/DOM型,而分類則有助於開發者可以針對不同的情境進行防禦,攻擊者也能依照型別決定如何誘導受害者,下面我們就來簡單介紹這三種類型吧!

1.反射型

定義: 惡意程式碼夾在「使用者輸入 → 伺服器回應 → 瀏覽器執行」的單次回應裡。程式碼不會存到伺服器,只會即時「反射」回來。

特徵:
攻擊要靠「點擊連結」或「送出表單」觸發。
不會持久存在。
常見於 搜尋功能、錯誤訊息頁面。

用途:
駭客把惡意連結寄給受害者 (釣魚信件)。
點進去就觸發攻擊。

2.儲存型XSS

定義:惡意程式碼會被「永久存放」在伺服器或資料庫裡,之後每次有人瀏覽就會觸發。

特徵:
攻擊有持續性、危害範圍大。
常見於 留言板、論壇、聊天室、個人簡介。

用途:
偷 Cookie → 偽裝成受害者登入。
注入惡意廣告、假登入頁面。
擴散式攻擊 (使每個訪客都被影響)。

3.DOM型XSS

定義: 攻擊發生在 前端 JavaScript 操作 DOM 時,不是伺服器輸出的問題,而是網頁本身的 JS 程式碼寫法不安全。

特徵: 漏洞存在於 前端程式碼,不一定需要伺服器參與。

用途:不需要改伺服器端程式。

今日XSS小練習

今天我們要做的練習是利用Burp Suite攔截後,找出弱點並對其修改

一.準備測試環境

首先先把下面的python程式碼進行複製並儲存成檔案後執行

# XSS_reflected.py
from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route("/search")
def search():
    q = request.args.get("q", "")
    html = f"""
    <!doctype html>
    <html>
      <head><meta charset="utf-8"><title>Search</title></head>
      <body>
        <h1>Search page</h1>
        <p>Search results for: {q}</p>
      </body>
    </html>
    """
    return render_template_string(html)

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000, debug=False, use_reloader=False)

注意!記得先安裝flask

二.打開並設定Burp Suite(今天不是測https無須匯入CA也無須開啟omega zero)

將瀏覽器那邊輸入http://127.0.0.1:5000/search?q=test
此時會攔截到請求,點右鍵選Send to Repeater
記得點擊Forwardhttps://ithelp.ithome.com.tw/upload/images/20250920/20178008WSEL4QQUhy.png
到 Repeater 分頁,修改請求把q=test 改成 q=<script>alert("XSS")</script>,按Send
應該會出現這樣的畫面(記得瀏覽器網址要改Proxy那邊要按forward)
https://ithelp.ithome.com.tw/upload/images/20250920/20178008m0rSFYTAlR.png
這樣就表示我們成功XSS攻擊這個網站了

而這邊我們使用的原理是當伺服器把使用者輸入(如URL的q參數)直接拼進 HTML回應,而不把特殊字元(<, >, " 等)做HTML encode,攻擊者就能把 <script>或其他可執行片段「注入」到頁面中,當其他使用者(或同一個瀏覽器)打開該回應時,瀏覽器會執行攻擊者放進來的JavaScript→XSS成功。

今日小結

以上大概就是今天簡單介紹的XSS,之後我們之後將介紹更多的攻擊類型,希望能帶給大家收穫


上一篇
Day09- 基礎Burp Suite操作教學
下一篇
Day-11 認識CSFR
系列文
Izumi從零開始的30日WEB馬拉松12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言