在sql-labs游戲中,經常使用
--+放在最后注釋多余部分,而mysql中的注釋符為#和--卻不能直接使用,以前沒學過mysql,一直不理解,也不知道+號的作用,今天有時間特地探索了一下,算是搞明白了其中的原因。
sql-labs闖關游戲資源及介紹見此:https://github.com/Audi-1/sqli-labs
第一關示例:
在源代碼中加入下面兩行,使網頁能回顯我們輸入的有效輸入和執行的mysql語句,方便分析:


第一關正常地址欄傳參如下:


猜列數時的使用payload:

屏幕顯示有效輸入為:

這里嘗試使用#號或者--
使用#號


發現執行的sql語句中沒有#號
原因是url中#號是用來指導瀏覽器動作的(例如錨點),對服務器端完全無用。所以,HTTP請求中不包括#
將#號改成url的編碼%23就可以了


使用--


使用--+


對比上面--的效果,這里發現+號在語句中變成了空格。用來和后面的單引號分隔開,將后面的語句注釋。
了解原理后便知道了--無法使用的原因,是因為--與后面的單引號連接在一起,無法形成有效的mysql語句。
在mysql中使用這個語句分析原因,輸入后回車顯示分號沒有閉合


所以在注入時我們除了使用--+外,也可以使用--'來完成sql注入語句

成功執行!

