upload-labs靶場通關詳解:第20關 /.繞過

一、分析源代碼

// 初始化上傳狀態標記,默認為false,即文件未上傳
$is_upload = false;
// 初始化消息變量,用于存儲錯誤信息
$msg = null;// 檢查是否通過POST方式提交了表單(點擊上傳按鈕)
if (isset($_POST['submit'])) {// 檢查上傳目錄是否存在if (file_exists(UPLOAD_PATH)) {// 定義禁止上傳的文件擴展名列表(主要是可執行腳本類型)$deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");// 從表單獲取用戶指定的保存文件名$file_name = $_POST['save_name'];// 提取文件擴展名(用于類型驗證)$file_ext = pathinfo($file_name,PATHINFO_EXTENSION);// 檢查文件擴展名是否不在禁止列表中if(!in_array($file_ext,$deny_ext)) {// 獲取上傳文件的臨時存儲路徑$temp_file = $_FILES['upload_file']['tmp_name'];// 構造目標存儲路徑(上傳目錄 + 文件名)$img_path = UPLOAD_PATH . '/' .$file_name;// 將臨時文件移動到指定目標路徑if (move_uploaded_file($temp_file, $img_path)) { // 移動成功,標記上傳狀態為成功$is_upload = true;}else{// 移動失敗,設置錯誤消息$msg = '上傳出錯!';}}else{// 文件擴展名被禁止時的錯誤消息$msg = '禁止保存為該類型文件!';}} else {// 上傳目錄不存在時的錯誤消息$msg = UPLOAD_PATH . '文件夾不存在,請手工創建!';}
}

簡單概括就是,用戶上傳一個文件并指定保存文件的名稱,再從保存文件的名稱中提取擴展名進行類型驗證,通過驗證則移動目錄。

二、解題思路

這關代碼中兩個重要的函數是pathinfo()函數和move_uploaded_file()函數。

pathinfo()是PHP內置函數,作用是提取文件的目錄名,擴展名,文件名等部分,這一關是提取擴展名,而擴展名是通過提取文件名最后一個點(.)之后的部分。

move_uploaded_file()函數的作用是移動文件路徑,在處理過程中,會自動解析并移除相對路徑符號(如 /.、/..),將路徑轉換為絕對路徑形式。

再看本關判斷流程,pathinfo()函數提取擴展名驗證通過后,交給move_uploaded_file()函數轉移路徑。

假設攻擊者將文件名修改為xx.php/.這種形式,pathinfo()函數提取最后一個點(.)之后的部分為空,則繞過了黑名單的驗證,轉交下一步處理,而move_uploaded_file()函數又會將“/.”當作相對路徑移除,最后文件就保存為了xx.php。

另外,這里的代碼只有黑名單驗證,用大小寫,空格,點號也可以繞過上傳,參考6-9關。

三、解題步驟

1.上傳木馬,bp抓包,將保存名稱改為“xx.php/.”。

2.文件成功繞過上傳,被保存為xx.php。

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

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

相關文章

企業用云狀態評估

云部署形態及其策略規劃成熟度 單云部署: 主要業務負載運行在單一公有云或私有云上 多云/混合云部署 —有清晰戰略規劃與實施: 業務負載運行在多個云(公有云或混合云)上,并且企業擁有清晰的多云/混合云戰略規劃&#x…

STM32G473串口通信-USART/UART配置和清除串口寄存器狀態的注意事項

USART和UART配置的區別 如果USART使用的是異步通信,那么UART與USART配置基本相同。 USART配置如下:UART配置如下:如果USART使用的是同步通信,那么UART配置就有差異。首先通信雙方都是使用USART的同步通信,一個主機,一個…

Debezium:一款基于CDC的開源數據同步工具

Debezium 是由 Red Hat 開源的一種基于變更數據捕獲(CDC) 的分布式平臺,專為實時捕獲和傳播數據庫的變更事件而設計。Debezium 常見的使用場景包括: 實時數據集成:將數據庫變更同步到數據倉庫或數據湖,支撐…

從面向對象編程語言PHP轉到Go時的一些疑惑?

前言 1、php中面向對象編程時 與 Go中的區別? 2、php中最常使用laravel框架,不用過多關注依賴注入和反射,在go中又該如何使用呢?是 舍棄? 本文是一個系統化梳理,幫助從 語言哲學 → 依賴注入在 Go 的現狀 →…

Vue3中使用konva插件動態制作海報以及可在畫布上隨意移動位置

1、下載konva插件 官網地址 npm install vue-konva konva --save2、在主文件中引入,如main.js import VueKonva from vue-konva; app.use(VueKonva);3、組件內使用,我現在的布局是左側是畫布,右側是相關設置(顏色、標題等&#…

政安晨【開源人工智能硬件】【ESP樂鑫篇】 —— 在macOS上部署工具開發環境(小資的非開發者用蘋果系統也可以玩樂鑫)

政安晨的個人主頁:政安晨 歡迎 👍點贊?評論?收藏 希望政安晨的博客能夠對您有所裨益,如有不足之處,歡迎在評論區提出指正! 前言 開源人工智能硬件會給你帶來無限可能,玩開源硬件,環境和工具少…

Vue3 學習教程,從入門到精通,vue3學習中的JavaScript ES6 特性詳解與案例(5)

vue3學習中的JavaScript ES6 特性詳解與案例 ES6(ECMAScript 2015)是 JavaScript 的一個重要版本,引入了許多新特性,極大地提升了語言的表達能力和開發效率。本文將詳細介紹 ES6 的主要特性,包括 let 和 const 命令、變…

深度學習模型1:理解LSTM和BiLSTM

深度學習模型1:理解LSTM和BiLSTM 因為最近科研復現論文中需要了解單向LSTM和雙向LSTM,所以就學習了一下LSTM的基本原理,下面孬孬帶著大家一起學習一下,感謝大家的一鍵三連 一、RNN 因為談到LSTM,就必不可少的會考慮RNN…

[論文閱讀] 軟件工程 | 一篇關于開源許可證管理的深度綜述

關于開源許可證管理的深度綜述 論文標題:Open Source, Hidden Costs: A Systematic Literature Review on OSS License ManagementarXiv:2507.05270 Open Source, Hidden Costs: A Systematic Literature Review on OSS License Management Boyuan Li, Chengwei Liu…

Qt懸浮動態

粉絲懸浮動態,及抽獎程序#include "masklabel.h"MaskLabel::MaskLabel(int pos_x,QString fans_name,QWidget*parent):QLabel(parent) {this->setAlignment(Qt::AlignHCenter);//設置字體居中this->setStyleSheet("color:white;font-size:20px…

深入拆解Spring思想:DI(依賴注入)

在簡單了解IoC與DI中我們已經了解了DI的基本操作,接下來我們來詳解DI。(IoC詳解請看這里)我們已經知道DI是“你給我,我不用自己創建”的原則。現在我們來看看Spring是如何實現“給”這個動作的,也就是依賴注入的幾種方式。 Spring主要提供了…

Arcgis連接HGDB報錯

文章目錄環境癥狀問題原因解決方案環境 系統平臺:Linux x86-64 Red Hat Enterprise Linux 7 版本:6.0 癥狀 Arcgis連接HGDB報錯: 無法連接到數據庫服務器來檢索數據庫列表;請檢查服務器名稱、用戶名和密碼信息,然后…

Android 應用常見安全問題

背景:OWASP MASVS(Mobile Application Security Verification Standard 移動應用安全驗證標準)是移動應用安全的行業標準。 一、MASVS-STORAGE:存儲 1.1 不當暴露FileProvider目錄 配置不當的 FileProvider 會無意中將文件和目錄暴露給攻擊者…

Netty的內存池機制怎樣設計的?

大家好,我是鋒哥。今天分享關于【Netty的內存池機制怎樣設計的?】面試題。希望對大家有幫助; Netty的內存池機制怎樣設計的? 超硬核AI學習資料,現在永久免費了! Netty的內存池機制是為了提高高并發環境下的內存分配與回收效率…

Python 項目快速部署到 Linux 服務器基礎教程

Linux的開源特性和強大的命令行工具使得部署流程高度自動化,可重復性強。本文將詳細介紹如何從零開始快速部署Python項目到Linux服務器。 Linux系統因其穩定性、安全性和性能優化,成為Python項目部署的首選平臺。無論是使用flask構建Web應用、FastAPI創…

SQL Server通過CLR連接InfluxDB實現異構數據關聯查詢技術指南

一、背景與需求場景 在工業物聯網和金融監控場景中,實時時序數據(InfluxDB)需與業務元數據(SQL Server)聯合分析: 工業場景:設備傳感器每秒采集溫度、振動數據(InfluxDB),需關聯工單狀態、設備型號(SQL Server)金融場景:交易流水時序數據(每秒萬條)需實時匹配客…

機器學習詳解

## 深入解析機器學習:核心概念、方法與未來趨勢機器學習(Machine Learning, ML)作為人工智能的核心分支,正深刻重塑著我們的世界。本文將系統介紹機器學習的基本概念、主要方法、實際應用及未來挑戰,為您提供全面的技術…

汽車間接式網絡管理的概念

在汽車網絡管理中,直接式和間接式管理是兩種用于協調車載電子控制單元(ECUs)之間通信與行為的機制。它們主要用于實現車輛內部不同節點之間的協同工作,特別是在涉及網絡喚醒、休眠、狀態同步等場景中。### 直接式管理直接式網絡管…

npm : 無法加載文件 D:\Node\npm.ps1,因為在此系統上禁止運行腳本。

npm : 無法加載文件 D:\Node\npm.ps1,因為在此系統上禁止運行腳本。 安裝高版本的node.js,可能會導致這個問題, 腳本的權限被限制了,需要你設置用戶權限。 get-ExecutionPolicy set-ExecutionPolicy -Scope CurrentUser remotesig…

搜索算法講解

搜索算法講解 深度優先搜索-DFS P1219 [USACO1.5] 八皇后 Checker Challenge 一個如下的 666 \times 666 的跳棋棋盤,有六個棋子被放置在棋盤上,使得每行、每列有且只有一個,每條對角線(包括兩條主對角線的所有平行線&#xff…