CTF

Web

WWW

by watermelon

who am i?

西瓜

  • 建電副社+學術
  • 揪寒訓
  • ​APCS忘記帶身分證的傻逼
  • ​I人 不敢跟你打招呼一定是因為我社恐
  • 什麼都學 啥都學不好
  • 夜貓子
  • :suicide:
  • 貓戰/LOL 玩家

推個研究大攝影

Index

intro

仙貝芝士

漏洞

這頁真是做的可有可無

這句也是

這句也是

這句也是

這句也是

這句也是

這句也是

工具

intro

{​Web}

  • Web:網站

    • 尋找+利用網頁有的漏度(vulnerablility)

  • 常用技術

    • command/code injection(指令注入)

    • SQL injection

    • XSS(Cross-site scripting)

  • 好康的
    • Bug bounty program(漏洞賞金)
    • pen testing(滲透測試)
    • 增進自己網頁開發技術

{Web}

  • 經常用到的能力

  • python
  • 前端三劍客 三本柱
    • ​html、CSS、Js
    • ​F12(開發人員工具)
  • 網路概論(小黑簡報)
  • 對常見漏洞的認識
  • linux
  • (database)資料庫
  • 顯然電腦要有網路

{仙貝先備知識}

{​前後端}

  • 前端:

    • ​直接面對+處理使用者的操作
    • 把資料傳到後端
    • 接收後端的回應&處理
    • 純前端的網頁可以github page免費託管
  • ​後端:

    • ​處理前端傳來的使用者行為 資料庫等服務交互
    • 在某些情況下可以不用存在:靜態網站
      • 內容固定 無伺服器端資料存取 
      • ​用外部api代替
  • ​伺服器長期保持運作以回應使用者請求(自架 or 雲端託管)

{​前端}

  • 大多由html css js組成

{​Html}

  • 超文本標記語言(HyperText Markup Language)不是程式語言

  • 檔案名後綴:.html .htm(為什麼有兩種副檔名)
  • 常被比喻成網站的「骨架」,構成網頁的各個組件

  • 每個部件都是一個標籤 以尖括號表示 結尾符號會加上"/"

    • 例: <p>ian is dian</p>

{​Html}

  • 超文本標記語言(HyperText Markup Language)不是程式語言

  • 檔案名後綴:.html .htm(為什麼有兩種副檔名)
  • 前端網站必備

  • 還可以加上屬性"attribute"

{​CSS}

  • 階層樣式表 (Cascading Stylesheets)不是程式語言

  • 檔案明後綴:.css
  • 常被比喻為網站的「外表」:控制字體 顏色 大小 動畫 佈局

  • 無法獨自使用 必需配合html/xml(標記語言們)

  • 可以放在html裡面或者獨立成.css

  • 其實可以不要存在 但網站變超醜

有CSS

沒CSS

{​Js}

  • 爪哇劇本 (JavaScript) ∈程式語言

  • 檔案明後綴:.js
  • 跟java沒半沒半毛錢關係 單純跟風

  • 可以被比喻為人的神經和肌肉:處理互動和行為邏輯

  • 語法簡單 快 相容性佳 但安全性較低(你看人家rust)

  • 可以沒有 例如一些簡單的blog就不需要js

  • 至於這些東東各自要怎麼寫&語法

    • 所以你該去上每週五的網頁小社

    • ​用之前學其他程式語言的邏輯寫看看

      • ​不會再google/gpt搞懂就好

    • ​把台上講師問倒
  • 太雜了 沒得一個一個教​​

{​後端}

  • 有許多不同的語言支持開發 僅做簡單介紹

    • ​PHP (ex:fb wordpress)
      • ​使用者多 相當常見
      • 簡單 但常有人批評語法太古老
    • ​​​Java(ex:Linkedin、Amazon)
      • ​應用多 跨平臺兼容性高
    • ​Ruby(ex:twitter(誰要叫他x))
      • ​開發快 但難寫(詳見去年寒訓睡死的rubyonrails)

{​後端}

  • 有許多不同的語言支持開發 僅做簡單介紹

    • ​Python (ex: reddit Ig)
      • ​好學 簡單 擴充多
    • ​Javascript(node.js) (ex:Yahoo)
      • ​前後端都用一樣 方便
    • Go (ex:google yahoo)
      • ​Google在推自己家的語言
      • 編譯快 保密性高 跨平臺
      • 語法太簡單功能少 標準庫功能少
      • 垃圾處理系統
      • 錯誤(例外)處理差

{​資料庫}

  • 伺服器儲存資料的地方

  • ​​關聯式資料庫:
    • 以表格形式儲存:需預先定義結構(資料種類、項目名稱)
    • 以SQL作為查詢
  • 非關聯式資料庫:
    • ​每種的格式不太一樣 用的語言也不太一樣
-- SQL關鍵字多用大寫
-- 回傳指定範圍
SELECT 欄位名稱 FROM 表格名稱
-- 舉例:從database中回傳所有欄位(列出表格內容)
SELECT * FROM database 

-- 加上判斷條件
SELECT 欄位名稱 FROM 表格名稱 WHERE 條件
-- 舉例:從User資料庫回傳年齡 > 25 的 姓名、年齡
SELECT 姓名, 年齡 FROM Users WHERE 年齡 > 25; 
/* 相等在SQL中是"=" 不是 "==" */

{HTTP://}

複習一下小黑講的網路概論吧

{​http request}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

{​Method}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

動作 告訴伺服器你要幹嘛

 

{​Method}

動作 告訴伺服器你要幹嘛(all methods)

  • 最常見的:get/post

  • GET:
    • ​請求server顯示資料
    • 參數(傳遞資訊的值)傳遞:<網址>?<參數名1>=<值1>&<參數名2>=<值2>......
      • ​​參數可以沒有+直接顯示在網址上

        • ​方便使用

        • 安全性低:只能讀取

        • 開網址也算是get

{​Method}

動作 告訴伺服器你要幹嘛(all methods)

  • 最常見的:get/post

  • POST:
    • ​將資料上傳到server 請求處理
    • 參數傳遞:包含在本文內

      • ​​相對安全

      • 經常用來上傳表單 檔案等等

{​Path}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

指在server端的路徑

路徑+get的parameter

如例: https://example.com/login?redirect=%2f

{​Potocol ver.}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

協議的版本(HTTP/3是udp)

{​Header}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

要告訴伺服器附加資訊

{​Body}

POST /login?redirect=%2f HTTP/1.1\r\n
Host: example.com\r\n
Referer: http://example.com/index\r\n
User-Agent: Mozilla/5.0 ......\r\n
Content-Length: 32\r\n
\r\n
username=melon&password=p455w0rd

get類型的method沒有

{​Response}

  • 跟request格式整體差不多

  • HTTP/l.1 302 Found
    Content—Length: 35\r\n
    Content—Type: text/html; charset=UTF—8\r\n
    Location: https://examp1e.com\r\n
    Server: Apache/2.4.41 (Ubuntu)\r\n
    \r\n
    Redirecting to <a href:“/”>/</a>....  

{​Response}

  • 跟request格式整體差不多

  • HTTP/l.1 302 Found
    Content—Length: 35\r\n
    Content—Type: text/html; charset=UTF—8\r\n
    Location: https://examp1e.com\r\n
    Server: Apache/2.4.41 (Ubuntu)\r\n
    \r\n
    Redirecting to <a href:“/”>/</a>....  

Status Code

  • 表達回覆的狀態

  • 1XX:資訊回應 「請求正在進行,修但幾累」
    • 100:「這菜可以點嗎?」「OK,可以繼續點」(同意繼續傳輸)
    • 101:「改用電話聊嗎?」 「好阿好阿」(同意更改協定)
    • 102:「好了沒?」 「修但幾累」(處理中)
  • 2XX:成功 (200:OK)
  • 3XX:重新導向(redirect)「轉移到其他地方」
    • ​301:「搬家了 去新的地址找找」(永久遷移)
    • 302:「在裝潢 去旅館找找」(暫時遷移:可能網站維護裝)

{​Status Code}

  • 表達回覆的狀態

  • 1XX:資訊回應 「請求正在進行,修但幾累」
    • 100:Continue
    • 101:Switching Protocols
    • 102:Processing
  • 2XX:成功 (200:OK)
  • 3XX:重新導向(redirect)「轉移到其他地方」
    • ​301:Moved Permanently
    • 302:Found

{​Status Code}

  • 表達回覆的狀態

  • 4XX:客戶端錯誤 「你的問題」
    • 400:「格式有問題、欺騙性路由
    • 403:「沒有權限」
    • 404:「找不到」💀
  • 5XX:伺服器錯誤
    • ​500:「壞了 但不知道壞在哪」(通用錯誤訊息)
    • 502:​「上游廠商壞了」(從上游伺服器接收到無效的回應)
    • 503:「廚房壞了/忙爆了」(當前無法處理請求)
    • 504:「廚房不回話」(伺服器回應超時)

{​Status Code}

  • 表達回覆的狀態

  • 4XX:客戶端錯誤 「你的問題」
    • 400:Bad Request
    • 403:Forbidden
    • 404:Not Found💀
  • 5XX:伺服器錯誤
    • ​500:Internal Server Error
    • 502:​Bad Gateway
    • 503:Service Unavailable
    • 504:Gateway Timeout

{​Status Code}

  • 表達回覆的狀態

  • 4XX:客戶端錯誤 「你的問題」
    • 400:Bad Request
    • 403:Forbidden
    • 404:Not Found💀
  • 5XX:伺服器錯誤
    • ​500:Internal Server Error
    • 502:​Bad Gateway
    • 503:Service Unavailable
    • 504:Gateway Timeout

{​Cookie}

  • 小餅乾 紀錄使用者資訊

  • 網域路徑綁定(只在指定網域範圍內有效)

{​Cookie}

  • 小餅乾的一些屬性

  • HttpOnly:
    • ​不能用Js獲得
  • ​Secure:
    • ​只在"Https"下會傳輸
  • Expires=<date>:
    • ​在<date>後失效
    • 沒設定:關閉網頁後失效
  • ​Max-Age=<seconds>:
    • 優先級彼Expire高

{​Session}

  • Cookie的問題:

    • Cookie可以被Client修改(安全問題)
    • Cookie太多=>影響傳輸效率

存一些在Server side

可辨認Cookie有沒有被修改過

{​Session}

沒有Session id

很久沒登入/沒登入過

{​Session}

創建+回傳Session id

很久沒登入/沒登入過

Session id

ID

{​Session}

Session id 包含在cookie中

很久沒登入/沒登入過

Session id

ID

Session id

{​Session}

很久沒登入/沒登入過

ID

       :  Session_id=ckefgisc

比較


{cookie,session_id}

{​Session}

很久沒登入/沒登入過

ID

       :  Session_id=ckefgisc

比較


{cookie,session_id}

正確

👍

{​Session}

很久沒登入/沒登入過

ID

       :  Session_id=ckefgisc

比較


{cookie,session_id}

正確

👍

錯誤

{Tools}

  • Developer Tools(開發者工具)

  • 開啟方式:
    • F12(什麼廢話)
    • shift + ctrl + I
    • 右鍵目標元素 + 檢查
      • 可以直接看到網頁元素的html

連結:V宅注意!!

{​F12}

  • 常用功能

  • elements:
    • 該網頁html
  • console:
    • 即時運算 直接打
      js就可以運行
  • Sources:
    • 檔案架構
  • Network
  • Application

{​F12}

  • 常用功能

  • Network
    • 怎麼啥都沒有?
    • 要開啟這個頁面
      才會開始紀錄
  • Application

{​F12}

  • 常用功能

  • Network

    • 怎麼啥都沒有?

    • 要開啟這個頁面
      才會開始紀錄

    • =>refres 

    • 乾貨

  • Application

{​F12}

  • 常用功能

  • Application

  • 記錄和管理網站需要的資源和數據

瀏覽器永久存儲

Session

資料庫

cookie

暫存

{​curl}

  • 透過 HTTP Protocol上傳/下載檔案的指令

  •  
curl 'https://example.com'
 -i/--include # 顯示 response header
 -v/--verbose # 詳細資料
 -d/--data 'key=value&a=b' # HTTP POST
 -X/--request 'PATCH' # Request method
 -H/--header 'Host: fb.com' # 設定 header
 -b/--cookie 'user=guest;' # 設定 cookie
 -o/--output 'output.html' # 下載(引號內為自訂檔名)
 -O # 不需要設定檔名的下載
 -C # 被打斷後繼續下載
 -L # 會跟著301 302跳轉
  • Web滲透測試工具

  • 有gui kali內建
  • Damn Vulnerable Web Application
    有缺陷的網頁應用

  • 測試/學習常見的漏洞

{漏洞介紹}

 

{​List}

  • Path traversal/LFI

  • XSS(cross site scripting)

  • SQL Injection

  • CLRF

  • CRSF

  • Command Injection

{​Path taversal}

  • 路徑:

    • ​絕對路徑不因當前所在資料夾改變而改變
      • 某台server下的html檔案:https://watermelon-1234.github.io/memorize_voc/index.html
      • 我電腦C槽的steam啟動檔案:C:\Program Files (x86)\Steam\steam.exe
    • 相對路徑:​以當前位置比較出來的路徑
      • .目前的目錄
      • /根目錄
      • ..上一層目錄
      • ./index.html 在同一層目錄的index.html = index.html
      • ../img/melon.png 在上層目錄中的img目錄的melon.png

{​Path taversal}

  • if有一個連結為:example.com/?file=index.html

    • 功能:顯示伺服器中的<file>檔案

How could i find other sceret file in this server?

{​Path taversal}

  • if有一個連結為:example.com/?file=index.html

    • 用相對路徑取得其他檔案

    • file=../../../etc/passwd

CRACKED!

{​Path taversal}

  • if有一個連結為:example.com/?file=index.html

    • 用相對路徑取得其他檔案

    • file=../../../etc/passwd
<?php
    $page = $_GET['page']; // index.php
    include("/var/www/html/" . $page);
?>
<?php
    $page = $_GET['page']; // ../../../../../../../etc/passwd
    include("/var/www/html/" . $page); /var/www/html/../../../../../../../etc/passwd
?>

{​Path taversal}

  • How to prevent?

    • ​主動檢查路徑
      • ​把輸入轉成絕對路徑 用startwith()類的方法檢查
      • 禁止危險符號
        • ​../ 上一層、/開頭 根目錄、:windows磁碟、% url編碼 等等
      • 建允許訪問的白名單 只有輸入在白名單才放行
      • 用寫好的函式庫(ex : Flask,Django)
    • 最小權限:降低網頁應用的權限 根本無法訪問機密檔案
    • 設定 Web Server 的安全配置:Njinx,Apache 等等

{​XSS}

  • 網站會動:

    • client端讓有害的js運行=>js權限高=>搞事囉

  • 讓其他使用者執行某些js code
  • 種類
    • Reflected XSS (反射式 XSS)
    • Stored XSS (儲存型 XSS)
    • DOM XSS (DOM跨站腳本攻擊)

{​XSS}

  • Reflectd XSS

  • 透過 URL 參數提供 XSS 攻擊:(ex:開啟不明連結)
    • 完整html 自己載來玩(你可以用curl) 架github會被擋(github自己有安全保護機制)
    • server直接用GET 傳來的參數嵌入前端
    • skill:用urlencode jscode等編碼混淆
<script>
  // 獲取 URL 中的 'message' 參數
  const urlParams = new URLSearchParams(window.location.search);
  const message = urlParams.get('message');

  // 直接將 message 插入到 DOM 中
  document.getElementById('message').innerHTML = message;
</script>

{​XSS}

  • Reflectd XSS

  • parameter(參數)設成:message=<script>alert(1);</script>
    • 載入message時便會執行alert(1);
    • 可以在"<script>" 和 "</script>"之間塞js程式碼

GET + XSS payload

{​XSS}

  • Reflectd XSS

  • parameter(參數)設成:message=<script>alert(1);</script>
    • 載入message時便會執行alert(1);
    • 可以在"<script>" 和 "</script>"之間塞js程式碼

GET + XSS payload

respond with XSS payload

{​XSS}

  • Stored XSS

  • 保存在伺服器資料庫中的 JavaScript 代碼
  • 網站本身提供的注入漏洞
    • 例如:在網站評論區塞XSS payload(payload:有效負載 類似之於data的matadata)
    • 每個開啟評論區的人都會執行你塞的payload

{​XSS}

  • DOM XSS

  • DOM:文件物件模型(想成某種物件)
  • 利用網頁動態顯示注入payload
    • 完全不經過server
// 把hash部分(不是 GET respond:不經過server) 插入頁面
var search = window.location.hash.substring(1);
document.getElementById("result").innerHTML = search;
XSS url:
http://example.com/#<script>alert('DOM XSS')</script>

{​XSS}

  • How to prevent

  • 預先處理輸入
    • 過濾可能是html/js內容的特殊符號 (ex:"<",">",""","'")
    • 直接轉換成html編碼(ex:"<" => "&lt;" ">" 變成 "&gt;"):顯示為文字 而非js碼
      • PHP : htmlspecialchars()
      • Java : StringEscapeUtils.escapeHtml()
      • js : element.textContent = str;
    • url編碼:同理
  • 內容安全策略(CSP):在header上面加入一些選項

{​XSS}

  • How to prevent

  • 用安全的插入方法
    • 直接插入成html顯然不是什麼安全的方法
    • 插入成物件的文字比較安全

{​XSS}

  • How to prevent

  • 用安全的插入方法
    • 直接插入成html顯然不是什麼安全的方法
    • 插入成物件的文字比較安全
// 危險喔
document.getElementById('message').innerHTML = userInput;

document.write(userInput);
// 安全喔
document.getElementById('message').textContent = userInput;
// 只有修改文字部分

{​SQL injection}

  • SQL語法有漏洞?

<?php
    $username = $_GET['username']; 
    $result = mysql_query("SELECT * FROM users WHERE username='$username'");
?>

{​SQL injection}

  • 正常人

 

 

 

  • H3cker

<?php
    $username = $_GET['username']; // melon
    $result = mysql_query("SELECT * FROM users WHERE username='melon'");
?>
<?php
    $username = $_GET['username']; // 輸入 '
    $result = mysql_query("SELECT * FROM users WHERE username='''");
?>

報錯囉

{​SQL injection}

  • H3cker

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>

多的單引號怎麼辦?

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>

多的單引號怎麼辦?

{​SQL injection}

  • H3cker

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>

多的單引號怎麼辦?

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>

多的單引號怎麼辦?

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1'");
?>

多的單引號怎麼辦?

<?php
    $username = $_GET['username']; // 輸入 ' OR 1=1" --
    $result = mysql_query("SELECT * FROM users WHERE username='' OR 1=1" -- '");
?>

SQL的註解:

單行 --

/* 包住 */

{​SQL injection}

  • 融會貫通:

    • 善用前述邏輯
    • 反推server端的完整SQL指令
    • 上網複製別人的範本爆搜看看

{​CRLF}

  • Carriage Return Line Feed

  • 前面說到HTTP協議裡面的 "\r\n" 回車 + 換行
  • 在HTTP協議裡面負責換行 + 分隔Header & Body
  • example:
HTTP/1.1 302 Found
Host :example.com\r\n
header內容....\r\n
\r\n
body內容....

{​CRLF}

  • Carriage Return Line Feed

  • 前面說到HTTP協議裡面的 "\r\n" 回車 + 換行
  • 在HTTP協議裡面負責換行 + 分隔Header & Body
  • 如果我如果我在Host裡面加入\r\n 呢?
HTTP/1.1 302 Found
Host :example.com\r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n \r\n <script>alert(1)</script> \r\n
header內容....\r\n
\r\n
body內容....

{​CRLF}

  • Carriage Return Line Feed

  • 瀏覽器看到的不是這樣

 

 

 

 

  • 它覺得後面的<script>
    是body的一部分
HTTP/1.1 302 Found
Host :example.com\r\n \r\n <script>alert(1)</script> \r\n
header內容....\r\n
\r\n
body內容....
HTTP/1.1 302 Found
Host :example.com\r\n 
\r\n 
<script>alert(1)</script> \r\n
header內容....\r\n
\r\n
原本body內容....

這不就是XSS🤨🤨

{​CRLF}

  • 如果Hacker能操縱Server Client傳輸的header

    • 302 Found=>redirect
      • reflected XSS url塞在"\r\n"後面
        • 幹走cookie & session
      • 把釣魚連結塞在"\r\n"後面
  • ​​預防方法

    • 對要redirect的內容urlEncode
    • 檢查respond header的內容 過濾掉多的"\r\n"

{​CSRF}

  • Cross Site Request Forgery(跨站偽請求)

  • 有餅乾的仙貝芝士之後(有點餓了)就很好理解了

{​CSRF}

  1. User訪問+login
    web A

  2. A網站生成並回傳cookie

  3. User跑去逛釣魚網站
    釣魚網站用剛剛的餅乾發Request給web A

  4. A辨識Cookie後覺得是
    User在操作 便准許了操作(例如:把錢全部轉走)

{​CSRF}

{CSRF​}

  • How to prevent

  • 增加驗證方式
    • 兩步驟驗證(驗證碼等等)
  • CSRF token:打開頁面時才隨機生成的token

{​Command Injection}

  • 有些function可以執行shell指令

    • 方便完成複雜的操作 ex: 系統管理、本機檔案操作
    • 工程師留下維修後門
  • EX :
    • php
    • python :
      • os.system()
      • ​subprocess.call()
      • os.popen()​​
  • ​​常發生於ping測試
    • ​IOT聯網

{​Command Injection}

import os

domain = user_input() # google.com

os.system('ping ' + domain)

控制符=>分號(;)

cmd1 ; cmd2
先執行cmd1 再執行cmd2

想想user_input該放啥

舉例:python

{題單}

 

  • webdecode:https://play.picoctf.org/practice/challenge/427
  • unminify:https://play.picoctf.org/practice/challenge/426
  • Inspect HTML:https://play.picoctf.org/practice/challenge/275
  • includes:https://play.picoctf.org/practice/challenge/274

  • Cookies:https://play.picoctf.org/practice/challenge/173

  • GET aHEAD:https://play.picoctf.org/practice/challenge/132

  • dont-use-client-side:https://play.picoctf.org/practice/challenge/66

  • logon:https://play.picoctf.org/practice/challenge/46

  • insp3ct0r:https://play.picoctf.org/practice/challenge/18
    ------------------------------------------------------------------------------

  • sql injection

    • Irish-Name-Repo 1:https://play.picoctf.org/practice/challenge/80

  • 某個有趣題目的writeup

  • ​command injection

    • https://play.picoctf.org/practice/challenge/202

https://ithelp.ithome.com.tw/articles/10334204
https://hackercat.org/burp-suite-tutorial/burp-suite-browser-and-proxy
https://feifei.tw/command-injection/
https://www.cc.ntu.edu.tw/chinese/epaper/0039/20161220_3905.html
https://tech-blog.cymetrics.io/posts/jo/zerobased-cross-site-request-forgery/
https://ithelp.ithome.com.tw/articles/10273442
https://blog.csdn.net/agonie201218/article/details/78591346
https://github.com/digininja/DVWA
https://medium.com/@clannad716/dvwa-low-level-5355a2d5ca9d
https://ithelp.ithome.com.tw/m/articles/10344977
https://www.injerry.com/blog_view/131
https://medium.com/ntu-data-analytics-club/sql-basic-%E5%9F%BA%E7%A4%8E%E5%85%A5%E9%96%80%E8%AA%9E%E6%B3%95%E8%88%87%E8%A7%80%E5%BF%B5-1e1f96dc9cc8
https://blog.toright.com/posts/1203/%E6%B7%BA%E8%AB%87-http-method%EF%BC%9A%E8%A1%A8%E5%96%AE%E4%B8%AD%E7%9A%84-get-%E8%88%87-post-%E6%9C%89%E4%BB%80%E9%BA%BC%E5%B7%AE%E5%88%A5%EF%BC%9F
https://hackmd.io/@Not/HttpMethodIntro
https://hackmd.io/@mike-liu/By32a6lyi
https://slides.com/demonaarwu/networking-101
https://zh.wikipedia.org/zh-tw/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
https://cloud.tencent.com/developer/ask/sof/101613
https://systemweakness.com/a-beginners-guide-to-defend-the-web-ctf-challenge-intro-1-6-aa8ca8113c9e
https://github.com/Ice1187/TW-Security-and-CTF-Resource?tab=readme-ov-file#web
https://ctf101.org/web-exploitation/
https://medium.com/@isaacwangethi30/beginners-guide-to-web-hacking-ctfs-9ef04e7c5df5
https://ithelp.ithome.com.tw/articles/10265741
https://blog.csdn.net/ningmengban/article/details/118738013
https://hackmd.io/@cmrdb/rklKT0JaK
https://blog.csdn.net/qq_41768447/article/details/104883738
https://blog.techbridge.cc/2019/02/01/linux-curl-command-tutorial/
https://medium.com/tsungs-blog/day14-session%E8%88%87cookie%E5%B7%AE%E5%88%A5-eb7b4035a382
https://medium.com/@danny_hu/what-is-the-difference-between-session-and-cookie-a377baf030b5
https://ithelp.ithome.com.tw/articles/10187212
https://hackmd.io/@foxo-tw/slides/%2Fp%2FHkdGf-naE
https://hackercat.org/ithelp/ithelp-2019-day10-burp-suite
https://ctfacademy.github.io/web/index.htm
https://ithelp.ithome.com.tw/m/articles/10241555
https://ithelp.ithome.com.tw/m/articles/10242682
https://ithelp.ithome.com.tw/articles/10227170
https://ithelp.ithome.com.tw/m/articles/10353840
https://medium.com/appworks-school/%E7%B6%B2%E9%A0%81%E6%96%B0%E6%89%8B%E5%85%A5%E9%96%80-%E5%88%9D%E6%8E%A2%E7%B6%B2%E9%A0%81%E6%9E%B6%E6%A7%8B%E5%92%8C%E5%89%8D%E5%BE%8C%E7%AB%AF%E8%AA%9E%E8%A8%80-a88a5dc86ee3
https://www.pintech.com.tw/article_page/81/node-js-vs-go-seo

Made with Slides.com