0x00 前言
小菜今天在測試網站的時候,發現存在上傳點,於是嘗試各種姿勢,環境為iis7.5,於是乎來一個解析漏洞,發現並不可以,最終百度乎,發現上傳有很多種利用方法,所以小菜就去學習了一下截斷上傳,搜集了很多資料,做一下總結,大牛完全可以飄過,基礎文章。
0x01 截斷原理
首先科普一下,網上說的介紹都有神馬0x00,%00,/00之類的截斷,看的小菜我暈乎乎的,其實看完才知道,原來都是一樣的,只是不同表示而已,截斷的核心在於chr(0)這個字符,這個函數表示返回以數值表達式值為編碼的字符,舉個例,print chr(78) 結果是N,所以char(0)表示的ascll字符是null,當程序輸出包含chr(0)變量時,chr(0)后面的數據會被截斷,后面的數據直接忽略,導致漏洞產生。
0x02 0x00截斷
我先把網上盛行的集中上傳截斷各自舉個例,然后到最后總結一下階段的核心,首先是0x00截斷,00截斷是將上傳文件名或路徑名中使用ascll碼值為0的字符(也就是null)來進行截斷,%00一般用在URL中用於截斷url來進行文件包含,兩者原理都一樣,都是ascll為0的字符,只是形式不同而已。
(1)用burp工具來截斷,設置代理,然后抓包,我們要修改的地方我已標注
(2)在/Upload/后面加一個空格,點開hex,將其對應的20改成00即可,就可以繞過后綴名的過濾,從而得到webshell
0x03 %00截斷
我就不過多贅述了,前面原理也都講的差不多,直接上方法,將文件名后面直接加上%00.jpg,先繞過后綴上傳,然后利用burp的urldecode功能,其實和/00截斷將hex20變成00一樣,效果一樣,兩種方法都可以拿webshell
0x04 總結
上面兩種其實是一個原理,下面我們就其原理總結倒騰一下,明白了原理也就發現,截斷上傳也不是很難,下面我們就進入正軌,最開始我也說了,截斷上傳的核心在chr(0)(即null)的利用。
我們可以寫個代碼驗證一下,在網上找到了一個淺顯易懂的代碼,下面我們看代碼
<%
path="upfiles/picture/"
file="XXX.jpg"
upfilename=path & file '最后的上傳地址
%>
大家應該能清楚的看懂這個意思,path為上傳的路徑,file是生成的文件名,而upfilename則是最終上傳后路徑,試想一下,如果path是用戶可以控制的,那么截斷漏洞就產生了。比如我更改的path為upfiles/picture/1.aspchr(0)&XXX.jpg,chr(0)會忽略后面的東西,看看,upfiles/picture/1.asp,很熟悉吧一個webshell就這樣誕生了。
0x05 后記
關於截斷我就寫這么多了,基本上例子和原理也都涵蓋到了,希望能對某些不理解截斷的人一點兒幫助,其實我還是想說,凡事還是得靠實踐,實踐才能出真知啊,知道原理了,就要去實踐,多多實戰就會更加理解,不然就會忘了,以后還得繼續學,如果有什么錯誤還請大牛指點。
資料匯總:http://www.jinglingshu.org/?p=1339
https://www.91ri.org/2404.html
http://tieba.baidu.com/p/2158985760