SQL的部分到這裡正式告一段落了,在解的過程中有一些自己的小心得,小總結放在這裡
很多的SQL injection漏洞常常都是因為字串拼接導致的,由於有字串拼接,執行時會選擇 先拼接,再執行 的方式進行處理,從而導致災難發生
滲透者能夠使用在輸入字串前方加一個'的方式,使它和原指令前面的'組成一個空字串'' 從而有指令操作空間
滲透者能透過1=1恆正的方式來測試出輸入點是否能夠進行sql injection, 也有可能透過他來跳過查詢時的條件
滲透者能夠使用在結尾加註釋--的方式來避免自己打的指令發生語法錯誤,或是使用/**/來進行區塊註釋從而跳過某些輸入驗證
(昨天寫錯了,/**/是多行注釋或稱區塊注釋而不是單行,十分抱歉)
滲透者能在查詢中使用 ;來讓資料庫以為有兩個行代碼要進行
滲透者會在指令中插入UNION SELECT來延伸查詢資料庫中的不同表格
大多數時候使用者看到的頁面並不會顯示資料庫內部資訊,所以會靠預設顯示的正確與錯誤資訊當作判斷的布林值,也有時間盲注這種靠時間延遲差異以及ORDER BY盲注靠排序方式當作類布林值的兩種變體
利用Prepared Statement以及setString的方式,將指令先用佔位符?強制提前編譯,後面再用經過處理的資料進行代入,但對於防止ORDER BY注入則不太好用,因為有可能發生編譯錯誤
雖然用來防止一般的SQL injection收效甚微,因為滲透者總是能找到不同bypass黑名單的方法,但能用來防止ORDER BY注入
明天就是中秋節了,同時也是新的一周主題的開始,希望自己還能堅持下去