upload-labs靶場通關詳解:第11關

一、分析源代碼

$is_upload = false;
$msg = null;
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","ini");$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name);$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 = UPLOAD_PATH . '文件夾不存在,請手工創建!';}
}

這一關仍然是黑名單過濾,但是它的代碼和前幾關都不一樣,?它這里有一行核心代碼,就是

$file_name = str_ireplace($deny_ext,"", $file_name);

str_ireplace是 PHP 內置函數,用于執行不區分大小寫的字符串替換。

語法:str_ireplace(要查找的數組, 替換值, 輸入字符串)

這行代碼的執行邏輯就是:

1.遍歷$deny_ext數組中的每個擴展名;

2.在$file_name中查找匹配項(不區分大小寫);

3.將所有匹配的擴展名替換為空字符串(即刪除)。

典型處理示例

原始文件名處理后文件名說明
shell.phpshell.直接移除.php擴展名
shell.php.jpgshell.jpg僅移除第一個擴展名
shell.php5shell.移除 PHP 舊版本擴展名
SHELL.PHPshell.大小寫不敏感替換
.htaccess.移除服務器配置文件
exploit.jsp.asaxexploit.同時移除多個危險擴展名

二、解題思路

現在我們知道它可以刪除黑名單中的擴展名,那么這關的代碼是否存在邏輯漏洞呢?聯想第10關結合繞過的方式,是否可以再嘗試多次繞過呢?如果我上傳文件的后綴名為pphphp,代碼從第一位字母p開始讀取,讀到2-4位的時候發現這三位字母是php,于是將它替換成空白字符(刪除),這看起來沒什么問題,代碼執行下一步,構建路徑上傳文件。但是,這里的pphphp在php被刪除后,后綴只剩下了php,然后被上傳,從而構成了文件繞過,這就是雙寫繞過。

三、解題步驟

1.上傳666.php并抓包,修改后綴為pphphp。

2.放行后顯示文件上傳成功,被保存為666.php。

3.解析測試。

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

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

相關文章

L1-7 最短字母串【保姆級詳細講解】

請你設計一個程序,該程序接受起始字母和目標字母作為輸入,通過在字母表中向前或向后移動來計算兩個給定字母之間的最短路徑。然后,程序會沿著最短路徑打印出從起始字母到目標字母的所有字母。例如,如果輸入“c”和“k”作為起始字…

項目QT+ffmpeg+rtsp(三)——延遲巨低的項目+雙屏顯示

文章目錄 前言雙屏顯示widget.cppwidget.h前言 對于復現情況,分為兩種情況 第一種,對于我而言,是直接解壓后,就能直接運行了 第二種,對于師兄而言,需要你構建debug后,會產生這個文件夾,執行的時候,地址應該在這,我猜的,這里面沒有dll,exe程序就找不到dll這些庫,你…

ansible進階06

復雜的循環結構 循環基礎 [studentworktest myansible]$ cat users.yml --- - name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{123456|password_hash(sha512)}}"state: presentloop:- zhangsan- li…

Go 模塊版本管理

Go 模塊版本管理指南 1、創建帶注釋的 Git 標簽 基本命令 # 創建帶注釋的標簽 git tag -a v1.0.0 -m "Release version 1.0.0 - initial stable release" -a:創建帶注釋的標簽 -m:添加標簽注釋信息 # 推送標簽到遠程倉庫 git push origin v…

Java—— IO流 第一期

什么是IO流 存儲和讀取數據的解決方案 I:input O:output 流:像水流一樣傳輸數據 IO流的作用 用于讀寫數據(本地文件,網絡) IO流的分類 按照流向分類 輸出流:程序 --> 文件 輸入流:文件 --> 程序 按照…

物聯網安全技術的最新進展與挑戰

隨著物聯網(IoT)技術的飛速發展,越來越多的設備被連接到互聯網,從智能家居設備到工業控制系統,物聯網正在深刻改變我們的生活和生產方式。然而,物聯網的安全問題也日益凸顯,成為制約其發展的關鍵…

【深度學習基礎】損失函數與優化算法詳解:從理論到實踐

【深度學習基礎】損失函數與優化算法詳解:從理論到實踐 一、引言 1. 損失函數與優化算法在深度學習中的核心作用 在深度學習中,模型訓練的本質是通過不斷調整參數,使模型輸出盡可能接近真實值。這一過程的核心驅動力是損失函數(…

mvc-review

review: 1.Servlet生命周期中初始化方法:init(),init(config) public void init(ServletConfig config) throws ServletException { this.config config; this.init(); } 因此,如果我們需要…

YouTube視頻字幕轉成文章算重復內容嗎?

很多創作者誤以為「自己說的話不算抄襲」,卻不知道YouTube自動生成的字幕早已被搜索引擎存檔。 去年就有案例:某美食博主將教程視頻字幕轉為圖文,結果原創度檢測僅42%,導致頁面權重暴跌。 本文揭秘5個實操技巧:從刪除…

R語言數據可視化

R note book 文檔–輸出html格式文檔,plotly不能生成PDF文件 --- title: "R語言數據可視化" output: html_notebook ---在R語言中進行數據可視化是數據分析和呈現的重要環節,R提供了多種強大的繪圖系統和工具。以下是常見的數據可視化方法和示…

Axure難點解決分享:垂直菜單展開與收回(4大核心問題與專家級解決方案)

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝!如有幫助請訂閱專欄! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:垂直菜單展開與收回 主要內容:超長菜單實現、展開與收回bug解釋、Axure9版本限制等問題解…

云原生攻防2(Docker基礎補充)

Docker基礎入門 容器介紹 Docker是什么 Docker是基于Linux內核實現,最早是采用了 LXC技術,后來Docker自己研發了runc技術運行容器。 它基于Google Go語言實現,采用客戶端/服務端架構,使用API來管理和創建容器。 虛擬機 VS Docker Namespace 內核命名空間屬于容器非常核…

Spring Boot 攔截器:解鎖5大實用場景

一、Spring Boot中攔截器是什么 在Spring Boot中,攔截器(Interceptor)是一種基于AOP(面向切面編程)思想的組件,用于在請求處理前后插入自定義邏輯,實現權限校驗、日志記錄、性能監控等非業務功能…

Vue百日學習計劃Day24-28天詳細計劃-Gemini版

總目標: 在 Day 24-27 熟練掌握 Vue.js 的各種模板語法,包括文本插值、屬性綁定、條件渲染、列表渲染、事件處理和表單綁定,并能結合使用修飾符。 所需資源: Vue 3 官方文檔 (模板語法): https://cn.vuejs.org/guide/essentials/template-syntax.htmlVu…

分布式微服務系統架構第125集:AI大模型

加群聯系作者vx:xiaoda0423 倉庫地址:https://webvueblog.github.io/JavaPlusDoc/ https://1024bat.cn/ 一、user 表(用戶表) sql 復制編輯 create table if not exists user (id bigint auto_increment comment id pri…

機器學習 Day16 聚類算法 ,數據降維

聚類算法 1.簡介 1.1 聚類概念 無監督學習:聚類是一種無監督學習算法,不需要預先標記的訓練數據 相似性分組:根據樣本之間的相似性自動將樣本歸到不同類別 相似度度量:常用歐式距離作為相似度計算方法 1.2 聚類vs分類 聚類&…

【Linux】第十八章 調優系統性能

1. 系統管理員可以使用哪個命令來更改tuned守護進程的設置? tuned 的調優配置集存儲在 /usr/lib/tuned(默認) 和 /etc/tuned(自定義 或當前有效)目錄下。每個配置集都有一個單獨的目錄,目錄中包含 tuned.c…

【JVS更新日志】企業文檔AI助手上線、低代碼、智能BI、智能APS、AI助手5.14更新說明!

項目介紹 JVS是企業級數字化服務構建的基礎腳手架,主要解決企業信息化項目交付難、實施效率低、開發成本高的問題,采用微服務配置化的方式,提供了低代碼數據分析物聯網的核心能力產品,并構建了協同辦公、企業常用的管理工具等&…

ollama調用千問2.5-vl視頻圖片UI界面小程序分享

1、問題描述: ollama調用千問2.5-vl視頻圖片內容,通常用命令行工具不方便,于是做了一個python UI界面與大家分享。需要提前安裝ollama,并下載千問qwen2.5vl:7b 模型,在ollama官網即可下載。 (8G-6G 顯卡可…

Web 架構之會話保持深度解析

文章目錄 一、引言二、會話保持的基本概念2.1 什么是會話2.2 為什么需要會話保持 三、會話保持的常見實現方式3.1 基于客戶端的會話保持3.1.1 Cookie 方式3.1.2 URL 重寫方式 3.2 基于服務器端的會話保持3.2.1 負載均衡器會話保持3.2.2 會話共享 四、會話保持可能遇到的問題及解…