Webug4.0靶場通關筆記15- 第19關文件上傳(畸形文件)

目錄

?第19關 文件上傳(畸形文件)

1.打開靶場

2.源碼分析

(1)客戶端源碼

(2)服務器源碼

3.滲透實戰

(1)構造腳本

(2)雙寫繞過

(3)訪問腳本


本文通過《webug4.0靶場第19文件上傳之畸形文件》對客戶端前端和服務端的代碼進行審計,基于代碼審計來分析滲透思路并進行滲透實戰。

?第19關 文件上傳(畸形文件)

1.打開靶場

進入webug4.0靶場的第19關卡文件上傳(畸形文件),完整URL地址如下所示。

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

進入靶場后發現這是一個注冊賬號的頁面,包含文件上傳的功能,具體如下圖所示。?

2.源碼分析

(1)客戶端源碼

如下所示右鍵發現依舊存在客戶端繞過,在前端通過js腳本使用白名單校驗文件的后綴,具體如下所示。

(2)服務器源碼

如下所示,查看upload_file_3.php代碼,分析可知服務器端過濾了php關鍵字,可以通過雙寫法繞過。

<?php
// 引入公共配置文件,該文件可能包含了一些全局的常量、函數或配置信息
require_once "../../common/common.php";// 檢查會話中是否存在 'user' 變量
// 如果不存在,說明用戶未登錄,將用戶重定向到登錄頁面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 檢查上傳文件是否出現錯誤
// 如果存在錯誤,直接終止腳本執行
if ($_FILES['file']['error']) {die();
}// 檢查是否有文件上傳
if ($_FILES['file']) {// 將上傳文件的相關信息存儲在 $arr 數組中$arr = $_FILES['file'];// 獲取上傳文件的擴展名,并轉換為小寫// strrchr 函數用于返回文件名中從最后一個點開始的部分// trim 函數用于去除字符串首尾的空白字符$file_ext = trim(strtolower(strrchr($arr['name'], ".")));// 檢查擴展名中是否包含 'php'// 如果包含,則將 'php' 從擴展名中移除if (strstr($file_ext, "php")) {$file_ext = str_replace("php", "", $file_ext);}// 檢查目標上傳目錄中是否已經存在同名文件// TPMELATE 可能是一個定義在公共配置文件中的常量,表示模板目錄路徑if (file_exists(TPMELATE."/upload/".$arr['name'])) {// 如果文件已存在,彈出提示框告知用戶echo "<script>alert('該文件已經存在')</script>";} else {// 如果文件不存在,為上傳文件生成一個新的文件名// 使用 time() 函數生成一個時間戳,確保文件名的唯一性// iconv 函數用于將文件名從 UTF-8 編碼轉換為 gb2312 編碼$filename = iconv("UTF-8","gb2312",TPMELATE."/upload/".time().$file_ext);// 將上傳的臨時文件移動到指定的目標路徑move_uploaded_file($arr["tmp_name"], $filename);// 輸出上傳文件的完整路徑,并終止腳本執行echo $filename;die();}
}// 引入上傳文件的 HTML 頁面
require_once TPMELATE."/upload_file_1.html";

這段 PHP 代碼的主要功能是處理文件上傳操作,整個代碼的主要處理邏輯如下所示。

  • 登錄驗證:檢查用戶是否已登錄,如果未登錄則重定向到登錄頁面。

  • 錯誤檢查:檢查上傳文件是否出現錯誤,如果有錯誤則終止腳本。
  • 文件擴展名處理:獲取上傳文件的擴展名,并嘗試將字符串php替換為空(刪掉文件名中的php字符串),以防止上傳 PHP 腳本文件。
  • 文件存在性檢查:檢查目標上傳目錄中是否已經存在同名文件,如果存在則提示用戶。
  • 文件上傳:如果文件不存在,則為上傳文件生成一個新的文件名,并將臨時文件移動到指定的目標路徑。
  • 頁面引入:最后引入上傳文件的 HTML 頁面。

不過這段代碼存在文件上傳繞過的可能性,主要原因如下:

  • 擴展名過濾不嚴格:代碼只是簡單地將擴展名中的?php?字符串移除,而沒有對擴展名進行全面的白名單驗證。攻擊者可以通過構造特殊的擴展名,如?.pphph,在移除?php?后仍然保留?.php,從而可能滲透成功
  • 編碼轉換問題:使用?iconv?函數將文件名從 UTF-8 編碼轉換為 gb2312 編碼,可能會導致文件名被截斷或出現亂碼,攻擊者可以利用這一點繞過文件類型檢查。
  • 缺乏文件內容驗證:代碼只檢查了文件的擴展名,沒有對文件的實際內容進行驗證。攻擊者可以將惡意代碼嵌入到圖片或其他允許的文件類型中,形成圖片馬,從而繞過擴展名檢查。

3.滲透實戰

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

(1)構造腳本

將info.php修改為info.jpg,這樣的話可以繞過前端的檢查,如下所示。

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

(2)雙寫繞過

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

接下來將info.jpg改名為info.pphphp并點擊發送,如下所示。

根據上圖burpsuite工具中的response文件上傳路徑如下所示。

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

(3)訪問腳本

訪問上傳的腳本,URL地址如下所示。

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

如下所示雙寫繞過成功,獲取到了服務器的php版本信息。

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

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

相關文章

架構思維:構建高并發讀服務_熱點數據查詢的架構設計與性能調優

文章目錄 一、引言二、熱點查詢定義與場景三、主從復制——垂直擴容四、應用內前置緩存4.1 容量上限與淘汰策略4.2 延遲刷新&#xff1a;定期 vs. 實時4.3 逃逸流量控制4.4 熱點發現&#xff1a;被動 vs. 主動 五、降級與限流兜底六、前端&#xff0f;接入層其他應對七、模擬壓…

寶塔面板運行docker的jenkins

1.在寶塔面板裝docker&#xff0c;以及jenkins 2.ip:端口訪問jenkins 3.獲取密鑰&#xff08;點擊日志&#xff09; 4.配置容器內的jdk和maven環境&#xff08;直接把jdk和maven文件夾放到jenkins容器映射的data文件下&#xff09; 點擊容器-->管理-->數據存儲卷--.把相…

C語言 ——— 函數

目錄 函數是什么 庫函數 學習使用 strcpy 庫函數 自定義函數 寫一個函數能找出兩個整數中的最大值 寫一個函數交換兩個整型變量的內容 牛刀小試 寫一個函數判斷一個整數是否是素數 寫一個函數判斷某一年是否是閏年 寫一個函數&#xff0c;實現一個整型有序數組的二分…

筆記本電腦升級計劃(2017———2025)

ThinkPad T470 (2017) vs ThinkBook 16 (2025) 完整性能對比報告 一、核心硬件性能對比 1. CPU性能對比&#xff08;i5-7200U vs Ultra9-285H&#xff09; 參數i5-7200U (2017)Ultra9-285H (2025)提升百分比核心架構2核4線程 (Skylake)16核16線程 (6P8E2LPE)700%核心數制程工…

具身系列——PPO算法實現CartPole游戲(強化學習)

完整代碼參考&#xff1a; https://gitee.com/chencib/ailib/blob/master/rl/ppo_cartpole.py 執行結果&#xff1a; 部分訓練得分&#xff1a; (sd) D:\Dev\traditional_nn\feiai\test\rl>python ppo_cartpole_v2_succeed.py Ep: 0 | Reward: 23.0 | Running: 2…

Python項目源碼60:電影院選票系統1.0(tkinter)

1.功能特點&#xff1a;通常選票系統應該允許用戶選擇電影、場次、座位&#xff0c;然后顯示總價和生成票據。好的&#xff0c;我得先規劃一下界面布局。 首先&#xff0c;應該有一個電影選擇的列表&#xff0c;可能用下拉菜單Combobox來實現。然后場次時間&#xff0c;可能用…

【全隊項目】智能學術海報生成系統PosterGenius--圖片布局生成模型LayoutPrompt(2)

&#x1f308; 個人主頁&#xff1a;十二月的貓-CSDN博客 &#x1f525; 系列專欄&#xff1a; &#x1f3c0;大模型實戰訓練營_十二月的貓的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻擋不了春天的腳步&#xff0c;十二點的黑夜遮蔽不住黎明的曙光 目錄 1. 前…

Linux的時間同步服務器(附加詳細實驗案例)

一、計時方式的發展 1.古代計時方式? 公元前約 2000 年&#xff1a;古埃及人利用光線留下的影子計時&#xff0c;他們修建高聳的大型方尖碑&#xff0c;通過追蹤方尖碑影子的移動判斷時間&#xff0c;這是早期利用自然現象計時的典型方式 。?商朝時期&#xff1a;人們開發并…

【無需docker】mac本地部署dify

環境安裝準備 #安裝 postgresql13 brew install postgresql13 #使用zsh的在全局添加postgresql命令集 echo export PATH"/usr/local/opt/postgresql13/bin:$PATH" >> ~/.zshrc # 使得zsh的配置修改生效 source ~/.zshrc # 啟動postgresql brew services star…

(5)概述 QT 的元對象系統里的類的調用與聯系,及訪問接口

&#xff08;1&#xff09; QT 的元對象系統&#xff0c;這幾個字大家都知道&#xff0c;那么 QT 的元對象系統里都包含哪些內容呢&#xff0c;其訪問接口是如何呢&#xff1f; 從 QObject 類的實現里&#xff0c;從其數據成員里就可以看出來&#xff1a; QT 里父容器可以釋放其…

打包 Python 項目為 Windows 可執行文件:高效部署指南

Hypackpy 是一款由白月黑羽開發的 Python 項目打包工具&#xff0c;它與 PyInstaller 等傳統工具不同&#xff0c;通過直接打包解釋器環境和項目代碼&#xff0c;并允許開發者修改配置文件以排除不需要的內容&#xff0c;從而創建方便用戶一鍵運行的可執行程序。以下是使用 Hyp…

MySQL JOIN詳解:掌握數據關聯的核心技能

一、為什么需要JOIN&#xff1f; 在關系型數據庫中&#xff0c;數據通常被拆分到不同的表中以提高存儲效率。當我們需要從多個表中組合數據時&#xff0c;JOIN操作就成為了最關鍵的技能。通過本文&#xff0c;您將全面掌握MySQL中7種JOIN操作&#xff0c;并學會如何在實際場景中…

Kdump 收集器及使用方式

以下是 Linux 系統中 Kdump 轉儲收集器的詳細說明及其使用方法&#xff0c;涵蓋核心工具、配置方法及實際示例&#xff1a; 一、Kdump 收集器分類及作用 Kdump 的核心功能是通過 捕獲內核 生成內存轉儲文件&#xff08;vmcore&#xff09;&#xff0c;其核心收集器包括&#…

Error: error:0308010C:digital envelope routines::unsupported 高版本node啟動低版本項目運行報錯

我的問題就是高版本node啟動舊版本項目引起的問題&#xff0c;單獨在配置 package.json文件中配置并運行就可以&#xff0c;大概意思就是設置node的openssl "scripts": {"dev": "SET NODE_OPTIONS--openssl-legacy-provider && vue-cli-servi…

松下機器人快速入門指南(2025年更新版)

松下機器人快速入門指南&#xff08;2025年更新版&#xff09; 松下機器人以其高精度、穩定性和易用性在工業自動化領域廣泛應用。本文將從硬件配置、參數設置、手動操作、編程基礎到維護保養&#xff0c;全面講解松下機器人的快速入門方法&#xff0c;幫助新手快速掌握核心操…

【CISCO】Se2/0, Se3/0:串行口(Serial) 這里串口的2/0 和 3/0分別都是什么?

在 Cisco IOS 設備上&#xff0c;接口名稱通常遵循這樣一個格式&#xff1a; <類型><槽號>/<端口號>類型&#xff08;Type&#xff09;&#xff1a;表示接口的物理或邏輯類型&#xff0c;比如 Serial&#xff08;串行&#xff09;、FastEthernet、GigabitEt…

開源無人機地面站QGroundControl安卓界面美化與邏輯優化實戰

QGroundControl作為開源無人機地面站軟件,其安卓客戶端界面美化與邏輯優化是提升用戶體驗的重要工程。 通過Qt框架的界面重構和代碼邏輯優化,可以實現視覺升級與性能提升的雙重目標。本文將系統講解QGC安卓客戶端的二次開發全流程,包括開發環境搭建、界面視覺升級、多分辨率…

基于DDPG的自動駕駛小車繞圈任務

1.任務介紹 任務來源: DQN: Deep Q Learning &#xff5c;自動駕駛入門&#xff08;&#xff1f;&#xff09; &#xff5c;算法與實現 任務原始代碼: self-driving car 在上一篇使用了DQN算法完成自動駕駛小車繞圈任務之后&#xff0c;學習了DDPG算法&#xf…

緩存置換:用c++實現最近最少使用(LRU)算法

在計算機的世界里&#xff0c;緩存就像一個“快速倉庫”&#xff0c;它存儲著我們頻繁訪問的數據&#xff0c;大大提升了數據的讀取速度。但這個 “倉庫” 空間有限&#xff0c;當它被裝滿時&#xff0c;就得決定舍棄一些數據&#xff0c;為新數據騰出位置&#xff0c;這個決策…

【YOLO11改進】改進Conv、頸部網絡STFEN、以及引入PIOU用于小目標檢測!

改進后的整體網絡架構 改進一:RFD模塊(Conv) YOLOv11模型的跨步卷積下采樣雖然快速聚合了局部特征,并且實現了較高的計算效率,但其固有的信息壓縮機制會導致細粒度特征的不可逆丟失。針對特征保留與計算效率的平衡問題,本文采用RFD模塊替換跨步卷積下采樣模塊。RFD模塊通…