### 1、原理
在owasp發(fā)布的top 10漏洞里面,,注入漏洞一直是危害排名第一,,其中數(shù)據(jù)庫(kù)注入漏洞是危害最大也是最受關(guān)注的漏洞,。
當(dāng)攻擊者發(fā)送的sql語(yǔ)句被sql解釋器執(zhí)行,,通過(guò)執(zhí)行這些惡意語(yǔ)句欺騙數(shù)據(jù)庫(kù)執(zhí)行,導(dǎo)致數(shù)據(jù)庫(kù)信息泄露,。
### 2,、分類(lèi)
1、常見(jiàn)的sql注入按照參數(shù)類(lèi)型可分為兩種:數(shù)字型和字符型,。
當(dāng)發(fā)生注入點(diǎn)的參數(shù)為整數(shù)時(shí),,比如 ID,num,,page等,,這種形式的就屬于數(shù)字型注入漏洞。同樣,,當(dāng)注入點(diǎn)是字符串時(shí),,則稱(chēng)為字符型注入,字符型注入需要引號(hào)來(lái)閉合,。
2,、也可以根據(jù)數(shù)據(jù)庫(kù)返回的結(jié)果,分為回顯注入,、報(bào)錯(cuò)注入,、盲注。
回顯注入:可以直接在存在注入點(diǎn)的當(dāng)前頁(yè)面中獲取返回結(jié)果,。
報(bào)錯(cuò)注入:程序?qū)?shù)據(jù)庫(kù)的返回錯(cuò)誤信息直接顯示在頁(yè)面中,,雖然沒(méi)有返回?cái)?shù)據(jù)庫(kù)的查詢(xún)結(jié)果,但是可以構(gòu)造一些報(bào)錯(cuò)語(yǔ)句從錯(cuò)誤信息中獲取想要的結(jié)果,。
盲注:程序后端屏蔽了數(shù)據(jù)庫(kù)的錯(cuò)誤信息,,沒(méi)有直接顯示結(jié)果也沒(méi)有報(bào)錯(cuò)信息,只能通過(guò)數(shù)據(jù)庫(kù)的邏輯和延時(shí)函數(shù)來(lái)判斷注入的結(jié)果。根據(jù)表現(xiàn)形式的不同,,盲注又分為based boolean和based time兩種類(lèi)型,。
3、按照注入位置及方式不同分為:post注入,,get注入,,cookie注入,盲注,,延時(shí)注入,,搜索注入,base64注入,,無(wú)論此種分類(lèi)如何多,,都可以歸納為以上兩種形式。
### 3,、注入測(cè)試
### 1,、數(shù)字型:
猜測(cè)SQL語(yǔ)句:
select 字段名 from 表名 where id = 1;
```
http://www.sql.com/xxx.php?id=1 假設(shè)ID為存在注入的參數(shù)
http://www.sql.com/xxx.php?id=1‘ 語(yǔ)句報(bào)錯(cuò)
http://www.sql.com/xxx.php?id=1 and 1=1 頁(yè)面正常返回結(jié)果
http://www.sql.com/xxx.php?id=1 and 1=2 頁(yè)面返回錯(cuò)誤
```
  如果以上幾個(gè)測(cè)試步驟結(jié)果全部滿(mǎn)足,,就可能存在sql注入漏洞,。
  數(shù)字型注入一般出現(xiàn)在asp php等弱類(lèi)型語(yǔ)言中,弱類(lèi)型語(yǔ)言會(huì)自動(dòng)推導(dǎo)變量類(lèi)型,,例如,,參數(shù)id=1,PHP會(huì)自動(dòng)把ID的數(shù)據(jù)類(lèi)型推導(dǎo)為int類(lèi)型,,若是 id=1 and 1=1,,則把ID推導(dǎo)為string類(lèi)型。但是對(duì)于Java,、c#這類(lèi)強(qiáng)類(lèi)型語(yǔ)言,,如果把一個(gè)字符串轉(zhuǎn)換為int類(lèi)型,則會(huì)拋出異常,,無(wú)法運(yùn)行,,所以數(shù)字型注入一般出現(xiàn)在弱類(lèi)型的語(yǔ)言當(dāng)中,強(qiáng)類(lèi)型語(yǔ)言很少存在,。
### 2,、字符型:
猜測(cè)SQL語(yǔ)句:
select 字段名 from 表名 where id =‘;
```
http://www.sql.com/xxx.php?id=1 假設(shè)ID為存在注入的參數(shù)
http://www.sql.com/xxx.php?id=1‘ 語(yǔ)句報(bào)錯(cuò)
http://www.sql.com/xxx.php?id=1' and 1=1 and '1'='1 頁(yè)面正常返回結(jié)果
http://www.sql.com/xxx.php?id=1' and 1=2 and '1'='1 頁(yè)面返回錯(cuò)誤
```
### 3,、搜索型:
猜測(cè)SQL語(yǔ)句:
select 字段 from 表名 where username like ‘%k%’;
```
http://www.sql.com/xxx.php?search=test 假設(shè)search為存在注入的參數(shù)
http://www.sql.com/xxx.php?search=test' 語(yǔ)句報(bào)錯(cuò)
http://www.sql.com/xxx.php?search=test%' and 1=1 and '%'=' 頁(yè)面正常返回結(jié)果
http://www.sql.com/xxx.php?search=test%' and 1=2 and '%'=' 頁(yè)面返回錯(cuò)誤
```