大家好!我目前正在就讀資訊類科系,平常以接觸程式撰寫居多,對於資安領域的技術沒有太多了解因此希望藉由這30天的機會,以OWASP ZAP作為主要工具,從實際操作和分析,從環境架設、基本掃描到進階弱點發掘,一步步建立資安思維。
我將學習如何利用ZAP自動化及主動/被動掃描常見的資安漏洞,並理解其背後的原理,以及該如何修復,例如SQL Injection、XSS等,讓我從「資安小白」進化成具備基本滲透測試技能的「資安入門者」。
在欄位中輸入1'
, 顯示空白錯誤頁面,表示有Error-based SQL注入。
在欄位中輸入1' UNION SELECT user, password FROM users#
,顯示資料庫中的username及密碼。
有些網站頁面不會在發生錯誤時,提供錯誤的詳細內容或其他資料庫資料,所以攻擊者無法直接從資料庫錯誤訊息,或網頁內容中看到查詢結果,因此攻擊者必須透過觀察網頁的回應,來推斷資料庫的資訊。它的原理為,攻擊者會注入一些「是/否」條件的SQL查詢,然後根據網頁的回應(例如頁面顯示正常、頁面顯示錯誤、載入時間變長等),來判斷條件是否成立。
推測資料庫名稱長度:
輸入playload1' AND length(database()) > [長度數字] --
,觀察網頁顯示內容正常與否,或是有沒有出現更多內容。
我依序從長度為10、5、2,進行測試,前面長度為10和5時,顯示錯誤訊息,測試長度為2時,出現了正確訊息。
(測試資料庫名稱長度為10)
(測試資料庫名稱長度為5)
(測試資料庫名稱長度為2)
接著又測試3和4, 發現長度為3時也是正確訊息,但 測試長度為4時,出現錯誤訊息,因此可知,資料庫名稱長度大於3,但不大於4,所以 推斷資料庫名稱長度為4。
驗證資料庫名稱長度
輸入playload1' AND IF(length(database()) = [長度數字], sleep(5), 0) --
,觀察網頁延遲5秒與否,如果立刻載入,表示並非該數字長度,反之則表示資料庫名稱長度為該數字長度。
輸入1' AND IF(length(database()) = 4, sleep(5), 0) --
,顯示延遲5秒, 表示資料庫名稱長度為4,推測成功。
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