文章的用意是氣氣 魔王的!本來他發表的那個漏洞是可以這樣利用的:
有下面的一段代碼:
<% dim name,title
name=trim(request.form("name"))
password=trim(request.form("password"))
if name=""or password="" then response.redirect "error.asp?error=name&name=null"
myDSN="DSN=test;uid=test;pwd=test"
set cn=server.createobject("adodb.connection")
cn.open myDSN
sql="insert into test(name,title) values('"&name&"','"&password&"')"
cn.execute(sql)
cn.close%>
使用了trim函數來去掉開頭和結尾的空格,在一般的情況下,這段程序執行的很正常,但是后來竟然發現有人竟然可以使用空格來,意思就是說,該用戶的name完全為空格,但是自己嘗試使用空格卻無論都不能通過(即被程序監測了出來),開頭和結尾的空格都被trim函數給去掉了,即使中間有空格,若需要的話也可以使用一個函數把中間的空格給去掉,由于使用的是sql數據庫記錄下的用戶資料,于是懷疑他使用了其它什么的東西讓系統看不到,于是去察看紀錄用戶資料的sql數據庫(曾經使用這種方法看到了帶換行符的用戶),但是仍然看到數據庫中的改用戶的資料也是空格,這難道說該用戶使用了一種手段可以繞過我的用戶名和密碼監測嗎???實在找不到程序上的漏洞,后來有一次突然靈光一閃,我自己想到了,原來是"Alt+255",按住alt鍵然后依次按下小鍵盤中"2","5","5"就會產生一個比較特殊的東西"空格"字符(這個概念筆者也不是比較清楚,這是一種控制字符,在一些編輯器中可以看到word2000,應該還有其他的控制字符),這個空格字符不同于傳統的按下空格鍵產生的字符,它的asc代碼是255,而傳統的space鍵入的空格的asc代碼是32,trim函數只能認識asc代碼為32的代碼并去除,所以出現了出現空格用戶的情況!針對這種情況筆者設計了下面的兩種函數去掉這"空格"字符:
function xuankong(str)
dim result
dim j
j=len(str)
result=""
dim i
for i = 1 to j
select case mid(str,i,1)
case "<"
result=result+"<"
case ">"
result=result+">"
case chr(34)
result=result+"""
case "&"
result=result+"&"'以上代碼轉換一些html標記
case chr(255) '防止特殊空格
result=result
case chr(13) '防止回車符
result=result+""
case chr(10) '防止換行符
result=result+""
case else
result=result+mid(str,i,1)
end select
next
xuankong=result
end function
然后在你的asp程序中使用這個函數,比如:
name=xuankong(trim(request.form("name")))
因為字符0-z asc代碼的數值為 48-122 這一個區段 ,所以可以使用如下的方法監測:
dim j
j=len(trim(request.form("name")))
for i= 1 toj
ifasc(mid(name,i,1))>122 or asc(mid(name,i,1))<48 then response..redirect"error.asp?
error=special"
next
雖然這種“空格”暫時沒有發現會破壞程序的問題,但是卻是可以讓人搗亂的,還是防了的好,不過這種空格也有一種好處,如果作為你得上網密碼的話,嘿嘿… …恐怕沒有幾個人能看到吧!看到的都是以為是space,但是卻不是… … 我不熟悉php和jsp所以不知道在這兩種東西中是否會存在這種問題。不過肯定這個漏洞是嚴重的,現在很多地方存在這種漏洞,因為這些程序員非常信任trim()這個東西。呵呵!
(原創)隨便談談。。。 (混世魔王的文章剖析)
其實這個我都不想寫,就是關于混世魔王他們發現的一個漏洞的荒謬:(動易4.03上傳漏洞 )
我們來看看他們是怎么寫的
重要的漏洞代
碼在于這一句
FileExt=lcase(ofile.FileExt) '判斷擴展名
arrUpFileType=split(UpFileType,"|")
for i=0 to ubound(arrUpFileType)
if FileExt=trim(arrUpFileType(i)) then
EnableUpload=true
exit for
end if
next
if FileExt="asp" or FileExt="asa" or FileExt="aspx" or FileExt="cer" or FileExt="cdx" then
EnableUpload=false
一個變量的出錯導致上傳漏洞的產生。原理都是利用加個空格,因為asp (后面有空格)是不等于asp的
真的可以嗎?真是笑話。
讓我們看看trim()這個函數的解釋吧:
在asp編程中,我們常常使用trim(rtrim,ltrim)函數去掉一些數據的開頭和結尾的空格。
假如我們提交的是這樣的.asp (后面有個空格)
trim()將空格脫去,然后再和array里的asp asa aspx cdx cer!
還能成功嗎?我用我的電腦打賭,他們一定是頭腦發熱,才公布了這個漏洞,我找了魔王說了半天,他還不懂!
哎。。。現在做技術的呀。


