說明
注入漏洞作為登頂過web十大漏洞多次的漏洞,危害性不言而喻,其中sql注入就是注入漏洞常用的手段。其形成的原因是由于web在接收傳參數據時,對數據的過濾不夠嚴格,將其帶入到數據庫查詢中,導致用戶可以通過傳參一些sql語句來對數據庫進行查詢,修改等操作。傳參的sql語句通過拼接后執行。
這邊看了一個博客,結合他的辦法實際驗證一下拼接的方式,我們用sqli—labs來實驗,先修改一下第一關的源碼,顯示出執行的sql語句

我們輸入id=1看看執行的sql語句是什么

可以看到一個sql語句被執行了,嘗試一下id=2

可以看到爆出來了一個賬號密碼,可以繼續去嘗試id=3、4、5....會發現由不同的賬號密碼,現在我們嘗試單引號閉合

可以看到報錯了,去看sql語句可以看到1后面有一個單引號落空了,在sql語句中單雙引號都是要成對出現的,所以這邊報錯了,驗證一下我們傳參id=1''
沒有報錯,為了方便理解我們再加上一組對比,傳參id

那么現在可以清楚的知道了他的拼接情況。
最后是注釋和恒真假效果

?id=1' and 1=1--+
1=1恒真也可以寫成2=2或a=a等類似格式,其作用是確保注入后的 SQL 語句邏輯成立,從而驗證注入點或繞過某些防護規則,可測試注入是否成功(若頁面正常顯示,則存在注入漏洞)。也有1=2恒假條件,可以通過這個判斷是否有注入漏洞,但不能直接獲取數據,需要加上其他的回顯手段來獲取數據。
--+這是一種閉合手段,也有其他的閉合手段例如#等等可以用于其他的注入情境,這邊就不多說了,--+中--是注釋符號,+在url是空格的編碼被編譯成空格,確保注釋符號生效。添加注釋符號的目的是將后面自帶的語句注釋掉,確保我們傳參的語句語法格式正確。
整個sql語句SELECT * FROM users WHERE id='2' -- ' LIMIT 0,1如果沒有加注釋的話是從users表中選取id為2的記錄,不過只返回符合條件的第一條記錄,所以我們加上注釋符可以顯示users表中所有id為2的記錄,limit 0,1的作用是從行號0開始往下面搜索,只返還一條id=2的數據。
總之sql注入的目的是為了獲取一些數據或者修改數據庫的一些數據等等,是針對數據庫的一種攻擊手段,我們通過傳參sql語句確保它繞過驗證,執行成功。