數(shù)據(jù)庫(kù)之SQL注入原理以及過(guò)程的簡(jiǎn)單介紹
1、產(chǎn)生SQL注入原因
開(kāi)發(fā)代碼的時(shí)候沒(méi)有全面考慮到網(wǎng)絡(luò)安全性,特別是在用戶交互時(shí),沒(méi)有考慮到用戶提交的信息中可能破壞數(shù)據(jù)庫(kù),沒(méi)有對(duì)輸入的數(shù)據(jù)進(jìn)行合法的過(guò)濾。SQL 注入過(guò)程目的性是非常強(qiáng)的,其主要目標(biāo)是 Web 應(yīng)用的后臺(tái)數(shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)中獲取信息和授予較高的權(quán)限,它先破壞數(shù)據(jù)庫(kù),再對(duì)數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行破壞。
2、SQL注入原理
首先要了解web網(wǎng)站的架構(gòu):
Web 網(wǎng)站架構(gòu),總體結(jié)構(gòu)由 Web 服務(wù)器端、客戶終端和通信協(xié)議三大部分組成。
表示層是指用戶交互的界面。用戶在使用時(shí)在表示層輸入需求,然后這個(gè)信息就傳送給服務(wù)器,再傳輸給數(shù)據(jù)庫(kù),服務(wù)器將后臺(tái)反饋的結(jié)果返回給用戶。
邏輯層為表示層提供請(qǐng)求的應(yīng)答,為數(shù)據(jù)層提供參數(shù)需求
數(shù)據(jù)層主要是對(duì)用戶提交的涉及到數(shù)據(jù)查詢做出回應(yīng)
下面以一個(gè)ASP網(wǎng)站為例來(lái)說(shuō)明SQL注入攻擊原理。Web頁(yè)面接收用戶輸入的用戶名(username)和密碼(pwd),并動(dòng)態(tài)生成一個(gè)SQL語(yǔ)句,通過(guò)用戶名(usexname)和密碼(pwd)查詢數(shù)據(jù)庫(kù)中users表,如果該查詢?cè)L問(wèn)成功,將返回一個(gè)用戶記錄信息,且用戶登錄成功。
其中生成SQL語(yǔ)句如下:
sql="select*from users where name ="'&username&"' and pwd="'&userpwd&" "'
如果攻擊者在登錄頁(yè)面中輸入了下面這樣的數(shù)據(jù):
Username: 'or'1'='1 or'1'='2
Password: 000(任意)
那么,SQL查詢語(yǔ)句就變?yōu)?
select*from users where name ="or' 1'=' 1' or'1'='2' and pwd='00'
where后的語(yǔ)句為 name ="or'1'='1' or'1'='2' and pwd='0'
轉(zhuǎn)換成邏輯語(yǔ)句后,其形式為: 假or真or假and假,則最終結(jié)果為真
最終結(jié)果為真,那么SQL語(yǔ)句的查詢結(jié)果也變成真,
所以上面查詢語(yǔ)句將返回表中所有用戶記錄,攻擊者將以表中第1個(gè)用戶的身份登錄。
如果攻擊者在登錄頁(yè)面中指定了下面這樣的輸入數(shù)據(jù):
Username:';drop table users一
Password: 000(任意)
提交數(shù)據(jù)后,提示登錄失敗,但結(jié)果不僅如此,而是數(shù)據(jù)庫(kù)表users將被刪除,任何用戶都無(wú)法登錄。
3、SQL注入攻擊過(guò)程
過(guò)程:
①通過(guò)檢查Web頁(yè)而上存在的SQL注入漏洞,構(gòu)建特殊的SQL注入點(diǎn);
②其次通過(guò)這些特殊的注入點(diǎn)利用Web頁(yè)而動(dòng)態(tài)傳遞參數(shù)的功能,將SQL的語(yǔ)法組合動(dòng)態(tài)傳遞給數(shù)據(jù)庫(kù);
③然后根據(jù)數(shù)據(jù)庫(kù)的不同類(lèi)型,對(duì)數(shù)據(jù)庫(kù)采取不同的處理;
④最后執(zhí)行SQL語(yǔ)句,從而達(dá)到攻擊者想要的目的。
判斷注入點(diǎn)。
在含有傳遞參數(shù)的動(dòng)態(tài)網(wǎng)頁(yè)中,判斷是否存在注入漏洞。通常的判斷方法有參數(shù)傳遞的地方輸入?yún)ⅰ癮nd 1=1” ;“and 1=2”
結(jié)果:分別返回不同的頁(yè)面,說(shuō)明存在注入漏洞。
判斷數(shù)據(jù)庫(kù)類(lèi)型:
①通過(guò)函數(shù)來(lái)判斷數(shù)據(jù)庫(kù)類(lèi)型:內(nèi)置的函數(shù)的區(qū)別。
舉例,len和length使用and len('a')=1的時(shí)候,返回正常頁(yè)面時(shí),mssql,或mysql。反之則可能會(huì)是oracle和informix。
②--和# 這兩個(gè)注釋符號(hào)
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 擴(kuò)展存儲(chǔ)過(guò)程將命令字符串作為操作系統(tǒng)命令 執(zhí)行,并以文本行的形式返回所有輸出。由于xp_cmdshell 可以執(zhí)行任何操作系統(tǒng)命令,所以一旦SQL Server管理員帳號(hào)(如sa)被攻破,那么攻擊者就可以利用xp_cmdshell 在SQL Server中執(zhí)行操作系統(tǒng)命令,如:創(chuàng)建系統(tǒng)管理員。
到此這篇關(guān)于數(shù)據(jù)庫(kù)之SQL注入原理以及過(guò)程的簡(jiǎn)單介紹的文章就介紹到這了,更多相關(guān)SQL注入原理及過(guò)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談三種數(shù)據(jù)庫(kù)的?SQL?注入
- 一個(gè)簡(jiǎn)單的后臺(tái)與數(shù)據(jù)庫(kù)交互的登錄與注冊(cè)[sql注入處理、以及MD5加密]
- Mysql數(shù)據(jù)庫(kù)使用concat函數(shù)執(zhí)行SQL注入查詢
- sql注入數(shù)據(jù)庫(kù)修復(fù)的兩種實(shí)例方法
- 數(shù)據(jù)庫(kù)SqlParameter 的插入操作,防止sql注入的實(shí)現(xiàn)代碼
- SQL數(shù)據(jù)庫(kù)的高級(jí)sql注入的一些知識(shí)
- 數(shù)據(jù)庫(kù)中的內(nèi)容字段被掛馬的替換方法 SQL注入
- ASP+MSSQL2000 數(shù)據(jù)庫(kù)被批量注入后的解決方法
- sql注入數(shù)據(jù)庫(kù)原理詳情介紹
相關(guān)文章
談?wù)剶?shù)據(jù)庫(kù)的字段設(shè)計(jì)的幾個(gè)心得
今天小編就為大家分享一篇關(guān)于談?wù)剶?shù)據(jù)庫(kù)的字段設(shè)計(jì)的幾個(gè)心得,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)詳析
SQL注入的繞過(guò)技巧有很多,下面這篇文章主要給大家介紹了關(guān)于SQL注入技巧之顯注與盲注中過(guò)濾逗號(hào)繞過(guò)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08SQL中游標(biāo)(cursor)的基本使用實(shí)例
當(dāng)你檢索的數(shù)據(jù)只是一條記錄時(shí),你所編寫(xiě)的事務(wù)語(yǔ)句代碼往往使用SELECT INSERT語(yǔ)句,但如果從某一結(jié)果集中逐一地讀取一條記錄呢?游標(biāo)為我們提供了一種極為優(yōu)秀的解決方案,這篇文章主要給大家介紹了關(guān)于SQL中游標(biāo)(cursor)基本使用的相關(guān)資料,需要的朋友可以參考下2021-11-11OLEDB和ODBC的區(qū)別(優(yōu)缺點(diǎn))
ODBC是一種連接數(shù)據(jù)庫(kù)的開(kāi)放標(biāo)準(zhǔn),OLEDB(對(duì)象鏈接和嵌入數(shù)據(jù)庫(kù))位于ODBC層與應(yīng)用程序之間. 在你的ASP頁(yè)面里,ADO是位于OLEDB之上的應(yīng)用程序. 你的ADO調(diào)用先被送到OLEDB,然后再交由ODBC處理2012-09-09詳細(xì)聊聊sql中exists和not?exists用法
mysql exists或not exists語(yǔ)句用于子查詢,改語(yǔ)句只返回 TRUE 或 FALSE,下面這篇文章主要給大家介紹了關(guān)于sql中exists和not?exists用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-02-02在PostgreSQL中實(shí)現(xiàn)遞歸查詢的教程
這篇文章主要介紹了在PostgreSQL中實(shí)現(xiàn)遞歸查詢的教程,包括在遞歸查詢內(nèi)排序等方法的介紹,需要的朋友可以參考下2015-04-04windows環(huán)境下python連接openGauss數(shù)據(jù)庫(kù)的全過(guò)程
openGauss是一款全面友好開(kāi)放,攜手伙伴共同打造的企業(yè)級(jí)開(kāi)源關(guān)系型數(shù)據(jù)庫(kù),這篇文章主要給大家介紹了關(guān)于windows環(huán)境下python連接openGauss數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01