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