upload-labs通關筆記-第5關 文件上傳之.ini繞過

目錄

一、ini文件繞過原理

二、源碼審計

三、滲透實戰

1、查看提示

2、制作.user.ini文件

(1)首先創建一個文本文件

(2)保存文件名為.user.ini

2、制作jpg后綴腳本

(1)創建一個文本文件

(2)保存為文件名pass5.jpg

3、上傳ini與jpg文件

(1)準備好待上傳文件

(2)打開upload靶場第五關

?(3)上傳ini與jpg文件

4、訪問readme.php


本文通過《upload-labs靶場通關筆記系列》來進行upload-labs靶場的滲透實戰,本文講解upload-labs靶場第四關文件.ini滲透實戰。

一、ini文件繞過原理

在 PHP 環境中,ini文件可以用于配置 PHP 的運行環境。.user.ini 是 PHP 中用于特定目錄配置的特殊文件 ,類似 Apache 的.htaccess 文件,主要作用如下所示。

  • 自定義配置:允許非管理員用戶為特定目錄定義 PHP 配置指令,這些指令在該目錄及其子目錄中的 PHP 腳本執行時生效。比如可修改 upload_max_filesize 調整上傳文件大小限制、修改 memory_limit 改變腳本可用內存 ,而不影響整個服務器配置。
  • 文件包含:借助配置項 auto_prepend_file(在執行 PHP 文件前自動包含指定文件)和 auto_append_file(在執行 PHP 文件后自動包含指定文件) ,可實現惡意代碼注入或后門構造。攻擊者上傳惡意.user.ini 文件,指定包含惡意 PHP 代碼文件,就能在用戶訪問目錄下 PHP 文件時執行惡意代碼。

? ?在文件上傳關卡,具體利用方法如下所示。

  • 編寫.user.ini 文件:創建.user.ini,寫入如下內容,意思是讓服務器在每個 PHP 請求前自動包含名為pass5.jpg的文件。
auto_prepend_file = "pass5.jpg"
  • 準備pass5.jpg的shell文件:創建pass5.jpg,內容為獲取服務器php信息的PHP 代碼,具體如下所示。
<?php
phpinfo();
?>
  • 上傳文件:當該關卡允許.ini和jpg后綴上傳時,嘗試將.user.ini 和pass5.jpg上傳到服務器指定目錄。
  • 觸發執行:上傳成功后,訪問目錄下可執行的 PHP 文件(如關卡中提示的 readme.php ),服務器會根據.user.ini 配置,自動包含并執行pass5.jpg中的惡意代碼。

二、源碼審計

接下來對upload-labs 第 5 關的源碼進行審計,如下為已經進行詳細注釋版的代碼,很明顯這段代碼也是黑名單過濾來實現進行安全檢查的。雖然包含多種變體(".php", ".php5", ".php4", ".php3", ".php2", ".php1", ".html", ".htm", ".phtml", ".pht", ".pHp", ".pHp5", ".pHp4", ".pHp3", ".pHp2", ".pHp1", ".Html", ".Htm", ".pHtml", ".jsp", ".jspa", ".jspx", ".jsw", ".jsv", ".jspf", ".jtml", ".jSp", ".jSpx", ".jSpa", ".jSw", ".jSv", ".jSpf", ".jHtml", ".asp", ".aspx", ".asa", ".asax", ".ascx", ".ashx", ".asmx", ".cer", ".aSp", ".aSpx", ".aSa", ".aSax", ".aScx", ".aShx", ".aSmx", ".cEr", ".sWf", ".swf", ".htaccess"),與第四關的區別是將“ini”變為了“htaccess”,所以很明顯這一關卡遺漏新的危險擴展名(如.ini等),這也是我們滲透這一關卡的關鍵。

<?php
// 初始化上傳狀態變量
$is_upload = false;  // 布爾值,標記文件是否上傳成功
$msg = null;         // 字符串,用于存儲上傳過程中的錯誤信息// 檢查是否通過POST方法提交了表單(submit按鈕被點擊)
if (isset($_POST['submit'])) {// 檢查上傳目錄是否存在if (file_exists(UPLOAD_PATH)) {// 定義禁止上傳的文件擴展名黑名單(包含各種變體)$deny_ext = array(// PHP相關擴展名及變體".php", ".php5", ".php4", ".php3", ".php2", ".pHp", ".pHp5", ".pHp4", ".pHp3", ".pHp2",// HTML相關擴展名及變體".html", ".htm", ".phtml", ".pht",".Html", ".Htm", ".pHtml",// JSP相關擴展名及變體".jsp", ".jspa", ".jspx", ".jsw", ".jsv", ".jspf", ".jtml",".jSp", ".jSpx", ".jSpa", ".jSw", ".jSv", ".jSpf", ".jHtml",// ASP相關擴展名及變體".asp", ".aspx", ".asa", ".asax", ".ascx", ".ashx", ".asmx", ".cer",".aSp", ".aSpx", ".aSa", ".aSax", ".aScx", ".aShx", ".aSmx", ".cEr",// 其他危險文件類型".sWf", ".swf",  // Flash文件".htaccess"      // Apache配置文件);// 獲取并處理上傳文件名$file_name = trim($_FILES['upload_file']['name']);  // 去除首尾空格$file_name = deldot($file_name);    // 刪除文件名末尾的點(防御file.php.攻擊)$file_ext = strrchr($file_name, '.');  // 獲取文件擴展名(從最后一個點開始)$file_ext = strtolower($file_ext);     // 統一轉換為小寫$file_ext = str_ireplace('::$DATA', '', $file_ext); // 去除NTFS備用數據流$file_ext = trim($file_ext);           // 去除擴展名首尾空格// 檢查文件擴展名是否在黑名單中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 . '文件夾不存在,請手工創建!';  // 上傳目錄不存在}
}
?>

三、滲透實戰

1、查看提示

進入靶場pass5,點擊右上角的提示,得知上傳目錄存在readme.php文件,如下圖所示。

2、制作.user.ini文件

(1)首先創建一個文本文件

創建文件并里面寫入,該配置文件的效果是在.user.ini相同的目錄下,所有的php文件都包含pass5.jpg這個文件。

auto_prepend_file=pass5.jpg

(2)保存文件名為.user.ini

將文件保存為.user.ini并將保存類型配置為所有文件

2、制作jpg后綴腳本

(1)創建一個文本文件

代碼內容如下所示:

<?php
phpinfo();
?>

(2)保存為文件名pass5.jpg

點擊文件另存為pass5.jpg,保存類型設置為所有文件。

3、上傳ini與jpg文件

(1)準備好待上傳文件

兩個所需要的文件就創建完畢,圖示如下。

(2)打開upload靶場第五關

http://127.0.0.1/upload-labs/Pass-05/index.php

?(3)上傳ini與jpg文件

如下所示,上傳user.ini與jpg文件,兩者均上傳成功。

4、訪問readme.php

根據本關提示,在上傳目錄下是有一個readme.php文件的,所以直接訪問url:http://127.0.0.1/upload-labs/upload/readme.php,如下所示,php版本號成功顯示,證明文件上傳成功。

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

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

相關文章

為什么 Linux 上默認沒有 host.docker.internal

在 Linux 環境中&#xff0c;host.docker.internal 是 Docker 為容器提供的一個特殊 DNS 名稱&#xff0c;用于指向宿主機的 IP 地址&#xff08;類似 macOS/Windows 中的行為&#xff09;。但這個功能在 Linux 上默認不啟用&#xff0c;需要手動配置才能使用。以下是詳細解釋和…

C++GO語言微服務和服務發現②

01 創建go-micro項目-查看生成的 proto文件 02 創建go-micro項目-查看生成的main文件和handler ## 創建 micro 服務 命令&#xff1a;micro new --type srv test66 框架默認自帶服務發現&#xff1a;mdns。 使用consul服務發現&#xff1a; 1. 初始consul服務發現&…

Redis--常見數據類型List列表

目錄 一、概念 二、命令 2.1 LPUSH 2.2 LPUSHX 2.3 RPUSH 2.4 RPUSHX 2.5 LRANGE 2.6 LPOP 2.7 RPOP 2.8 LINDEX 2.9 LINSERT 2.10 LLEN 2.11 阻塞版本命令 三、內部編碼 一、概念 列表類型是用來存儲多個有序的字符串&#xff0c;列表中的每個字符串稱為元素&…

QListWedget控件使用指南

QListWedget公共函數 函數簽名功能描述QListWidget(QWidget *parent nullptr)構造函數&#xff0c;創建一個QListWidget對象&#xff0c;可指定父部件&#xff08;默認為nullptr&#xff09;。virtual ~QListWidget()虛析構函數&#xff0c;釋放QListWidget對象及其資源。voi…

Seata源碼—1.Seata分布式事務的模式簡介

大綱 1.Seata分布式事務框架簡介 2.Seata AT模式實現分布式事務的機制 3.Seata AT模式下的寫隔離機制 4.Seata AT模式下的讀隔離機制 5.官網示例說明Seata AT模式的工作機制 6.Seata TCC模式的介紹以及與AT模式區別 7.Seata Saga模式的介紹 8.單服務多個庫的分布式事務…

【Qt】之音視頻編程2:QtAV的使用篇

QtAV 基本播放控制功能實現&#xff08;C & QML&#xff09; QtAV 提供了完整的播放控制 API&#xff0c;支持 播放、暫停、停止、快進快退、截屏 等功能。以下是具體實現方法&#xff1a; 1. C 控制方式 基本播放控制 #include <QtAV> #include <QtAV/AVPlaye…

歌詞滾動效果

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><!-- 設置標簽頁圖標 --><link rel"shortcut icon&…

基于大模型的TIA診療全流程智能決策系統技術方案

目錄 一、多模態數據融合與預處理系統1.1 數據接入模塊1.2 數據預處理偽代碼二、TIA智能預測模型系統2.1 模型訓練流程2.2 混合模型架構偽代碼三、術中智能監測系統3.1 實時監測流程3.2 實時預測偽代碼四、智能診療決策系統4.1 手術方案推薦流程4.2 麻醉方案生成偽代碼五、預后…

Java 日期解析與格式化:從標準格式到自然語言解析

使用 Java 搭配 Apache Commons Lang3 和 Natty 庫&#xff0c;實現靈活高效的日期解析與格式化。 一、背景 將不同格式的日期統一成一個格式。日期格式可能有以下幾種類型&#xff1a; 標準格式&#xff1a;2024-02-28、14/05/2022、2002年5月6日非英文月份縮寫&#xff1a;…

Room持久化庫:從零到一的全面解析與實戰

簡介 在Android開發中,Room作為官方推薦的數據庫持久化庫,提供了對SQLite的抽象層,使得數據庫操作更加安全、高效且易于維護。 Room通過注解處理器和編譯時驗證,顯著降低了數據庫操作的復雜度,同時支持響應式編程模式,使開發者能夠輕松實現數據變化的實時監聽。對于企業…

MySQL(6)如何刪除數據庫和表?

在 MySQL 中刪除數據庫和表是常見的管理操作。下面將詳細介紹如何使用 SQL 語句以及圖形化工具來刪除數據庫和表。 步驟一&#xff1a;連接 MySQL 服務器 首先&#xff0c;連接到 MySQL 服務器&#xff0c;可以使用命令行工具 mysql 或圖形化工具如 MySQL Workbench。 使用命…

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025

攜固態電池、新形態鋼殼疊片電池等產品 豪鵬科技將亮相CIBF 2025 來源&#xff1a; 電池百人會-電池網 豪鵬科技&#xff08;展位號:14W001&#xff09;將攜固態電池、新形態鋼殼疊片電池及高安全性鈉離子電池等前沿技術產品亮相CIBF 2025&#xff0c;憑借多年的技術積累和產…

React學習———useEffect和useLayoutEffect

useEffect useEffect是React的一個Hook&#xff0c;用于在函數組件中處理副作用。副作用包括數據獲取、訂閱、手動DOM操作以及其他需要再渲染后執行的操作 基本用法 useEffect(() > {// 副作用邏輯return () > {// 可選的清理函數} }, [依賴數組])第一個參數&#xff…

“天神之眼”計算平臺的算力設計(預計500-1000 TOPS)

關于比亞迪“天神之眼”計算平臺的算力設計&#xff08;預計500-1000 TOPS&#xff09;&#xff0c;其技術路徑和行業意義值得深入探討。以下從實現方式、技術挑戰和行業影響三個維度展開分析&#xff1a; 1. 多芯片互聯的技術實現路徑 &#xff08;1&#xff09;芯片選型方案…

FPGA: Xilinx Kintex 7實現PCIe接口

在Xilinx Kintex-7系列FPGA上實現PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;結合Vivado設計流程。以下是實現PCIe接口的詳細步驟和關鍵點&#xff0c;適…

ArcGIS Desktop使用入門(二)常用工具條——圖形

系列文章目錄 ArcGIS Desktop使用入門&#xff08;一&#xff09;軟件初認識 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——標準工具 ArcGIS Desktop使用入門&#xff08;二&#xff09;常用工具條——編輯器 ArcGIS Desktop使用入門&#xff08;二&#x…

JT/T 808 通訊協議及數據格式解析

文章目錄 一、引言二、協議數據幀結構三、消息頭結構&#xff08;Message Header&#xff09;四、常用消息類型&#xff08;Message ID&#xff09;五、典型消息體結構解析六、數據轉義規則七、校驗碼計算方法八、終端與平臺通信流程示意&#xff08;簡要&#xff09;九、平臺接…

Rust 輸出到命令行

Rust 輸出到命令行 引言 Rust 是一門系統編程語言&#xff0c;以其高性能、內存安全、并發支持和零成本抽象等特性而聞名。在開發過程中&#xff0c;將 Rust 程序的輸出傳遞到命令行是常見的需求。本文將詳細介紹 Rust 輸出到命令行的多種方法&#xff0c;幫助讀者掌握這一技…

從字符串轉換到矩陣快速冪:解決多次轉換后的長度問題

引言 在編程競賽和算法問題中&#xff0c;我們經常會遇到需要對字符串進行多次轉換的問題。本文將介紹一個有趣的問題&#xff1a;給定一個字符串和轉換規則&#xff0c;計算經過多次轉換后字符串的長度。由于直接模擬會導致性能問題&#xff0c;我們將使用矩陣快速冪來高效解…

Vue2 elementUI 二次封裝命令式表單彈框組件

需求&#xff1a;封裝一個表單彈框組件&#xff0c;彈框和表單是兩個組件&#xff0c;表單組件以插槽的形式動態傳入彈框組件中。 外部組件使用的方式如下&#xff1a; 直接上代碼&#xff1a; MyDialog.vue 彈框組件 <template><el-dialog:titletitle:visible.syn…