### 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ā)生注入點的參數(shù)為整數(shù)時,,比如 ID,,num,page等,,這種形式的就屬于數(shù)字型注入漏洞,。同樣,當(dāng)注入點是字符串時,,則稱為字符型注入,,字符型注入需要引號來閉合。
2,、也可以根據(jù)數(shù)據(jù)庫返回的結(jié)果,,分為回顯注入、報錯注入,、盲注,。
回顯注入:可以直接在存在注入點的當(dāng)前頁面中獲取返回結(jié)果。
報錯注入:程序?qū)?shù)據(jù)庫的返回錯誤信息直接顯示在頁面中,,雖然沒有返回數(shù)據(jù)庫的查詢結(jié)果,,但是可以構(gòu)造一些報錯語句從錯誤信息中獲取想要的結(jié)果,。
盲注:程序后端屏蔽了數(shù)據(jù)庫的錯誤信息,,沒有直接顯示結(jié)果也沒有報錯信息,只能通過數(shù)據(jù)庫的邏輯和延時函數(shù)來判斷注入的結(jié)果,。根據(jù)表現(xiàn)形式的不同,,盲注又分為based boolean和based time兩種類型。
3,、按照注入位置及方式不同分為:post注入,,get注入,cookie注入,,盲注,,延時注入,搜索注入,,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‘ 語句報錯
http://www.sql.com/xxx.php?id=1 and 1=1 頁面正常返回結(jié)果
http://www.sql.com/xxx.php?id=1 and 1=2 頁面返回錯誤
```
  如果以上幾個測試步驟結(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#這類強類型語言,,如果把一個字符串轉(zhuǎn)換為int類型,則會拋出異常,,無法運行,,所以數(shù)字型注入一般出現(xiàn)在弱類型的語言當(dā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‘ 語句報錯
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 頁面返回錯誤
```
### 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' 語句報錯
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 '%'=' 頁面返回錯誤
```