<一>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