上傳文件
后臺開發(fā)時并沒有對上傳的文件進(jìn)行安全考慮或采用了有缺陷的措施菩佑,導(dǎo)致攻擊者可以通過一些手段繞過安全措施從而上傳一些惡意文件,從而通過該惡意文件的訪問來控制整個后臺
文件上傳靶機(jī)下載地址:https://github.com/c0ny1/upload-labs
一地回、測試流程:
vstart webshell里面找php
在pikachu上傳文件選擇路徑找到123.jpg
上傳成功
如果擴(kuò)展名不是.jpg?? 上傳不成功,不允許上傳
檢查源代碼有函數(shù)
客戶端繞過
方法一:刪掉函數(shù)(沒成功)
方法二:burpsuite抓包(不受客戶端限制)
發(fā)送? 200成功
傳輸之后 render看一下顯示剛剛改完擴(kuò)展名的.php文件
代理 攔截禁用 放行
服務(wù)端
2俊鱼、服務(wù)端驗(yàn)證繞過(MIME 類型檢測)
? ? ? MIME(Multipurpose Internet Mail Extensions)多用途互聯(lián)網(wǎng)郵件擴(kuò)展類型落君。是設(shè)定某種擴(kuò)展名的文件用一種應(yīng)用程序來打開的方式類型,當(dāng)該擴(kuò)展名文件被訪問的時候亭引,瀏覽器會自動使用指定應(yīng)用程序來打開。多用于指定一些客戶端自定義的文件名皮获,以及一些媒體文件打開方式焙蚓。
? ? ? 每個MIME類型由兩部分組成,前面是數(shù)據(jù)的大類別洒宝,例如聲音audio购公、圖象image等,后面定義具體的種類雁歌。
常見的MIME類型(通用型):
超文本標(biāo)記語言文本 .html text/html
xml文檔 .xml text/xml
XHTML文檔 .xhtml application/xhtml+xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進(jìn)制數(shù)據(jù) application/octet-stream
? ? 通過使用 PHP 的全局?jǐn)?shù)組 $_FILES宏浩,你可以從客戶計(jì)算機(jī)向遠(yuǎn)程服務(wù)器上傳文件。
第一個參數(shù)是表單的 input name靠瞎,第二個下標(biāo)可以是 "name", "type", "size", "tmp_name" 或 "error"比庄。就像這樣:
$_FILES["file"]["name"] - 被上傳文件的名稱
$_FILES["file"]["type"] - 被上傳文件的類型
$_FILES["file"]["size"] - 被上傳文件的大小求妹,以字節(jié)計(jì)
$_FILES["file"]["tmp_name"] - 存儲在服務(wù)器的文件的臨時副本的名稱
$_FILES["file"]["error"] - 由文件上傳導(dǎo)致的錯誤代碼
詳細(xì)可參考:http://www.w3school.com.cn/php/php_file_upload.asp
? ? ? 分析代碼邏輯:首先會獲取到前端的提交請求,然后定義了一個數(shù)組(定義圖片上傳指定類型)佳窑,然后通過upload_sick函數(shù)對上傳的文件進(jìn)行一定的檢查制恍。
分析upload_sick函數(shù)存在漏洞的的原因是因?yàn)?$ _FILES() 這個全局的方法是通過瀏覽器http頭去獲取的content-type,content-type是前端用戶可以控制的神凑。容易被繞過净神。
? ? 上傳一張正常的符合標(biāo)準(zhǔn)的圖片,對其content-type進(jìn)行抓包操作溉委【槲ǎ可見正常上傳符合要求的圖片中數(shù)據(jù)包中content-type為image/png對比符合條件,而php文件則不符合條件返回文件類型錯誤瓣喊。
文件頭上傳
抓包
改頭繞過
發(fā)送到重發(fā)器改頭? 成功繞過
getimagesize
GIF89A
文件包含
圖片能當(dāng)腳本執(zhí)行一定有包含