概述
檔案上傳漏洞
檔案上傳功能在web應用系統很常見,比如很多網站注冊的時候需要上傳頭像、上傳附件等等,當用戶點擊上傳按鈕后,后臺會對上傳的檔案進行判斷 比如是否是指定的型別、后綴名、大小等等,然后將其按照設計的格式進行重命名后存盤在指定的目錄, 如果說后臺對上傳的檔案沒有進行任何的安全判斷或者判斷條件不夠嚴謹,則攻擊著可能會上傳一些惡意的檔案,比如一句話木馬,從而導致后臺服務器被webshell,
所以,在設計檔案上傳功能時,一定要對傳進來的檔案進行嚴格的安全考慮,例如:
驗證檔案型別、后綴名、大小
驗證檔案的上傳方式
對檔案進行一定復雜的重命名
不要暴露檔案上傳后的路徑
upload-labs(21關) 前16關

1.JS繞過
通過代理抓包,發現未產生流量,確定其為前端JS檢測
通過禁用JS上傳

上傳成功

蟻劍連接成功

2.MIME型別繞過
通過代理抓包,修改Content-Type為image/gif放包

蟻劍連接測驗成功
3.后綴名決議繞過
將檔案后綴名修改為php5上傳,上傳成功
這里可以上傳后綴為php3,pht,phtml,php5,phps等來繞過(它們會被決議為php)


蟻劍連接測驗,發現測驗失敗,原因是由于本地服務器配置的原因無法決議后綴php5為php檔案
4…htaccess檔案決議繞過
通過測驗發現為黑名單繞過,此時可以利用.htaccess檔案決議圖片馬
先上傳.htaccess檔案
<FilesMatch "as.png">
setHandler application/x-httpd-php
</FilesMatch>
上傳之后再上傳圖片馬as.png
蟻劍連接測驗成功

利用PHP 和 Windows環境的疊加特性也能getshell
5…user.ini檔案決議繞過
php.ini 是 php的組態檔,.user.ini 中的欄位也會被 php 視為組態檔來處理,從而導致 php 的檔案決議漏洞,
.user.ini檔案解釋
引發 .user.ini 決議漏洞需要三個前提條件
服務器腳本語言為PHP
服務器使用CGI/FastCGI模式
上傳目錄下要有可執行的php檔案(例如index.php)
.user.ini
auto_prepend_file=as.png
參考網址:
.user.ini導致檔案上傳繞過
.user.ini組態檔在滲透中的利用
6.大小寫繞過

7.空格繞過

8.點(.)繞過

9.::$DATA繞過

10.點空格點(. .)繞過

11.雙寫繞過

12.%00截斷

但是%00截斷的條件是要滿足以下幾點:
php 版本小于 5.3.4
php的magic_quotes_gpc為OFF狀態
所以上傳失敗
13.0x00截斷
1.這里將%00進行url decode,轉換為空字符,進行截斷(GET可以url自動轉碼的,但POST不會)

2.可以使用Hex進行截斷,在p后面添加一個空字符(00),p的16進制是0x70

繞過失敗是由于php版本的原因
14.檔案幻數繞過

檔案幻數
GIF (gif),檔案頭hex:47 49 46 38(也就是GIF89a)
JPEG (jpg),檔案頭hex:FF D8 FF
PNG (png),檔案頭hex:89 50 4E 47

利用檔案包含漏洞

制作圖片馬

上傳s.png

利用檔案包含漏洞

上傳s.jpg

利用檔案包含漏洞

15.圖片馬繞過
解法同14關,
16.圖片馬繞過
前提:需要開啟php_exif擴展,php版本>5.2.17
否則會出現以下情況

解法同14關,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/296485.html
標籤:其他
