繞過服務端文件上傳檢測:黑名單繞過技術與實戰

繞過服務端文件上傳檢測:黑名單繞過技術與實戰

文件上傳漏洞是Web安全中常見且危害極大的漏洞類型之一,而黑名單機制是最基礎的防御手段。本文將深入探討三種經典的黑名單繞過技術,并提供實戰案例與防御方案。

引言

文件上傳功能是現代Web應用的重要組成部分,但同時也是攻擊者最常利用的攻擊向量之一。當服務端采用黑名單機制來限制文件上傳時,攻擊者往往能找到巧妙的方法繞過這些限制,上傳惡意文件(如Webshell)從而獲取服務器控制權。

黑名單機制的局限性

黑名單機制通過禁止特定擴展名(如.php.asp.jsp)的文件上傳來提供安全防護。然而,這種機制存在先天缺陷:它只能阻止已知的危險擴展名,無法防范未知或變種的攻擊方式

黑名單繞過技術詳解

1. 后綴大小寫繞過

原理分析

當服務端使用簡單的字符串匹配檢測(如in_array()==比較),且未統一規范化文件擴展名時,攻擊者可以通過改變擴展名的大小寫來繞過檢測。

漏洞代碼示例
$blacklist = array('php', 'asp', 'jsp');
$extension = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));// 錯誤:未先轉換為小寫再比較
if (in_array($extension, $blacklist)) {die("危險文件類型!");
}
繞過方法
  • Webshell.Php
  • Webshell.PHp
  • Webshell.pHp
實戰案例

某CMS系統僅檢測小寫擴展名,攻擊者上傳shell.PHP文件成功繞過檢測,Apache服務器仍將其解析為PHP腳本。

2. 空格繞過

原理分析

在Windows環境中,文件名末尾的空格會被自動去除。如果服務端未對上傳文件名進行去空處理,攻擊者可利用此特性繞過檢測。

漏洞代碼示例
$filename = $_FILES['file']['name']; // 獲取"shell.php "
$extension = pathinfo($filename, PATHINFO_EXTENSION); // 獲取擴展名"php "if (in_array($extension, $blacklist)) {die("危險文件類型!");
}// Windows系統保存文件時會自動去除末尾空格,變成"shell.php"
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$filename);
繞過方法
  • shell.php (末尾加空格)
  • shell.php. (點號后加空格)
實戰案例

某論壇使用簡單黑名單檢測,但未處理文件名空格。攻擊者上傳cmd.asp 文件,在Windows服務器上成功保存為cmd.asp并被IIS解析執行。

3. 點號繞過

原理分析

Windows系統會自動去除文件名末尾的點號(.),而許多黑名單檢測邏輯未考慮這一特性。

漏洞代碼示例
$filename = $_FILES['file']['name']; // 獲取"shell.php."
$extension = pathinfo($filename, PATHINFO_EXTENSION); // 獲取擴展名"php."if (in_array($extension, $blacklist)) { // 檢測"php."不在黑名單中die("危險文件類型!");
}// Windows保存時自動去除末尾點號,變成"shell.php"
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$filename);
繞過方法
  • shell.php.
  • shell.asp.
實戰案例

某企業OA系統在黑名單中禁止了PHP文件,但未處理末尾點號。攻擊者上傳admin.php.文件,在Windows服務器上成功保存為可執行的PHP文件。

綜合利用與高級技巧

熟練的攻擊者往往會組合使用多種技術:

  1. 組合payloadWebshell.PHp. (大小寫+點號+空格)
  2. 雙重擴展名shell.php.jpg(配合解析漏洞)
  3. 特殊字符shell.php%00.jpg(空字節截斷,需特定環境)

防御方案

1. 使用白名單替代黑名單

$whitelist = array('jpg', 'png', 'gif', 'pdf');
$extension = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));if (!in_array($extension, $whitelist)) {die("僅允許上傳圖片和PDF文件!");
}

2. 規范化文件名

// 去除首尾空格和點號
$filename = trim(basename($_FILES['file']['name']), " .");
$extension = strtolower(pathinfo($filename, PATHINFO_EXTENSION));

3. 重命名上傳文件

// 使用隨機生成的文件名,避免保留用戶輸入
$new_filename = md5(uniqid().mt_rand()).'.'.$extension;
move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/'.$new_filename);

4. 綜合防護措施

  • MIME類型驗證:檢查$_FILES['file']['type']
  • 文件內容檢測:使用getimagesize()驗證圖片文件真實性
  • 服務器配置:禁用上傳目錄的腳本執行權限
  • 文件權限限制:設置上傳文件為只讀

結語

黑名單機制本質上是一種不安全的安全措施,容易被多種方法繞過。作為安全工程師,我們應該推薦使用白名單機制作為文件上傳功能的基礎防護,并結合多層次的安全檢測和服務器配置,才能有效防御文件上傳漏洞。

安全警示:本文技術僅用于安全研究和授權測試,未經授權的攻擊行為是違法的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/93613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/93613.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/93613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在職老D滲透日記day21:sqli-labs靶場通關(第27a關)get聯合注入 過濾select和union “閉合

5.27a.第27a關 get聯合注入 過濾select和union "閉合function blacklist($id) { $id preg_replace(/[\/\*]/,"", $id); //strip out /* $id preg_replace(/[--]/,"", $id); //Strip out --. $id preg_replace(/[#]/,"", $id); //Strip …

Git#cherry-pick

場景 項目里有多個分支,在某個分支commit內容想要應用到當前分支 命令 git cherry-pick --helpgit cherry-pick commit-ish:某個其他分支的commit應用到當前所在分支 (默認自動提交)git cherry-pick -n commit-ish:–no-commit(不自動提交)&a…

極海APM32F107V6 gpio模擬串口

一、原理部分 之前用外設都是直接用的硬件自帶的庫,雖然以前有學過原理和時序,但是因為工作其實也很少會有需要gpio模擬串口的情況,但總會有串口用完,但是需要一個類似打印串口的情況。今天也是開整,然后用硬件的庫對…

【數據可視化-94】2025 亞洲杯總決賽數據可視化分析:澳大利亞隊 vs 中國隊

🧑 博主簡介:曾任某智慧城市類企業算法總監,目前在美國市場的物流公司從事高級算法工程師一職,深耕人工智能領域,精通python數據挖掘、可視化、機器學習等,發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

鏈表基本運算詳解:查找、插入、刪除及特殊鏈表

在上一篇文章中,我們介紹了線性表的基本概念和順序存儲。本文將深入探討單鏈表的基本運算,并介紹循環鏈表和雙向鏈表這兩種特殊的鏈表結構,幫助讀者全面掌握鏈表的操作技巧。 文章目錄1.單鏈表基本運算鏈表的查找操作按序號查找按值查找鏈表的…

8.19作業

1.聊天室1.1服務器#include <myhead.h> #define SER_PORT 8888 #define SER_IP "192.168.174.128"struct msg {char type;char usrname[20];char msgtext[1024]; };int main(int argc, const char *argv[]) {int sfd socket(AF_INET,SOCK_STREAM,0);if (sfd-1…

95、23種設計模式之建造者模式(4/23)

建造者模式&#xff08;Builder Pattern&#xff09;是23種經典設計模式中的創建型模式之一&#xff0c;其核心思想是將復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建流程可以生成不同結構或配置的對象。以下從定義、結構、應用場景、優缺點及代碼示例展開分析&am…

LIA-X - 一張照片生成任意表情肖像動畫視頻 精準操控面部動作 支持50系顯卡 一鍵整合包下載

LIA-X 是一個可解釋的潛在肖像動畫生成器&#xff0c;只需要一張照片加一段驅動視頻生成任意表情肖像動畫&#xff0c; 旨在將驅動視頻中的面部動態精細地轉移到源肖像上&#xff0c;同時提供對頭部、嘴巴和眼睛的精細控制。同時支持圖像和視頻的編輯任務&#xff0c;比如對頭部…

Google 的 Opal:重新定義自動化的 AI 平臺

1. 真實世界測試&#xff1a;結果出乎意料 我讓 Opal 接受了三項極具挑戰性的任務&#xff1a; 1.1. 博客生成器挑戰 我的提示&#xff1a;“研究并撰寫一篇關于 2 億美元融資對無代碼&#xff08;no-code&#xff09;影響的文章。” 發生了什么&#xff1a;Opal 不僅僅是寫…

【FreeRTOS】任務通知

任務通知通知狀態的三種取值taskNOT_WAITING_NOTIFICATION&#xff1a;任務沒有在等待通知taskWAITING_NOTIFICATION&#xff1a;任務在等待通知taskNOTIFICATION_RECEIVED&#xff1a;任務接收到了通知&#xff0c;也被稱為 pending(有數據了&#xff0c;待處理)如下面兩個場景…

BEV:隱式相機視角轉換-----BEVFormer

一、背景 基于imp投影的相機視角轉換&#xff0c;對相機的內外參依賴較高&#xff0c;BEV 網格融合固定&#xff0c;可能對小目標不夠敏感&#xff1b;考慮通過transformer的方式進行相機的視角轉換&#xff0c;BEV query 可以自適應關注關鍵區域&#xff0c;提高小目標檢測&am…

zsh 使用筆記 命令行智能提示 bash智能

目錄 安裝&#xff1a; 升級&#xff1a; zsh 有什么用&#xff1f; zsh 安裝&#xff1a; sudo apt update sudo apt install zsh -y 升級&#xff1a; omz update zsh 有什么用&#xff1f; 相比 bash&#xff0c;zsh 更智能、更方便&#xff0c;常見優勢有&#xff…

Laya的適配模式選擇

文章目錄SCALE_FIXED_AUTOSCALE_SHOWALLSCALE_FULLSCALE_FIXED_HEIGHTSCALE_FIXED_WIDTHSCALE_NOSCALESCALE_EXACTFITSCALE_NOBORDERdemoSCALE_FIXED_AUTO NO.1會透&#xff0c;拉伸能解決官網解釋&#xff1a;應用保持設計比例不變&#xff0c;全屏顯示全部內容(類似showall&…

Android中flavor的使用

在我的開發中&#xff0c;有這樣的需求&#xff0c;有一個項目&#xff0c;需要適配不同的執法儀設備&#xff0c;這些執法儀都是Android系統的&#xff0c;而且有的有系統簽名&#xff0c;有的沒有&#xff0c;比如我共有四款型號&#xff0c;有三款有系統簽名&#xff0c;每款…

如何使用DeepSeek解析長pdf的文本

直接使用python工具解析pdf文件&#xff0c;可能因為格式兼容問題&#xff0c;導致解析出的文本幾乎不可讀。 這里嘗試使用Deepseek解析pdf文件&#xff0c;這里僅考慮文本&#xff0c;不考慮其他要素。 1 解析第一步 將pdf作為附件上傳到deepseekchat界面&#xff0c;輸入如…

W3C CSS 活動

W3C CSS 活動 引言 CSS(層疊樣式表)是現代網頁設計中不可或缺的技術之一。W3C(萬維網聯盟)作為全球互聯網標準制定的主要組織,定期舉辦各類CSS相關的活動,旨在促進CSS技術的發展與普及。本文將詳細介紹W3C CSS活動,包括活動內容、參與方式以及活動意義。 活動內容 1…

React Native 與 UniApp 對比

React Native 優點: 由 Facebook 開發維護&#xff0c;社區生態強大 使用 JavaScript/TypeScript 開發&#xff0c;學習曲線相對平緩 真正的原生渲染&#xff0c;性能接近原生應用 支持熱重載&#xff0c;開發效率高 可訪問所有原生平臺 API 大型應用案例豐富(如 Faceboo…

Dijkstra和多層圖 0

眾所周知&#xff0c;Dijkstra經常拿來解決不帶負權和環的單元最短路。我們先來看一下他的實現過程 (由于樸素版用的不多&#xff0c;我們直接上堆優化) 模板 #include<bits/stdc.h> #define mf(x,y) make_pair(x,y)//x距離&#xff0c;y節點 using namespace std; …

【驅動】RK3576:桌面操作系統基本概念

1、桌面操作系統 我們常說的Ubuntu、Debian、麒麟、統信等都是總包工頭; 他們把linux內核、根文件系統(遵循 Linux 標準文件系統層次結構FHS)、包管理(軟件、庫)、桌面環境(GNOME、Xfce等)、初始化系統(Systemd)、各種服務與守護進程、安全組件等整合成一個完整的桌面…

sfc_os!SfcQueueValidationRequest函數分析之sfc_os!IsFileInQueue

第一部分&#xff1a;1: kd> kc# 00 sfc_os!SfcQueueValidationRequest 01 sfc_os!SfcWatchProtectedDirectoriesWorkerThread 02 kernel32!BaseThreadStart1: kd> dvRegVal 0x01129164ChangeType 5vrd 0x012bfef0Status 0n1988337684vrdexisting 0x012bffdc//// if…