截斷上傳原理剖析


截斷上傳大家一定不陌生,可能你也看過很多動畫教程,人家都能順利的上傳成功,而但自己操作時卻總是失敗,為什么會這樣? 

其實我一開始接觸“截斷”這個概念時感到很神奇,也覺得很茫然。神奇的是它竟能突破上傳限制,茫然的是什么情況下才可以用?哪些上傳能截斷,哪些又不能。。。帶着這些問題,我試着去找上傳,試着用NC去截斷,可從來就沒有成功過。。。慢慢的就對這個概念模糊了! 


后來,我在拿一個站時,遇到了困難,可用的地方就只有上傳,於是被逼着再去研究截斷。。。經過那次的成功才發現,截斷原來是那么的簡單。。。摸清原理之后,它就不那么神奇了。 

也許你曾經用阿D,明小子。。的上傳上傳過SHE11,其實這些工具也是用“截斷”來上傳的,而如果每次都盲目的用它來上傳,甚至連為什么都不知道,那說實話,就算你用它來拿再多的站也沒任何進步!。。。懂得為什么才是最重要的,靈活變通,活學活用才能不斷的成長! 


下面和大家分享一下我給截斷的一些學習經驗:還是那句話,高手請飛過! 

截斷的核心,就是chr(0)這個字符 

先說一下這個字符,這個字符不為空(Null),也不是空字符(""),更不是空格! 

當程序在輸出含有chr(0)變量時,chr(0)后面的數據會被停止,換句話說,就是誤把它當成結束符,后面的數據直接忽略,這就導致漏洞產生 

簡單舉個例子,看下面的代碼 
<% 
path="upfiles/picture/" 
file="20121212.jpg" 
upfilename=path & file '最后的上傳地址 
%> 
就這段代碼中的path為上傳的路徑,file為生成的文件名,upfilename為上傳后的地址,程序表面是沒什么問題,但如果path可以由用戶自定義(path這個參數往往是從表單或參數傳過來的,能夠自定義),所以就產生了上傳路徑截斷漏洞 

比如我在表單中把路徑改成了“upfiles/1.aspChr(0)” 
這樣上傳路徑就成了 path="upfiles/1.aspChr(0)" chr(0)代表那個截斷字符 
這時變量被輸出時,就成了upfiles/1.asp 
而不是upfiles/upfiles/1.aspChr(0)20121212.jpg 
很明顯,upfile/1.asp就成了she11 

你可以馬上做個實驗 

把上面的代碼修改一下: 

<% 
path="upfiles/1.asp" & Chr(0) 'asp中chr(0)表示截斷字符 
file="20121212.jpg" 
upfilename=path & file '最后的上傳地址 
response.write upfilename 
%> 

眼見為實,你會發現最后輸出的upfilename確實是upfile/1.asp,變量輸出是這樣,上傳時生成文件當然也會這樣,這就是大家常聽到的路徑截斷上傳! 

上面這個例子非常簡單,如果你想學截斷,不妨親手試一下,明白了它的原理,看到了輸出的結果,你就會恍然大悟,原來截斷是這么的簡單! 

本文只講了路徑截斷,當然截斷的種類也有好幾種,原理其實都一樣。。。都是利用了這個chr(0)字符。 

至於實操,其它截斷。。以后會和大家慢慢分享!
連hook api 還有asp的函數都講出來了。。你們想怎么樣?順便說下。截斷上傳的那個不是空格
空格在HEX進制中的編碼是20 而截斷則是00 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM