發佈時間:2008.04.25 04:53     來源:賽迪網    作者:Chad

乍一看,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://database.ccidnet.com/art/1105/20080424/1431175_2.html

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivan0914 的頭像
    ivan0914

    I'n Blog 之萬象真藏

    ivan0914 發表在 痞客邦 留言(0) 人氣()