軟件測試開發技術SQL指令植入式攻擊的危害及其防范措施 (2)

發表于:2009-10-14來源:作者:點擊數: 標簽:軟件測試sqlSQLSql植入
軟件 測試 開發 技術SQL指令植入式攻擊的危害及其防范措施 (2) SQL數據庫 關鍵字: 乍一看,ExecLogin.asp 的代碼似乎沒有任何 安全 漏洞,因為用戶如果不給出有效的用戶名/密碼組合就無法登錄。然而,這段代碼偏偏不安全,而且它正是SQL 指令植入式攻擊的
軟件測試開發技術SQL指令植入式攻擊的危害及其防范措施 (2) SQL數據庫

關鍵字:  

乍一看,ExecLogin.asp 的代碼似乎沒有任何安全漏洞,因為用戶如果不給出有效的用戶名/密碼組合就無法登錄。然而,這段代碼偏偏不安全,而且它正是SQL 指令植入式攻擊的理想目標。具體而言,設計者把用戶的輸入直接用于構建SQL 指令,從而使攻擊者能夠自行決定即將被執行的 SQL 指令。例如:攻擊者可能會在表單的用戶名或密碼欄中輸入包含“ or ”和“=” 等特殊字符。于是,提交給數據庫的 SQL 指令就可能是:

代碼:SELECT * FROM tblUsers WHERE Username= or = and Password = or =

這樣,SQL 服務器將返回 tblUsers 表格中的所有記錄,而 ASP 腳本將會因此而誤認為攻擊者的輸入符合 tblUsers 表格中的第一條記錄,從而允許攻擊者以該用戶的名義登入網站。

SQL 指令植入式攻擊還有另一種形式,它發生在 ASP 服務器根據 querystring 參數動態生成網頁時。這里有一個例子,此 ASP 頁面從 URL 中提取出 querystring 參數中的 ID 值,然后根據 ID 值動態生成后繼頁面:

代碼:<% Dim p_lngID, objRS, strSQL p_lngID = Request ("ID") strSQL = "SELECT * FROM tblArticles WHERE ID=" & p_lngID Set objRS = Server.CreateObject ("ADODB.Recordset") objRS.Open strSQL, "DSN=..." If (Not objRS.EOF) Then Response.Write objRS ("ArticleContent") Set objRS = Nothing %>

在一般情況下,此 ASP 腳本能夠顯示具有特定 ID 值的文章的內容,而 ID 值是由 URL 中的 querystring 參數指定的。例如:當URL為http://www.example.com/Article.asp?ID=1055 時,ASP 就會根據 ID 為1055的文章提供的內容生成頁面。

如同前述登錄頁面的例子一樣,此段代碼也向SQL 指令植入式攻擊敞開了大門。某些惡意用戶可能會把 querystring 中的文章 ID 值偷換為“0 or 1=1”等內容(也就是說,把 URL 換成http://www.example.com/Article.asp?ID=0 or 1=1) 從而誘使 ASP 腳本生成不安全的SQL指令如:

代碼:SELECT * FROM tblArticles WHERE ID=0 or 1=1

于是,數據庫將會返回所有文章的內容。

當然了,本例服務器所受的攻擊不一定會引起什么嚴重后果??墒?,攻擊者卻可能變本加厲,比如用同樣的手段發送 DELETE 等SQL指令。這只需要簡單地修改前述 URL 中的querystring 參數就可以了!例如:任何人都可以通過 http://www.example.com/Article.asp?ID=1055; DELETE FROM tblArticles ”之類的URL來訪問Web網站。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97