2015-05-29 38 views
0

輸入將來自Web表單,並且我嘗試通過表單進行SQL注入。在密碼字段中,我試圖只用一個單引號來查看後端調用什麼類型的錯誤。我手動在後端運行此相同的查詢 -爲什麼這個MySQL查詢溢出到下一行

mysql> UPDATE users SET password = ''' WHERE username='admin'; 

據我所知,有在單引號不匹配,但我只是想看到查詢行爲在後端。

但是查詢不會立即運行。它溢出到下一行,好像它正在等待更多的輸入。

mysql> UPDATE users SET password = ''' WHERE username='admin'; '> '; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin'; '' at line 1

爲什麼會溢出到第二行?爲什麼不能只是說一些接近「語法錯誤附近密碼」

+1

它正在等待更多輸入。你總共有5個單引號 - 所以mysql認爲你在字符串中間。如果您從非交互式客戶端執行此查詢,您_將獲得語法錯誤 –

+0

如上所述,控制檯認爲該字符串尚未關閉,客戶端也沒有以分號結束語句。 – Lucas

+0

@ pala_如果您希望將其更改爲答案,我會接受此答案。 – user1720897

回答

1

MySQL允許寫literal ' within a string literal quoted with '連續兩次''

有幾種方法可以在字符串中包含引號字符:

  • A ''」加引號的字符串內‘’可以寫成‘''’。

[...]

所以''開幕'被解釋爲一個單一的文字'之後。

0

嘗試增加一個轉義字符爲:\'

mysql> UPDATE users SET password = '\'' WHERE username='admin'; 
+0

這種失敗的嘗試'sql注入'的目的, –