sql注入攻擊的原理
惡意用戶在提交查詢請求的過程中將SQL語句插入到請求內(nèi)容中,同時程序本身對用戶輸入內(nèi)容過分信任而未對惡意用戶插入的SQL語句進(jìn)行過濾,導(dǎo)致SQL語句直接被服務(wù)端執(zhí)行。
SQL注入攻擊分類
(1)注入點(diǎn)的不同分類
數(shù)字類型的注入字符串類型的注入
(2)提交方式的不同分類
GET注入POST注入COOKIE注入HTTP注入
(3)獲取信息的方式不同分類
基于布爾的盲注基于時間的盲注基于報(bào)錯的注入
SQL注入攻擊案例:
1、查看文章的注入案例:
查看某篇文章的url參數(shù)為:?id=1
則通過注入命令:?id=1 or 1=1,則可以列出整個數(shù)據(jù)表里面的所有文章。
如果查看用戶是通過user_id來訪問,如:?uid=1
則通過注入命令:?id=1 or 1=1, 則可以把整個用戶表的記錄全部顯示出來
SQL命令如下:
通過?id=1的SQL命令為:select * from article where id=1,此語句查詢到1條結(jié)構(gòu)
通過?id=1 and 1=1的SQL命令為:select * from article where id=1 or 1=1,此語句查詢到整個表的記錄
2、用戶登錄的注入案例:
登錄表單有user_name字段,查詢語句為:select * from users where nickname='{user_name}'
則可以在user_name文本框填入:(' or 1='1),這樣可以構(gòu)造出注入的SQL命令:select * from users where user_name='' or 1='1',這樣很容易就進(jìn)入系統(tǒng)了。
3、SQL注入猜表:
在登錄頁面的用戶名字段填入:(' or 1=(select count(0) from t_porg_document) or 1='1),可以構(gòu)造出注入的SQL命令:select * from users where user_name='' or 1=(select count(0) from recharge) or 1='1'
這樣就可以猜測是否recharge表存在.存在則語句正常執(zhí)行,否則就報(bào)錯了。
猜中表名后,就可以對數(shù)據(jù)表進(jìn)行增刪改查的操作,如:
在登錄頁面的用戶名字段填入:('; delete from users),可以構(gòu)造出危險的SQL命令:select * from users where user_name=''; delete from users;
通過加分號,可以構(gòu)造出任意增刪改查sql語句,整個數(shù)據(jù)庫就被攻擊者隨意控制了。






