iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
Security

資安小白—30天學習滲透測試with OWASP ZAP (Zed Attack Proxy)系列 第 1

Day01—認識OWASP ZAP(Zed Attack Proxy) &網站安全常見漏洞Part1

  • 分享至 

  • xImage
  •  

  大家好!我目前正在就讀資訊類科系,平常以接觸程式撰寫居多,對於資安領域的技術沒有太多了解/images/emoticon/emoticon16.gif因此希望藉由這30天的機會,以OWASP ZAP作為主要工具,從實際操作和分析,從環境架設、基本掃描到進階弱點發掘,一步步建立資安思維。
  我將學習如何利用ZAP自動化掃描常見的資安漏洞,並理解其背後的原理,例如SQL Injection、XSS等,讓我從「資安小白」進化成具備基本滲透測試技能的「資安入門者」。


今日內容概要:

  1. 何謂「滲透測試」?
  2. 什麼是OWASP ZAP?
  3. 介紹常見網站漏洞 Part1

一、何謂「滲透測試」?

滲透測試(Penetration Testing),是指藉由模擬攻擊,來找出系統、應用程式、設備或網站等等的安全漏洞並進行修復、修補,使能夠在受到真正的攻擊之前,提早發現安全漏洞並加以改善,以提升整體資訊安全,檢測範圍包含軟、硬體。而「弱點掃描」與其不同的,是使用「自動化掃描工具(軟體)」在短時間內,找到漏洞或弱點,且檢測範圍僅限作業系統及軟體系統(網站程式),我個人認為更像是人們的全身健康檢查,找出身體內尚未發現的病灶,防範未然。

補充:弱點掃描 V.S 滲透測試—表格

https://ithelp.ithome.com.tw/upload/images/20250813/20169022mH66Lp46vJ.png

滲透測試的常見工具

二、什麼是OWASP ZAP?

  OWASP ZAP,全名為Zed Attack Proxy,是於2010年9月由Open Web Application Security Project(OWASP)所開發的開源安全測試工具,而OWASP是一個非營利組織,致力於改善軟體應用的安全性,提供各種工具、指南與資源。2023年8月起,負責開發與維護ZAP的團隊宣布OWASP ZAP脫離OWASP基金會,並加入軟體安全專案(The SOFTWARE SECURITY PROJECT, SSP)。

  它主要用來協助開發者和安全測試人員在開發和測試階段,自動找出網頁應用程式中的安全漏洞,例如SQL injection、跨站腳本(XSS) 等。ZAP透過充當瀏覽器和伺服器之間的代理(Man-in-the-Middle Proxy),來截取和分析HTTP/HTTPS流量,從而發現潛在的安全問題。以具有免費、開源(開放原始程式碼)、跨平台(可在多種作業系統上運行)等特性為代表性,主要應用於Web應用的安全測試滲透測試主動/被動掃描(弱點掃描)支援API測試等方面。

三、介紹常見網站漏洞 Part1

1. SQL injection(SQL注入)
指透過修改SQL語句,欺騙資料庫伺服器執行非預期的指令,來對資料庫進行攻擊。
舉例:
以一個網站的登入功能為例,後端會將用戶輸入的帳號密碼組合成一條SQL指令,去資料庫查詢是否有符合的使用者:

SELECT * FROM users WHERE username = '你的帳號' AND password = '你的密碼';

如果攻擊者在「帳號」欄位輸入 ' OR '1'='1,那麼原本的查詢指令就會變成:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '你的密碼';

而因為'1'='1'這個條件永遠成立,資料庫就會被欺騙,即使沒有輸入正確的密碼,也可能成功登入,使驗證機制形同虛設。

可能造成的危害: 資料丟失、資料外洩、資料竄改、影響網站運作等。
防禦方式:

  • (公認最佳)使用參數化查詢(Prepared Statement): 將SQL指令與用戶輸入的資料(參數)分開處理,資料庫會將用戶輸入的內容,一律視為純文字,而不是指令的一部分,從根本上杜絕了SQL注入的可能性。
  • 過濾、轉義特殊符號: 利用正規表達式,將用戶輸入的資料進行過濾或轉義,例如用戶輸入的內容中包含單引號('),在其前面加上反斜線(),讓資料庫資料庫就會將其視為一個單純的單引號文字,而不是字串的結尾。但不同的資料庫系統可能有不同的特殊字元,需要開發者手動更新和維護轉義規則,如果沒有涵蓋所有可能的特殊字元,仍可能產生安全漏洞。
  • 明確定義使用者權限: 指在一開始資料庫架構建立時,在允許的權限中,對於使用者,盡量不賦予其資料庫物件建立、刪除等相關權限,將系統管理員及使用者的權限明確區分,從根本上限制使用者的操作。

2. Cross-site scripting(XSS跨站指令攻擊)
為一種從用戶端插入惡意程式碼(亦或是攻擊腳本)的攻擊方式,指將惡意程式碼附加到合法網站上,當用戶載入網站時,程式碼就會執行以達到某項目的,最常見的附加方式為新增至連結的尾部,或是直接發布到用戶所產生內容的頁面上。
跨域(cross-site),指的是這種攻擊方式,通常是從可信的來源發出,因此能夠繞過同源政策(same origin policy)。
同源政策(Same-Origin Policy,SOP) 是一種瀏覽器的安全機制,就是同一個網站(同源)的網頁腳本(如JavaScript)才能訪問同源的資源(如網頁、圖片等),不同網站(跨源)的網頁腳本則會被限制訪問,以防止惡意網站竊取敏感數據。 同源是指兩個網頁具有相同的協議(protocol,例如http或https)、域名(domain)和端口(port)。

依照惡意程式碼的存放方式及插入方式,XSS攻擊分為三種:
1. (最常見)反射型XSS(Reflected XSS): 攻擊者將惡意程式碼藏在URL中,並誘騙受害者點擊這個惡意連結。當受害者的瀏覽器請求這個網址時,伺服器會將URL中的惡意程式碼「反射」回頁面,並在受害者瀏覽器上執行。這種攻擊屬於「非持久性」的,只在點擊連結時發生一次。
2. 儲存型XSS(Stored XSS): 攻擊者將惡意程式碼存入網站的資料庫中,例如在留言板、論壇、文章內容中,當其他使用者瀏覽到這則惡意內容時,惡意程式碼就會從資料庫中被讀取出來,並在他們的瀏覽器上執行。這種攻擊是「持久性」的,危害最大。
3. DOM型XSS(DOM-based XSS): 這種攻擊與伺服器無關,而是利用瀏覽器端(Client-side)的JavaScript漏洞,當JavaScript程式碼處理來自URL或其他使用者輸入的資料時,沒有正確處理,導致惡意程式碼在瀏覽器的DOM (Document Object Model) 結構中被執行。

舉例: 
以一個具留言板功能的網站為例,如果網站沒有過濾使用者留言中的HTML或JavaScript標籤,攻擊者就可以在留言中寫下惡意的程式碼:

這是一個正常的留言 <script>alert('你被XSS攻擊了!');</script>

當其他使用者瀏覽這則留言時,瀏覽器會將 ... 標籤內的程式碼當作網站的一部分來執行,而不是單純的文字。這時,受害者就會看到一個彈跳視窗,顯示「你被XSS攻擊了!」。

可能造成的危害: 個資外洩、帳號劫持、釣魚攻擊(竊取帳密)、散波惡意軟體及網站等。
防禦方式:

  • 檢查用戶輸入: 適用於防範Stored及Reflected類型,由後端進行防範,任何允許用戶輸入的內容都要檢查,刪除相關的關鍵字,像是 、onerror等指令。
  • 限制網域來源: 透過CSP(content security policy)來設定有哪些網域 (domains) 來的腳本該被瀏覽器認為是該被執行的,然後瀏覽器只執行那些該被執行的腳本。
  • 腳本標籤換成字串: 適用於防範DOM-Based類型,由前端進行防範,在任何的輸入欄位,例如留言欄位、檔案上傳欄位、表單的欄位等,設有跳脫的機制,將被輸入的腳本標籤被轉換成字符串,例如換成<&lt></&lt>,系統便不會當成HTML標籤讀取。

下一篇
Day02—搭建OWASP ZAP與DVWA靶場
系列文
資安小白—30天學習滲透測試with OWASP ZAP (Zed Attack Proxy)20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言