小心你的WEB應(yīng)用程序成為數(shù)據(jù)竊賊的幫兇(2) |
發(fā)布時間: 2012/6/11 19:27:24 |
攻擊者尋找突破口
首先,攻擊者可能查看應(yīng)用程序是否能夠正確地處理錯誤條件。有許多方法可以檢查SQL錯誤消息,每一個方法都依賴于數(shù)據(jù)庫自身。最常見的例子是“‘”( 撇號)。攻擊者可能會嘗試插入“‘”而不是一個合法的用戶名: Wangzhan.com/userdetail.asp?username=‘ 如果出現(xiàn)錯誤,攻擊者就可以了解一些信息。例如,下面的錯誤就會使攻擊者知道這是一個MySQL數(shù)據(jù)庫,而且表明數(shù)據(jù)庫將“‘”解釋為查詢的一部分,從而揭示出這可能是一個SQL注入點,值得進(jìn)一步調(diào)查。 錯誤:您的SQL語法有一個錯誤,請檢查您的MySQL億恩科技服務(wù)器版本對應(yīng)的手冊,查看正確的語法…在第4行 在此例中,我們使用了一個“‘”,但任何“保留”字符,即在測試數(shù)據(jù)庫錯誤時可以使用的為特別目的而保留的一個字符。保留字符對每種數(shù)據(jù)庫類型來說都是獨一無二的。 借助上面顯示的MySQL錯誤消息,我們可以看出黑客是多么聰明,而且能夠發(fā)現(xiàn)應(yīng)用程序正在訪問的數(shù)據(jù)庫表的其它細(xì)節(jié)。請看: Wangzhan.com/userdetail.asp?username=Zhangsan order by 1 如果我們沒有收到錯誤,就可以知道用戶名要么是SQL WHERE語句中的最后一個變量(允許我們從一個數(shù)據(jù)庫表中重新獲取數(shù)據(jù),同時又排除其它的無關(guān)數(shù)據(jù)),或者是WHERE語句中的唯一變量。我們可以讓數(shù)字每次增加1,直至收到一個錯誤。例如,可能在到達(dá)“Zhangsan order by 9”,就可以看到: 錯誤:用戶警告:“order clause”查詢中有無法確認(rèn)的列:SELECT 現(xiàn)在可以確認(rèn),直至提交了“9”,我們才收到了錯誤消息,所以可以斷定表中有8列。這個信息很有用,但我們只是想獲得盡量多的數(shù)據(jù)。假設(shè)沒有提供輸入驗證,通過在用戶名的位置使用一個通配符,我們實際上可以返回所有用戶的細(xì)節(jié): Wangzhan.com/userdetail.asp?username=% 在該例中,我們將執(zhí)行下面的查詢,返回所有用戶的細(xì)節(jié): SELECT uname,fname,lname,phone,street,city,state,zip FROM users WHERE user = % 如果攻擊使用此伎倆,勢必會造成數(shù)據(jù)損害,使大量的有價值的客戶信息處于風(fēng)險之中。其中可能包括應(yīng)當(dāng)被加密的用戶口令,當(dāng)然攻擊者可以在日后再進(jìn)行破解。遭到泄露的客戶信息還有可能包括電子郵件地址,攻擊者可以將其用于釣魚攻擊。 其實,我們可以不用插入簡單的通配符,而是終止查詢,并讓查詢做一些查詢之外的事情: Wangzhan.com/userdetail.asp?username=zhangsan;DROP users— 為便于比較,我們將SQL Server的數(shù)據(jù)庫語句列示如下: SELECT uname,fname,lname,phone,street,city,state,zip FROM users WHERE user = ‘zhangsan’;DROP users— 還要注意,此例允許你在同一行上提交多個查詢(在此例中,即SELECT和DROP查詢)。其方法就是用分號(;)分開并用兩個破折號結(jié)束。因而,在完成最初的查詢后,攻擊者就可以發(fā)送并運行自己選擇的一個完整查詢。
本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |