iT邦幫忙

2026 iThome 鐵人賽

DAY 11
0
Security

仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄系列 第 11 篇

[DAY11]仿生人是否會夢見網頁山羊?--SQL Injection章節小總結

  • 分享至 

  • xImage
  •  

SQL的部分到這裡正式告一段落了,在解的過程中有一些自己的小心得,小總結放在這裡

漏洞發生原因

很多的SQL injection漏洞常常都是因為字串拼接導致的,由於有字串拼接,執行時會選擇 先拼接,再執行 的方式進行處理,從而導致災難發生

常見滲透手法

引號閉合

滲透者能夠使用在輸入字串前方加一個'的方式,使它和原指令前面的'組成一個空字串'' 從而有指令操作空間

1=1恆正

滲透者能透過1=1恆正的方式來測試出輸入點是否能夠進行sql injection, 也有可能透過他來跳過查詢時的條件

註釋

滲透者能夠使用在結尾加註釋--的方式來避免自己打的指令發生語法錯誤,或是使用/**/來進行區塊註釋從而跳過某些輸入驗證
(昨天寫錯了,/**/是多行注釋或稱區塊注釋而不是單行,十分抱歉)

查詢串接(query chaining)

滲透者能在查詢中使用 ;來讓資料庫以為有兩個行代碼要進行

聯合查詢

滲透者會在指令中插入UNION SELECT來延伸查詢資料庫中的不同表格

布林盲注(Blind injection)

大多數時候使用者看到的頁面並不會顯示資料庫內部資訊,所以會靠預設顯示的正確與錯誤資訊當作判斷的布林值,也有時間盲注這種靠時間延遲差異以及ORDER BY盲注靠排序方式當作類布林值的兩種變體

常用防護方法

參數化查詢

利用Prepared Statement以及setString的方式,將指令先用佔位符?強制提前編譯,後面再用經過處理的資料進行代入,但對於防止ORDER BY注入則不太好用,因為有可能發生編譯錯誤

輸入驗證

雖然用來防止一般的SQL injection收效甚微,因為滲透者總是能找到不同bypass黑名單的方法,但能用來防止ORDER BY注入

這周中我學到了...

  1. SQL五大語言的使用方法(DQL,DML,DDL,DCL)
  2. SQL基本注入方法使用
  3. 如何使用UNION SELECT拿到其他表格的資訊
  4. 如何在沒有確切資訊的情況下進行盲注
  5. 參數化查詢是如何防止SQL注入的
  6. 為甚麼單純的輸入驗證無法很好防止SQL注入

明天就是中秋節了,同時也是新的一周主題的開始,希望自己還能堅持下去

明日內容:XSS開始!


上一篇
[DAY10]仿生人是否會夢見網頁山羊?--SQL injection防護
下一篇
[DAY12]仿生人是否會夢見網頁山羊?--XSS原理及Reflected XSS
系列文
仿生人是否會夢見網頁山羊? 資安小白的30天Webgoat闖關紀錄 共 18 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言