截斷上傳大家一定不陌生,可能你也看過很多動畫教程,人家都能順利的上傳成功,而但自己操作時卻總是失敗,為什么會這樣?
其實我一開始接觸“截斷”這個概念時感到很神奇,也覺得很茫然。神奇的是它竟能突破上傳限制,茫然的是什么情況下才可以用?哪些上傳能截斷,哪些又不能。。。帶着這些問題,我試着去找上傳,試着用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