在sql-labs游戲中,經常使用
--+
放在最后注釋多余部分,而mysql中的注釋符為#
和--
卻不能直接使用,以前沒學過mysql,一直不理解,也不知道+
號的作用,今天有時間特地探索了一下,算是搞明白了其中的原因。
sql-labs闖關游戲資源及介紹見此:https://github.com/Audi-1/sqli-labs
第一關示例:
在源代碼中加入下面兩行,使網頁能回顯我們輸入的有效輸入和執行的mysql語句,方便分析:
第一關正常地址欄傳參如下:
猜列數時的使用payload:
屏幕顯示有效輸入為:
這里嘗試使用#號或者--
使用#號
發現執行的sql語句中沒有#
號
原因是url中#號是用來指導瀏覽器動作的(例如錨點),對服務器端完全無用。所以,HTTP請求中不包括#
將#號改成url的編碼%23
就可以了
使用--
使用--+
對比上面--的效果,這里發現+
號在語句中變成了空格。用來和后面的單引號分隔開,將后面的語句注釋。
了解原理后便知道了--
無法使用的原因,是因為--
與后面的單引號連接在一起,無法形成有效的mysql語句。
在mysql中使用這個語句分析原因,輸入后回車顯示分號沒有閉合
所以在注入時我們除了使用--+
外,也可以使用--'
來完成sql注入語句
成功執行!