iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Security

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

Day12—實作測試:經典SQL Injection+Blind SQL injection

  • 分享至 

  • xImage
  •  

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


今日內容概要:

  1. 經典SQL注入(Error-Based、Union-Based)
  2. Blind-BasedSQL注入(Boolean-Based、Time-Based)
  • ZAP Active Scan掃描結果:成功
    https://ithelp.ithome.com.tw/upload/images/20250922/20169022S82PHETPaA.png

經典SQL injection

測試Error-based

  • 指以錯誤的SQL查詢獲得資料庫本身結構的資訊。

在欄位中輸入1'顯示空白錯誤頁面,表示有Error-based SQL注入。
https://ithelp.ithome.com.tw/upload/images/20250922/201690221oY17z3QmX.png

測試Union-Based

  • 指利用Union運算子(SQL Union Operator)將兩個或兩個以上的SQL查詢合併在一起,在單一欄位中進行資料庫資訊的查詢。

在欄位中輸入1' UNION SELECT user, password FROM users#,顯示資料庫中的username及密碼。
https://ithelp.ithome.com.tw/upload/images/20250922/20169022XHpDCy5pOe.png

Blind SQL injection

有些網站頁面不會在發生錯誤時,提供錯誤的詳細內容或其他資料庫資料,所以攻擊者無法直接從資料庫錯誤訊息,或網頁內容中看到查詢結果,因此攻擊者必須透過觀察網頁的回應,來推斷資料庫的資訊。它的原理為,攻擊者會注入一些「是/否」條件的SQL查詢,然後根據網頁的回應(例如頁面顯示正常、頁面顯示錯誤、載入時間變長等),來判斷條件是否成立。

測試Boolean-Based

  • 指攻擊者會注入一個布林(是/否)條件的SQL語句,利用觀察網頁顯示內容正常與否,或是有沒有出現更多內容的差異,一個字元一個字元地猜測資料庫的內容。

推測資料庫名稱長度:
輸入playload1' AND length(database()) > [長度數字] --,觀察網頁顯示內容正常與否,或是有沒有出現更多內容。

我依序從長度為10、5、2,進行測試,前面長度為10和5時,顯示錯誤訊息,測試長度為2時,出現了正確訊息。

(測試資料庫名稱長度為10)
https://ithelp.ithome.com.tw/upload/images/20250922/20169022YggtGQw32v.png
(測試資料庫名稱長度為5)
https://ithelp.ithome.com.tw/upload/images/20250922/20169022oxzXeM9pRu.png
(測試資料庫名稱長度為2)
https://ithelp.ithome.com.tw/upload/images/20250922/20169022gtTJ2MM8kA.png

接著又測試3和4, 發現長度為3時也是正確訊息,但 測試長度為4時,出現錯誤訊息,因此可知,資料庫名稱長度大於3,但不大於4,所以 推斷資料庫名稱長度為4

測試Time-Based

  • 指當Boolean-Based Blind注入無效時(例如頁面在任何情況下都顯示一樣的內容),攻擊者可以利用時間延遲來判斷。

驗證資料庫名稱長度
輸入playload1' AND IF(length(database()) = [長度數字], sleep(5), 0) -- ,觀察網頁延遲5秒與否,如果立刻載入,表示並非該數字長度,反之則表示資料庫名稱長度為該數字長度。

輸入1' AND IF(length(database()) = 4, sleep(5), 0) -- ,顯示延遲5秒, 表示資料庫名稱長度為4,推測成功
Yes

參考文章:

https://medium.com/@clannad716/dvwa-low-level-5355a2d5ca9d
https://www.neway.com.tw/article-detail/SQL-injection/
https://medium.com/@esosaokonedo1999/sql-injection-vulnerability-in-dvwa-da3d9e26db9f


上一篇
Day11—滲透測試實作:XSS 漏洞
下一篇
Day13—Fuzzer進階測試
系列文
資安小白—30天學習滲透測試with OWASP ZAP (Zed Attack Proxy)30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言