受影響的系統:Microsoft NT+IIS
不受影響的版本: 未知
遠程: YES / 本地:YES
內容摘要:
這是國內一大學生發現的一個在NT+sql上的ASP程序密碼驗證漏洞:
很早就發現很多國內程序員對密碼驗證不注意,今天去了陳水扁()的網沾,隨手一試,居然發現有這種漏洞,真是讓人笑破肚皮!
原理:
很多網站把密碼放到數據庫中,在登陸驗證中用以下sql,(以asp為例)
sql="select * from user where username=@#"&username&"@#and pass=@#"& pass&@#"
此時,您只要根據sql構造一個特殊的用戶名和密碼,如:ben@# or @#1@#=@#1
hehe ...是不是進去了??
漏洞的利用:
sql="select * from user where username=@#"&username&"@#and pass=@#"& pass&@#"
此時,您只要根據sql構造一個特殊的用戶名和密碼,如:ben@# or @#1@#=@#1
這樣,程序將會變成這樣: sql="select*from user where username="&ben@#or@#1@#=1&"and pass="&pass&"
學過編程的應該知道: or 是一個邏輯運算符,作用是在判斷兩個條件的時候,只要其中一個條件成立,那么等式將會成立.而在語言中,是以1來代表真的(成立).那么在這行語句中,原語句的"and"驗證將不再繼續,而因為"1=1"和"or"令語句返回為真值.
解決方案:
由漏洞的發現者提供的解決方法:
比較好的應該按照以下方式:
1、處理輸入字符,
2、處理‘,|等字符
3、select * from user where user=’ " & User & "@# "
4、如果返回不為假,則取密碼
pass=rs("passwd")
5、判斷:if pass=password
6、得出結論。
文章來源于領測軟件測試網 http://www.kjueaiud.com/