程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL 注入攻擊原理及防護

SQL 注入攻擊原理及防護

編輯:關於SqlServer

<一>SQL注入簡介

許多網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,使應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,(一般是在浏覽器地址欄進行,通過正常的www端口訪問)根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的SQL Injection,即SQL注入。

<二>SQL注入思路

思路最重要。其實好多人都不知道SQL到底能做什麼呢?這裡總結一下SQL注入入侵的總體的思路:

1. SQL注入漏洞的判斷,即尋找注入點

2. 判斷後台數據庫類型

3. 確定XP_CMDSHELL可執行情況;若當前連接數據的帳號具有SA權限,且master.dbo.xp_cmdshell擴展存儲過程(調用此存儲過程可以直接使用操作系統的shell)能夠正確執行,則整個計算機可以通過幾種方法完全控制,也就完成了整個注入過程,否則繼續:

1. 發現WEB虛擬目錄

2. 上傳ASP木馬;

3. 得到管理員權限

具體步驟:

一、SQL注入漏洞的判斷

如果以前沒玩過注入,請把IE菜單-工具-Internet選項-高級-顯示友好HTTP錯誤信息前面的勾去掉。

為了把問題說明清楚,以下以HTTP://www.163.com/news.ASP?id=xx(這個地址是假想的),為例進行分析,xx可能是整型,也有可能是字符串。

1、整型參數的判斷

當輸入的參數xx為整型時,通常news.ASP中SQL語句原貌大致如下:

select * from 表名 where 字段=xx,所以可以用以下步驟測試SQL注入是否存在。

最簡單的判斷方法

HTTP://www.163.com/news.ASP?id=xx’(附加一個單引號),

此時news.ASP中的SQL語句變成了

select * from 表名 where 字段=xx’,

如果程序沒有過濾好“’”的話,就會提示 news.ASP運行異常;但這樣的方法雖然很簡單,但並不是最好的,因為:

first,不一定每台服務器的IIS都返回具體錯誤提示給客戶端,如果程序中加了cint(參數)之類語句的話,SQL注入是不會成功的,但服務器同樣會報錯,具體提示信息為處理 URL 時服務器上出錯。請和系統管理員聯絡。

second,目前大多數程序員已經將“’“ 過濾掉,所以用” ’”測試不到注入點,所以一般使用經典的1=1和1=2測試方法,見下文:

HTTP://www.163.com/news.asp?id=xx and 1=1, news.ASP運行正常,

而且與HTTP://www.163.com/news.ASP?id=xx運行結果相同;

HTTP://www.163.com/news.asp?id=xx and 1=2, news.ASP運行異常;(這就是經典的 1=1 1=2 判斷方法)

如果以上面滿足,news.ASP中就會存在SQL注入漏洞,反之則可能不能注入。

2、字符串型參數的判斷

方法與數值型參數判斷方法基本相同

當輸入的參數xx為字符串時,通常news.ASP中SQL語句原貌大致如下:

select * from 表名 where 字段='xx',所以可以用以下步驟測試SQL注入是否存在。

HTTP://www.163.com/news.asp?id=xx’(附加一個單引號),此時news.ASP中的SQL語句變成了
select * from 表名 where 字段=xx’,news.ASP運行異常;
HTTP://www.163.com/news.asp?id=xx and '1'='1', news.ASP運行正常,

而且與HTTP://www.163.com/news.ASP?id=xx運行結果相同;

HTTP://www.163.com/news.asp?id=xx and '1'='2', news.ASP運行異常;

如果以上滿足,則news.ASP存在SQL注入漏洞,反之則不能注入

3、特殊情況的處理

有時ASP程序員會在程序員過濾掉單引號等字符,以防止SQL注入。此時可以用以下幾種方法試一試。

①大小定混合法:由於VBS並不區分大小寫,而程序員在過濾時通常要麼全部過濾大寫字符串,要麼全部過濾小寫字符串,而大小寫混合往往會被忽視。如用SelecT代替select,SELECT等;

②UNICODE法:在IIS中,以UNICODE字符集實現國際化,我們完全可以IE中輸入的字符串化成UNICODE字符串進行輸入。如+ =%2B,空格=%20 等;URLEncode信息參見附件一;

③ASCII碼法:可以把輸入的部分或全部字符全部

<4>出了上述方法以外,還有個更簡單的方法就是使用現成的工具像NB聯盟的NBSI就是一款很不錯的工具,目前最新的版本為2.2

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved