上傳漏洞-ASP 中 chr(0) 文件上傳漏洞原理及解決方法
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
我們在用 ASP 開發文件上傳功能的時候,為了防止用戶上傳木馬程序,常常會限制一些文件的上傳,常用的方法是判斷一下上傳文件的擴展名是否符合規定,可以用 right 字符串函數取出上傳文件的文件名的后四位,這樣很容易就能判斷了,但是這里面有一個漏洞,非常危險,就是 chr(0) 漏洞,詳情請接著往下看。 一、首先解釋下什么是 chr(0)? 在 ASP 中可以用 chr() 函數調用 ASCII 碼,其中 chr(0) 表示調用的是一個結束字符,簡單的說當一個字符串中包含 chr(0) 字符時,只能輸出 chr(0) 前面的字符,chr(0) 后面的字符將不被輸出。舉例如說明: <%response.write "HTMer.com"&chr(0)&" 歡迎您 "%> 以上代碼你在 IIS 下運行下看看,是不是只會輸出“HTMer.com”呢?后面的“歡迎您”就沒有了,因為讀到 chr(0) 時就認為該語句結束了。 二、chr(0) 漏洞上傳原理: 假設我在 ASP 程序中已經設置只能上傳 jpg 文件,這里看我怎么利用 chr(0) 漏洞上傳 ASP 木馬的: 這里假設有一個 ASP 木馬文件為 htmer.asp,我把它改名為 htmer.asp .jpg,大家有沒有看到中間有一個空格?我們在獲取該文件名時,這個空格就被認為是 chr(0),當用 right("htmer.asp .jpg",4) 看的時候,確實是 .jpg,但是當實際讀取 htmer.asp .jpg,并生成文件的時候,系統讀到 chr(0) 就以為結束了,所以后面的 .jpg 就輸出不來了,上傳后的文件名被自動生成了 htmer.asp,這意味著什么?我想你應該知道了吧。(由于顯示的原因,文中“.jpg”前面的空格實際上代表 chr(0)。千一網絡編輯注) 三、解決 chr(0) 漏洞的方法 解決辦法是檢查上傳的文件名里面有沒有 chr(0),在 ASP 中直接用 replace 函數替換掉 chr(0) 字符即可。 (chr(0) 漏洞是在完全按客戶端的文件名來保存時才存在,如果文件標識符是系統決定的,而文件擴展名由客戶端文件名來提取,則不會出現安全問題。實際上,我們應用中不可能完全按照客戶端文件名來保存,因為這本身就是一種漏洞,因為這樣客戶端就可以上傳文件來覆蓋已經存在的文件了。) 該文章在 2011/1/31 1:38:36 編輯過 |
關鍵字查詢
相關文章
正在查詢... |