SQL注入式攻擊

2021-06-02 19:37:45 字數 1664 閱讀 9402

常見的sql注入式攻擊過程類如:

⑴ 某個asp.net web應用有乙個登入頁面,這個登入頁面控制著使用者是否有權訪問應用,它要求使用者輸入乙個名稱和密碼。

⑵ 登入頁面中輸入的內容將直接用來構造動態的sql命令,或者直接用作儲存過程的引數。下面是asp.net應用構造查詢的乙個例子:

system.text.stringbuilder query = new system.text.stringbuilder(

"select * from users where login = '")

⑶ 攻擊者在使用者名字和密碼輸入框中輸入*** ' or '1' = '1 之類的內容,例如a' or '1'='1。

⑷ 使用者輸入的內容提交給伺服器之後,伺服器執行上面的asp.net**構造出查詢使用者的sql命令,但由於攻擊者輸入的內容非常特殊,所以最後得到的sql命令變成:select * from users where login = ' ' or '1'='1' and password = ' ' or '1'='1'。

⑸ 伺服器執行查詢或儲存過程,將使用者輸入的身份資訊和伺服器中儲存的身份資訊進行對比。

⑹ 由於sql命令實際上已被注入式攻擊修改,已經不能真正驗證使用者身份,所以系統會錯誤地授權給攻擊者。

如果攻擊者知道應用會將表單中輸入的內容直接用於驗證身份的查詢,他就會嘗試輸入某些特殊的sql字串篡改查詢改變其原來的功能,欺騙系統授予訪問許可權。

所以,最好不要採用拼接sql語句方式進行查詢

解決方法

過濾掉所有的  單引號..  也就是把所有的單個的單引號  變成兩個單引號  因為sql中單引號是注釋用的.

過濾單引號是終級必殺技,不要相信儲存過程,那東西 仍然有漏洞,從它的實現過程可以看出,這東西仍然是漏洞..

還有那些所謂引數傳遞,其實現原理如果不是過濾單引號. 那麼仍然有漏洞... 各種語言的引數傳遞做的不一樣,你可以自己試一下,如果單引號確實被過濾掉了.. 那麼 可以防注入,否則,還是老老實實的手動過濾字串中的單引號吧..

原理就不用講了吧,sql 注入原理就是修改原字串結尾,讓資料庫理解錯誤

這裡舉個例子,

比如 最常用的使用者名稱密碼

selsect * form usertable where username='tom' and password='123456'

那麼 如果你只想跳過驗證 那麼 只要把那個 tom 換一下

也就是 selsect * form usertable where username='tom' or '1'='1' and password='123456'

這裡 就是把 原來的tom 換成 tom' or '1'='1 從而讓資料庫曲解了sql語句

如果你想幹的更狠 搞點破壞 比如刪光 資料庫 那麼 可以這麼寫

selsect * form usertable where username='tom' or '1'='1' and password='123456' del * from usertable where '1'='1'

這裡 就是把 原來的 密碼 123456 換成

123456' del * from usertable where '1'='1

其他的功能 你可自己再想想 怎麼搞,

總之 如果 單引號過濾了 那麼就會沒有任何問題

SQL注入式攻擊

1 為什麼會存在這種攻擊方式?大多數的b s系統或者c s系統,都會涉及到資料的儲存和互動,資料一般儲存在sql server mysql等資料庫中。因此,常見的資料互動中,往往需要根據使用者輸入的資訊進行資料庫查詢等操作 1 使用者登入,需要根據使用者填寫的使用者名稱和密碼查詢資料庫進行校驗。2 ...

防範SQL注入式攻擊

拷貝別人的 sql注入式攻擊是利用是指利用上的漏洞,在目標伺服器上執行 sql命令以及進行其他方式的攻擊 動態生成 sql命令時沒有對使用者輸入的資料進行驗證是 sql注入攻擊得逞的主要原因。比如 如果你的查詢語句是select fromadminwhereusername user andpass...

防範Sql注入式攻擊

sql注入式攻擊是指利用設計上的漏洞,在目標伺服器上執行sql 命令以及進行其他方式的攻擊 string name getuserinput bookname string script select table book where book name like name runsql scrip...