數(shù)據(jù)庫之SQL注入原理以及過程的簡單介紹
1、產(chǎn)生SQL注入原因
開發(fā)代碼的時候沒有全面考慮到網(wǎng)絡安全性,特別是在用戶交互時,沒有考慮到用戶提交的信息中可能破壞數(shù)據(jù)庫,沒有對輸入的數(shù)據(jù)進行合法的過濾。SQL 注入過程目的性是非常強的,其主要目標是 Web 應用的后臺數(shù)據(jù)庫,從數(shù)據(jù)庫中獲取信息和授予較高的權(quán)限,它先破壞數(shù)據(jù)庫,再對數(shù)據(jù)庫服務器進行破壞。
2、SQL注入原理
首先要了解web網(wǎng)站的架構(gòu):
Web 網(wǎng)站架構(gòu),總體結(jié)構(gòu)由 Web 服務器端、客戶終端和通信協(xié)議三大部分組成。

表示層是指用戶交互的界面。用戶在使用時在表示層輸入需求,然后這個信息就傳送給服務器,再傳輸給數(shù)據(jù)庫,服務器將后臺反饋的結(jié)果返回給用戶。
邏輯層為表示層提供請求的應答,為數(shù)據(jù)層提供參數(shù)需求
數(shù)據(jù)層主要是對用戶提交的涉及到數(shù)據(jù)查詢做出回應
下面以一個ASP網(wǎng)站為例來說明SQL注入攻擊原理。Web頁面接收用戶輸入的用戶名(username)和密碼(pwd),并動態(tài)生成一個SQL語句,通過用戶名(usexname)和密碼(pwd)查詢數(shù)據(jù)庫中users表,如果該查詢訪問成功,將返回一個用戶記錄信息,且用戶登錄成功。
其中生成SQL語句如下:
sql="select*from users where name ="'&username&"' and pwd="'&userpwd&" "'
如果攻擊者在登錄頁面中輸入了下面這樣的數(shù)據(jù):
Username: 'or'1'='1 or'1'='2
Password: 000(任意)
那么,SQL查詢語句就變?yōu)?
select*from users where name ="or' 1'=' 1' or'1'='2' and pwd='00'
where后的語句為 name ="or'1'='1' or'1'='2' and pwd='0'
轉(zhuǎn)換成邏輯語句后,其形式為: 假or真or假and假,則最終結(jié)果為真
最終結(jié)果為真,那么SQL語句的查詢結(jié)果也變成真,
所以上面查詢語句將返回表中所有用戶記錄,攻擊者將以表中第1個用戶的身份登錄。
如果攻擊者在登錄頁面中指定了下面這樣的輸入數(shù)據(jù):
Username:';drop table users一
Password: 000(任意)
提交數(shù)據(jù)后,提示登錄失敗,但結(jié)果不僅如此,而是數(shù)據(jù)庫表users將被刪除,任何用戶都無法登錄。
3、SQL注入攻擊過程

過程:
①通過檢查Web頁而上存在的SQL注入漏洞,構(gòu)建特殊的SQL注入點;
②其次通過這些特殊的注入點利用Web頁而動態(tài)傳遞參數(shù)的功能,將SQL的語法組合動態(tài)傳遞給數(shù)據(jù)庫;
③然后根據(jù)數(shù)據(jù)庫的不同類型,對數(shù)據(jù)庫采取不同的處理;
④最后執(zhí)行SQL語句,從而達到攻擊者想要的目的。
判斷注入點。
在含有傳遞參數(shù)的動態(tài)網(wǎng)頁中,判斷是否存在注入漏洞。通常的判斷方法有參數(shù)傳遞的地方輸入?yún)ⅰ癮nd 1=1” ;“and 1=2”
結(jié)果:分別返回不同的頁面,說明存在注入漏洞。
判斷數(shù)據(jù)庫類型:
①通過函數(shù)來判斷數(shù)據(jù)庫類型:內(nèi)置的函數(shù)的區(qū)別。
舉例,len和length使用and len('a')=1的時候,返回正常頁面時,mssql,或mysql。反之則可能會是oracle和informix。
②--和# 這兩個注釋符號
MSSQSL是--,而MYSQL是#,ACCESS不支持注釋
HTTP://xxx.xxx.xxx/abc.asp?p=YY--
HTTP://xxx.xxx.xxx/abc.asp?p=YY#
SQL Server SA用戶權(quán)限
xp_cmdshell 擴展存儲過程將命令字符串作為操作系統(tǒng)命令 執(zhí)行,并以文本行的形式返回所有輸出。由于xp_cmdshell 可以執(zhí)行任何操作系統(tǒng)命令,所以一旦SQL Server管理員帳號(如sa)被攻破,那么攻擊者就可以利用xp_cmdshell 在SQL Server中執(zhí)行操作系統(tǒng)命令,如:創(chuàng)建系統(tǒng)管理員。
到此這篇關(guān)于數(shù)據(jù)庫之SQL注入原理以及過程的簡單介紹的文章就介紹到這了,更多相關(guān)SQL注入原理及過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談三種數(shù)據(jù)庫的?SQL?注入
- 一個簡單的后臺與數(shù)據(jù)庫交互的登錄與注冊[sql注入處理、以及MD5加密]
- Mysql數(shù)據(jù)庫使用concat函數(shù)執(zhí)行SQL注入查詢
- sql注入數(shù)據(jù)庫修復的兩種實例方法
- 數(shù)據(jù)庫SqlParameter 的插入操作,防止sql注入的實現(xiàn)代碼
- SQL數(shù)據(jù)庫的高級sql注入的一些知識
- 數(shù)據(jù)庫中的內(nèi)容字段被掛馬的替換方法 SQL注入
- ASP+MSSQL2000 數(shù)據(jù)庫被批量注入后的解決方法
- sql注入數(shù)據(jù)庫原理詳情介紹
相關(guān)文章
pentaho工具將數(shù)據(jù)庫數(shù)據(jù)導入導出為Excel圖文步驟
本篇博客講述的是如何使用pentaho工具快速的將數(shù)據(jù)庫數(shù)據(jù)導出為Excel文件,以及如何將Excel文件數(shù)據(jù)導入數(shù)據(jù)庫,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪2022-03-03
DM達夢數(shù)據(jù)日期時間函數(shù)、系統(tǒng)函數(shù)用法整理大全
DM(達夢數(shù)據(jù)庫管理系統(tǒng))是一款國產(chǎn)的高性能數(shù)據(jù)庫管理系統(tǒng),廣泛應用于政府、金融、電信等多個行業(yè),下面這篇文章主要介紹了DM達夢數(shù)據(jù)日期時間函數(shù)、系統(tǒng)函數(shù)用法整理的相關(guān)資料,需要的朋友可以參考下2025-04-04
DBeaver操作數(shù)據(jù)表的拷貝的實現(xiàn)
這篇文章主要介紹了DBeaver操作數(shù)據(jù)表的拷貝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
sql語句創(chuàng)建外鍵關(guān)聯(lián)的完整實例
這篇文章主要給大家介紹了關(guān)于sql語句創(chuàng)建外鍵關(guān)聯(lián)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03
Navicat運行SQL文件時觸發(fā)“1067?-?Invalid?default?value?for?‘ti
在使用Navicat進行SQL文件操作時,對于MySQL?5.7及以上版本,可能會觸發(fā)“1067?-?Invalid?default?value?for?‘time’”錯誤,本文將詳細說明此問題的成因,并通過實例分析提供完整的解決方案,包括相關(guān)指令的含義和作用,需要的朋友可以參考下2024-12-12
關(guān)系型數(shù)據(jù)庫的設計規(guī)則詳解
大家好,本篇文章主要講的是關(guān)系型數(shù)據(jù)庫的設計規(guī)則詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12

