SQL 注入原理

2022-07-10 18:21:08 字數 924 閱讀 5487

sql 注入的原因是應用程式對使用者輸入的資料沒有進行合法判斷,並且直接將資料傳給資料庫進行查詢。

流程如下:

如果應用程式會直接返回查詢的結果,那麼我們將可以使用基於查詢的注入方法。

聯合查詢法:

應用程式不返回查詢結果,反而返回 sql 資料庫的報錯資訊。其流程如下:

應用程式不會返回查詢結果,而是會返回乙個狀態。比如:

其中前兩個只有兩種狀態的資訊被稱為布林值。流程如下:

應用程式僅返回一種狀態,意為當前查詢結束。但是沒有返回任何資料或者其他狀態。流程如下:

可以看出,時間注入與布林注入本質相同。只是前者返回的是 「無延遲,查詢結束」與「延遲 5 秒,查詢結束」這兩種特殊的狀態。

之前的注入都是一次輸入,一次輸出式的。而二次注入,則是兩次輸入,兩次輸出。

用乙個 web 應用程式舉例,假設它的業務邏輯為:

從業務看出,第二查詢的過程中,應用程式在拼接資料 p 時沒有對 p 進行轉義。這意味著我們可以在第一次查詢時,將注入語句 p 儲存進資料庫,在第二次查詢執行含有 p 的語句。來成功注入。

兩個減號之後是有乙個空格的。如果這資料通過 url 傳輸的話。需要將空格等價替換成+再傳輸。 ↩︎

可以觀察到資料 p 在 q 末尾的 where 中,這不是必然,而是常見情況。特殊狀態下,p 可能在 select、group by 等之中。 ↩︎

updatexml 函式需要三個引數,因此concat(1,database())前後的 1 只是佔位置的引數。 ↩︎

如果這裡select @@version不加括號,將會被length認為是變數名。引發語法錯誤。 ↩︎

資料庫在儲存資料時,會自動去掉資料中的轉義符號。 ↩︎

這裡的結果 p 就是第一次訪問時儲存的資料 p。 ↩︎

sql注入原理

所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。簡單例項 一張使用者表user,一般需要通過user id運算元據庫,例如 我們想要查詢 user id 1 的使用者資訊 通常我們可以寫sql語句 select fr...

SQL注入原理

概述 sql注入 應用程式在向後台資料庫傳遞sql structured query language 結構化查詢語言 查詢時,如果攻擊者提供了影響該查詢的能力,就會引發sql注入。sql注入不只是一種會影響web應用的漏洞,對於任何從不可信源獲取輸入的 來說,如果使用輸入來構造動態sql語句,就有...

sql注入原理 java

string sql select from judy88 where pname username and password password 如果是加號必須用 號 進行括起來。解決注入問題。分為3個方法 1過濾使用者輸入的資料中是否包含非法字元 2分步校驗,先使用使用者名稱查詢如果有次使用者名稱...