Webug4.0靶場通關筆記12- 第17關 文件上傳之前端攔截(3種方法)

目錄

一、文件上傳前端攔截原理

二、第17關 文件上傳(前端攔截)

1.打開靶場

2.構造php腳本

3.源碼分析

(1)js源碼

(2)服務器源碼

(3)總結

4.滲透實戰

(1)禁用js法

(2)修改頁面法

(3)bp改包法


本文通過《webug4.0靶場第17文件上傳之前端攔截》來進行滲透實戰。文件上傳前端攔截是文件上傳前端攔截是一種在前端頁面實現的對文件上傳操作進行限制和驗證的技術手段,但是這種方法可以通過修改前端代碼或直接發送 HTTP 請求來繞過前端的限制,本文通過3種不同的方法實現滲透測試。

一、文件上傳前端攔截原理

文件上傳前端攔截是指在用戶提交文件時,通過瀏覽器端的JavaScript或HTML5技術對文件進行初步驗證,以減少非法文件上傳的風險。前端攔截主要用于提升用戶體驗,快速反饋文件合法性,但不能替代后端安全校驗,因為攻擊者可以繞過前端直接發送惡意請求。

類別詳情
定義文件上傳前端攔截是指在網頁前端對用戶的文件上傳操作進行限制和驗證的技術,通過一定手段判斷文件是否符合規定,在文件上傳至服務器前進行初步處理
目的1.?安全層面:阻止用戶上傳惡意文件(如可執行文件、病毒腳本等)和不符合要求的文件類型,降低服務器被攻擊、感染的風險,防止因文件上傳引發的安全問題;
2.?體驗層面:提前告知用戶文件存在的問題(如格式不支持、大小超限等),減少用戶等待時間和無效網絡請求,提升上傳操作的流暢性和用戶滿意度
實現方式以JavaScript 驗證為例:監聽change事件,獲取用戶所選文件,檢查文件類型(通過file.type)、大小(通過file.size)等屬性。借助FileReader對象讀取文件部分內容,進一步驗證文件格式,如檢查文件頭;
優勢1.?即時反饋:能快速在用戶選擇文件后給出反饋,讓用戶及時知曉文件是否符合要求;
2.?減輕服務器壓力:在前端過濾掉大量不符合要求的文件,減少服務器端的驗證工作和無效文件傳輸,節省服務器資源
局限性1.?易被繞過:攻擊者可通過修改前端代碼(如修改 JavaScript 驗證邏輯、accept屬性值)或直接構造 HTTP 請求繞過前端攔截,無法提供絕對的安全防護;
2.?驗證范圍有限:前端驗證主要基于文件基本屬性,對于一些復雜的文件內容檢測(如深度病毒掃描、文件內容合規性檢查)能力不足,需結合服務器端驗證

二、第17關 文件上傳(前端攔截)

1.打開靶場

打開webug4.0靶場的第17關文件上傳(前端攔截)關卡,完整URL地址如下所示。

http://192.168.71.1/webug4/control/upload_file/upload_file_1.php

2.構造php腳本

構造info.php,腳本內容為獲取服務器的php版本信息,具體如下所示。

<?php phpinfo();?>

隨手上傳php腳本,提示不允許上傳該格式類型,這說明本關卡進行了格式檢查,如下所示。

3.源碼分析

(1)js源碼

右鍵查看源碼,發現是使用js進行滲透的,也就是說這是前端驗證的文件上傳。

(2)服務器源碼

如下服務器源碼并未過濾,看來只有客戶端進行過濾。

<?php
// 引入公共配置文件,該文件通常包含一些全局的函數、常量或配置信息
// 路徑為相對于當前文件的上兩級目錄下的 common 文件夾中的 common.php 文件
require_once "../../common/common.php";// 檢查用戶會話中是否存在 'user' 變量
// 如果不存在,說明用戶未登錄,將用戶重定向到登錄頁面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 檢查上傳文件是否存在錯誤
// $_FILES['file']['error'] 是 PHP 中用于獲取上傳文件錯誤信息的變量
// 如果存在錯誤,直接終止腳本執行
if ($_FILES['file']['error']) {die();
}// 檢查是否有文件被上傳
if ($_FILES['file']) {// 將上傳文件的相關信息賦值給變量 $arr$arr = $_FILES['file'];// 檢查目標上傳目錄中是否已經存在同名文件// TPMELATE 應該是一個定義好的常量,表示上傳目錄的路徑// 如果文件已存在,彈出提示框告知用戶if (file_exists(TPMELATE."/upload/".$arr['name'])){echo "<script>alert('該文件已經存在')</script>";} else {// 將文件名從 UTF-8 編碼轉換為 gb2312 編碼// 這可能是為了適應服務器文件系統的編碼要求$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".$arr['name']);// 將臨時上傳的文件移動到目標目錄// move_uploaded_file 是 PHP 中用于移動上傳文件的函數// $arr["tmp_name"] 是臨時上傳文件的路徑move_uploaded_file($arr["tmp_name"],$filename);// 輸出文件的完整路徑并終止腳本執行echo $filename;die();}
}// 引入上傳文件頁面的 HTML 文件
// 該文件通常包含一個文件上傳表單
require_once TPMELATE."/upload_file_1.html";

(3)總結

綜上,本關卡存在文件上傳前端繞過的可能性,這是因為前端可被繞過且服務器未做過濾。

前端驗證可被繞過:前端代碼實現的文件類型過濾邏輯僅在客戶端執行。攻擊者可以通過直接修改前端代碼(例如在瀏覽器的開發者工具中修改 JavaScript 代碼)來禁用或繞過這個驗證邏輯。攻擊者不需要經過服務器的驗證,直接構造一個包含惡意文件的 HTTP 請求發送到服務器,就可以實現文件上傳,因為服務器端沒有對文件類型進行二次驗證,所以存在被繞過的風險。

未與服務器端配合:該前端代碼僅在客戶端對文件類型進行判斷,沒有與服務器端的驗證機制緊密配合。服務器端端沒有對上傳文件類型進行嚴格檢查,那么即使前端做了限制,攻擊者依然可以通過其他手段(如直接發送請求)繞過前端的限制上傳任意文件,從而導致安全問題。

4.滲透實戰

(1)禁用js法

將js開關變灰禁用,如下圖紅框所示。

禁用后刷新頁面,再次上傳文件,這里要特別強調如果不刷新會上傳失敗,此時上傳成功,具體如下所示顯示了腳本的完整URL地址。

上一步獲取到的腳本路徑如下所示。

D:/web/phpstudy_pro/WWW/webug4/template/upload/info.php

根據文件上傳路徑構造木馬路徑,如下所示。

http://192.168.71.1/webug4/template/upload/info.php 

做完滲透后記得打開js開關,如下所示。

打開開關后記得刷新頁面才可以生效。

(2)修改頁面法

右鍵查詢元素-搜索框輸入關鍵字filter。

?找到onchange,使其等于空處理,刪除js的處理函數οnchange="type_filter(this.files)"。

將如下函數變為空處理。

onchange="type_filter(this.files)"

變空后如下所示。

onchange=""

修改后如下所示。

重新復制info.php,將文件復制為info1.php,修改后不刷新頁面上傳php文件。

上傳結果如下所示。

如下所示,上傳的腳本執行成功。

(3)bp改包法

由于對文件的檢查是客戶端處理,故而可以在客戶端上傳圖片,繞過客戶端的前端檢查然后在bp中修改報文并將報文后綴改為info2.php 發送到服務器。

將info.php修改為info.jpg,如下所示。

bp開啟攔截功能,firefox瀏覽器開啟代理。

將info.jpg上傳,并使用bp抓包,同時將報文發送給repeater。

接下來將info.jpg改名為info2.php。

如下所示,點擊發送后上傳成功。

訪問info2.php,如下所示。

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

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

相關文章

高性能 WEB 服務器 Nginx:多虛擬主機實現!

Nginx 配置多虛擬主機實現 多虛擬主機是指在一臺 Nginx 服務器上配置多個網站 在 Nginx 中&#xff0c;多虛擬主機有三種實現方式&#xff1a; 基于IP地址實現多虛擬主機 基于端口號實現多虛擬主機 基于域名實現多虛擬主機 1 基于域名實現多虛擬主機 在 Nginx 中配置多個…

網星安全AWS攻防方案,重磅發布!

AWS介紹 AWS&#xff08;Amazon Web Services&#xff09; 是 Amazon 提供的云計算平臺&#xff0c;提供了廣泛的云服務&#xff0c;包括計算、存儲、數據庫、網絡、安全、人工智能、大數據處理等功能&#xff0c;幫助企業和開發者構建、部署和管理應用程序。AWS 是全球最大的…

qt的containers里的QToolBox和QTabWidget

Tool Box是一個多層次的折疊面板&#xff0c;通常用于組織多個可展開/折疊的面板組&#xff0c;每個面板有一個標題欄&#xff0c;用戶點擊標題欄可以展開或收起內容區域。比如設置界面中的分類選項&#xff0c;每個分類可以展開查看詳細內容。這樣能節省空間&#xff0c;讓界面…

【神經網絡與深度學習】深度學習中的生成模型簡介

深度學習中的生成模型 openai 的一個古早介紹 引言 深度學習中的生成模型能夠學習數據分布并生成新數據&#xff0c;在人工智能的多個領域中都有重要應用。不同類型的生成模型在原理和結構上各有特點&#xff0c;適用于不同的任務&#xff0c;如圖像生成、文本生成和時間序列…

js獲取明天日期、Vue3大菠蘿 Pinia的使用

直接上代碼 const today new Date(2019, 2, 28) const finalDate new Date(today) finalDate.setDate(today.getDate() 3)console.log(finalDate) // 31 March 2019 安裝 yarn add pinia # or with npm npm install pinia創建第一個store倉庫 1、在src目錄下創建store目錄…

存儲過程補充——定義條件、處理程序及游標使用

文章目錄 1. 定義條件與處理程序1.1 定義條件1.2 處理程序1.3 案例演示 2. 游標2.1 使用游標第一步&#xff0c;聲明游標第二步&#xff0c;打開游標第三步&#xff0c;使用游標&#xff08;從游標中取得數據&#xff09;第四步&#xff0c;關閉游標 2.2 舉例2.3 小結 在 MySQL…

藍橋杯單片機國賽模板——基于柳離風模板

藍橋杯單片機國賽模板——基于柳離風模板 文章目錄 藍橋杯單片機國賽模板——基于柳離風模板一、工程結構二、USER文件夾main.c 三、BSP文件夾1、sys2、display3、key4、timer5、iic6、ds13027、onewire8、uart9、ultrasound 四、源碼五、內存不夠 一、工程結構 與省賽模板相比…

C與指針——常見庫函數

字符串 #include<stdlibs.h> int abs(int); long labs(long); int rand(void);//0-RAND_MAX //字符串轉值 int atoi(const char*); long atol(const char*); float atof(const char*);數學\排序 #include<math.h> \\常見三角&#xff0c;sqrt(); exp(); double p…

數學復習筆記 2

前言 朋友和我討論了一個二重積分題&#xff0c;非常有意思。內容非常細致。整理如下&#xff1a; 二重積分 題目來源是 1000 上面的 16 題&#xff0c;積分區域是一個偏心圓&#xff0c;偏心圓的圓心在 y 軸上面&#xff0c;偏心圓是關于 y 軸對稱的&#xff0c;可以看關于…

Javaweb項目--Mybatis,導入com.mysql.cj.jdbc.Driver時報錯,Cannot resolve class ‘Driver‘

目錄 問題解決方法結果 問題 在項目java文件下&#xff0c;包文件下的application.properties文件中&#xff0c;項目目錄如下&#xff1a; 報錯信息如下&#xff1a; 解決方法 在pom.xml文件中增加此依賴 結果 報錯信息消失

分布式-redisson

分布式鎖redisson 加鎖流程緩存相關問題 加鎖流程 redisson底層通過lua腳本實現加鎖的原子性lock動作包含&#xff1a;加鎖、設置超時時間、鎖續命未獲取到鎖的線程通過獲取信號量許可等待&#xff0c;所釋放后釋放信號量通知等待線程 緩存相關問題 緩存失效&#xff08;擊穿…

Java基礎學完,繼續深耕(0505)Linux 常用命令

昨天休息了一天&#xff0c;沒有寫csdn 昨天和今天把Linux大概學了一下。總結一下常用命令&#xff0c;總結的不全。 Linux目錄結構 / 是所有目錄的頂點 目錄結構像一顆倒掛的樹 注意&#xff1a;/itheima 是絕對路徑&#xff0c;是指根目錄 / 下的itheima目錄 itheima…

【AI論文】Sadeed:通過小型語言模型推進阿拉伯語變音

摘要&#xff1a;由于語言的形態豐富&#xff0c;阿拉伯語文本的變音符號仍然是自然語言處理中一個持續的挑戰。 在本文中&#xff0c;我們介紹了一種基于微調解碼器語言模型的新方法Sadeed&#xff0c;該方法改編自Kuwain 1.5B Hennara等人[2025]的模型&#xff0c;該模型最初…

學習海康VisionMaster之亮度測量

一&#xff1a;進一步學習了 今天學習下VisionMaster中的亮度測量&#xff1a;這個和前面學習的都不一樣了&#xff0c;這個是測量ROI區域內的平均亮度等 1&#xff1a;什么是亮度測量&#xff1f; 我們工業上用的相機里面有一個感光芯片&#xff08;CCD/CMOS&#xff09;&…

學習路線(python)

Python從初級到專家的學習路線# 初級階段 (1-3個月)基礎語法數據結構文件操作推薦資源 中級階段 (3-6個月)面向對象編程常用模塊錯誤處理進階特性推薦資源 高級階段 (6-12個月)并發編程性能優化元編程設計模式推薦資源 專業方向 (選擇1-2個方向深入)Web開發數據分析/科學計算機…

svn文件提交失敗

這里寫自定義目錄標題 1報錯項目2.解決辦法1.安裝sqlite3.exe 數據庫2.sqlite3.exe放到svn 項目的主目錄下&#xff0c;和.svn目錄同級下, 可以直接在數據庫目錄下執行cmd命令。3.在當前目錄下 cmd 運行命令 4.最后再項目的文件夾下&#xff0c;看是否可以 clean up了。--成功&…

調試——GDB、日志

調試——GDB、日志 1. gdb常用指令2. 如何生成core文件并調試&#xff1f;3. 如何調試正在運行的程序4. 調試多進程程序5. 調試多線程程序6. log日志 gcc編譯器可以幫我們發現語法錯誤&#xff0c;但是對業務邏輯錯誤卻無能為力。當我們想找出邏輯錯誤時&#xff0c;就需要調試…

redis----通用命令

文章目錄 前言一、運行redis二、help [command]三、通用命令 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 學習一些通用命令 以下操作在windows中演示 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、運行redis 我們先c…

CatBoost算法原理及Python實現

一、概述 CatBoost 是在傳統GBDT基礎上改進和優化的一種算法&#xff0c;由俄羅斯 Yandex 公司開發&#xff0c;于2017 年開源&#xff0c;在處理類別型特征和防止過擬合方面有獨特優勢。 在實際數據中&#xff0c;存在大量的類別型特征&#xff0c;如性別、顏色、類別等&#…

五一假期作業

sub_process.c #include <stdio.h> // 標準輸入輸出庫 #include <pthread.h> // POSIX線程庫 #include <sys/ipc.h> // IPC基礎定義&#xff08;如消息隊列/共享內存&#xff09; #include <sys/msg.h> // 消息隊列操作相關…