sql注入中關於--+的一點探索


在sql-labs游戲中,經常使用--+放在最后注釋多余部分,而mysql中的注釋符為#-- 卻不能直接使用,以前沒學過mysql,一直不理解,也不知道+號的作用,今天有時間特地探索了一下,算是搞明白了其中的原因。

sql-labs闖關游戲資源及介紹見此:https://github.com/Audi-1/sqli-labs


第一關示例:

在源代碼中加入下面兩行,使網頁能回顯我們輸入的有效輸入和執行的mysql語句,方便分析:

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

猜列數時的使用payload:
img
屏幕顯示有效輸入為:
img
這里嘗試使用#號或者--
使用#號
img
img
發現執行的sql語句中沒有#

原因是url中#號是用來指導瀏覽器動作的(例如錨點),對服務器端完全無用。所以,HTTP請求中不包括#

將#號改成url的編碼%23就可以了
img
img
使用--
img
img
使用--+
img
img

對比上面--的效果,這里發現號在語句中變成了空格。用來和后面的單引號分隔開,將后面的語句注釋。

了解原理后便知道了--無法使用的原因,是因為--與后面的單引號連接在一起,無法形成有效的mysql語句。

在mysql中使用這個語句分析原因,輸入后回車顯示分號沒有閉合
img
img

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

成功執行!
img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM