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