天天看點

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

概述

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

檔案上傳源碼分析

注:

client check和MIME type的d.php為

getimagesize的php.php為

client check

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

d.php為一句話木馬,先試試上傳d.php,提示不符合要求。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

猜測是前端檢測,将d.php重命名為d.jpg,上傳,抓包,再将filename改為d.php,上傳成功。并且傳回路徑。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

連接配接試試,成功執行。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

代碼分析

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

跟進js的checkFileExt函數,可得知此函數是檢查字尾名。但是前端的内容使用者很多都可以僞造,一定不要在重要位置相信前端傳來的值。以上方法就可以繞過。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

再看看後端的邏輯吧

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

跟進upload_client函數,這個後端沒做什麼過濾。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

MIME type

MIME type檢測是檢測Content-type,上傳d.php,抓包,将Content-type的内容改為image/jpeg。上傳成功,傳回路徑。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

連接配接,執行成功。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

代碼分析

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

跟進upload_sick函數,其中的$_FILES[$key][‘type’] 檔案的 MIME 類型,需要浏覽器提供該資訊的支援,例如"image/gif",但是這個資訊可以僞造。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

getimagesize

getimagesize() 函數将測定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 圖像檔案的大小并傳回圖像的尺寸以及檔案類型及圖檔高度與寬度。繞過此函數需要制作圖檔馬。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

上傳回顯字尾名不對

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

試試00截斷?(隻有部分伺服器有這個漏洞)

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

回顯上傳的是假圖檔,感覺事情有點不對。。。前面已經制作了圖檔馬,我們上傳的就是圖檔檔案鴨。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

回去看了下,發現copy指令時應該把.jpg檔案放在前面才行,這樣新生成的.jpg的二進制頭資訊才是jpg檔案的頭資訊。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

上傳成功。再結合前面的檔案包含漏洞,執行成功。

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

代碼分析

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

跟進upload函數

pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複
pikachu-檔案上傳漏洞源碼分析及修複概述檔案上傳源碼分析修複

後端做了嚴格的審查,隻有結合前面的檔案包含漏洞才可以實際利用。其實很多漏洞都不是單獨利用的,多個漏洞一起利用會有意想不到的效果

修複

轉這裡:web常見漏洞原理,利用,防禦(思路

1.前端js腳本檢測字尾名

繞過:burp抓包修改檔案字尾名

2.後端白名單和黑名單檢測

黑名單檢測:測試後端檢測規則,進行繞過;利用系統解析漏洞。

白名單檢測:00截斷繞過(特定版本下)

3.Content-Type檢測過濾

繞過:burp抓包修改content-type

4.getimagesize()函數檢測是否的正常的圖檔大小

繞過:将木馬寫入圖檔裡(copy /b 1.jpg+1.php 2.jpg)

5.圖檔二次渲染

6.檔案重命名

繼續閱讀