sql注入原理2

我們先嚐試隨意輸入用戶名 123 和密碼 123 登錄:

此處輸入圖片的描述

從錯誤頁面中我們無法獲取到任何信息。

看看後臺代碼如何做驗證的:

此處輸入圖片的描述

實際執行的操作時:

select * from users where username='123' and password='123'

當查詢到數據表中存在同時滿足 username 和 password 字段時,會返回登錄成功。

按照第一個實驗的思路,我們嘗試在用戶名中輸入 123' or 1=1 #, 密碼同樣輸入 123' or 1=1 #

此處輸入圖片的描述

此處輸入圖片的描述

爲什麼能夠成功登陸呢?因爲實際執行的語句是:

select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

按照 Mysql 語法,# 後面的內容會被忽略,所以以上語句等同於(實際上密碼框裏不輸入任何東西也一樣):

select * from users where username='123' or 1=1

由於判斷語句 or 1=1 恆成立,所以結果當然返回真,成功登錄。

我們再嘗試不使用 # 屏蔽單引號,採用手動閉合的方式:

我們嘗試在用戶名中輸入 123' or '1'='1, 密碼同樣輸入 123' or '1'='1 (不能少了單引號,否則會有語法錯誤):

此處輸入圖片的描述

此處輸入圖片的描述

實際執行的 Sql 語句是:

select * from users where username='123' or '1'='1' and password='123' or '1'='1`

看到了嗎?兩個 or 語句使 and 前後兩個判斷永遠恆等於真,所以能夠成功登錄。

還有很多其他 Mysql 語句可以巧妙的繞過驗證,同學們可以發散自己的思維進行嘗試。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章