Webug4.0靶場通關筆記14- 第18關 文件上傳之Nginx解析缺陷

目錄

第18關 滲透實戰

1.打開靶場

2.構造php腳本

3.源碼分析

(1)客戶端源碼

(2)服務的源碼

4.Nginx解析法滲透

(1)缺陷原因

(2)缺陷條件

(3)構造腳本

(4)上傳腳本

(5)訪問腳本

5.生僻字繞過滲透實戰

(1)制作腳本

(2)上傳圖片并bp抓包

(3)生僻字繞過

(4)訪問腳本


本文通過《webug4.0靶場第18文件上傳之前端攔截》來進行滲透實戰。Nginx解析缺陷是指在 Nginx 服務器配置或解析過程中存在的一些安全缺陷,可能導致服務器受到攻擊,本文通過2種不同的方法實現滲透測試。

第18關 滲透實戰

1.打開靶場

打開webug4.0靶場的第18關卡文件上傳之解析關卡,具體如下所示。

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

2.構造php腳本

構造info.php目的是獲取服務器的php信息,具體如下所示。

<?php phpinfo();?>

隨手上傳php腳本,提示不允許上傳該格式類型,說明第18關卡同樣有文件類型檢查。

3.源碼分析

(1)客戶端源碼

如下客戶端存在js前端驗證的問題,而且使用的白名單繞過要求文件的格式屬于圖片,具體如下所示。

(2)服務的源碼

接下來我們來查看服務端是否進行文件格式過濾,打開upload_file_2.php文件,分析可知存在后綴的白名單過濾,僅允許上傳jpg和png以及gif的文件,注釋后的源代碼如下所示。

<?php
// 引入公共配置文件,通常這里面包含一些全局的函數、常量、配置信息等
// 路徑是相對于當前文件上兩級目錄下的 common 文件夾中的 common.php 文件
require_once "../../common/common.php";// 檢查會話中是否存在 'user' 變量,如果不存在,意味著用戶未登錄
// 使用 header 函數將用戶重定向到登錄頁面
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}// 定義一個允許上傳的文件擴展名數組,這里只允許上傳 .jpg、.png 和 .gif 格式的圖片文件
$filter = array(".jpg", '.png', '.gif');// 檢查上傳文件是否出現錯誤,$_FILES['file']['error'] 會返回上傳文件的錯誤碼
// 如果存在錯誤,直接終止腳本執行
if ($_FILES['file']['error']) {die();
}// 檢查是否有文件被上傳
if ($_FILES['file']) {// 將上傳文件的相關信息(如文件名、臨時文件路徑、錯誤碼等)賦值給變量 $arr$arr = $_FILES['file'];// 獲取上傳文件的擴展名,步驟如下:// strrchr($arr['name'], ".") 從文件名中找到最后一個 '.' 及其后面的部分,即擴展名// strtolower() 將擴展名轉換為小寫,以忽略大小寫的影響// trim() 去除擴展名前后可能存在的空格$file_ext = trim(strtolower(strrchr($arr['name'], ".")));// 檢查獲取到的文件擴展名是否不在允許的擴展名數組 $filter 中// 如果不在,意味著文件類型不被允許if (!in_array($file_ext, $filter)){// 彈出一個警告框提示用戶 "error"echo "<script>alert('error')</script>";// 終止腳本執行die();}// 檢查目標上傳目錄中是否已經存在同名文件// 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($arr["tmp_name"],$filename);// 輸出文件的完整路徑,并終止腳本執行echo $filename;die();}
}// 引入上傳文件頁面的 HTML 文件,通常該文件包含文件上傳表單
require_once TPMELATE."/upload_file_1.html";

這段 PHP 代碼實現了一個帶有登錄驗證和文件類型過濾的文件上傳功能。首先檢查用戶是否登錄,若未登錄則重定向到登錄頁面。接著定義了允許上傳的文件擴展名數組,當有文件上傳時,會檢查文件是否有上傳錯誤,若有則終止腳本。然后獲取文件擴展名,檢查其是否在允許的擴展名列表中,若不在則提示錯誤并終止。之后檢查目標目錄是否已存在同名文件,若不存在則將文件從臨時目錄移動到目標上傳目錄,并輸出文件完整路徑;若存在則提示用戶。最后引入文件上傳頁面的 HTML 文件。?

4.Nginx解析法滲透

(1)Nginx解析缺陷原理

本文利用Nginx文件擴展名解析缺陷來進行滲透,原理是Nginx 在處理文件請求時,可能會根據文件擴展名來確定如何解析和處理該文件。如果配置不當,可能會導致 Nginx 將某些本應被視為靜態文件的文件,按照腳本文件的方式進行解析,從而執行惡意代碼。

當php.ini中 cgi.fix_pathinfo = 1配置開啟時,會產生解析缺陷。

當訪問http://x.x.x.x:8000/parse/index.jpg/x.php時,如果x.php不存在,PHP會遞歸向前解析,如果index.jpg存在就會把index.jpg當做PHP解析,造成了解析缺陷。

(2)缺陷條件

1) cgi.fix_pathinfo = 1

2)IIS 7.0/IIS 7.5/Nginx <0.8.03

3) phpStudy <= 8.1.0.7 (Windows版)

這里要強調,滲透環境要使用較低版本的phpstudy才可以復現此bug,其他版本的未必有此缺陷。

(3)構造腳本

?將info.php復制一份,并重命名為info18.jpg。

(4)上傳腳本

搭建好Nginx滲透環境后,上傳info18.jpg,如下所示。

如上所示點擊上傳按鈕后,可知圖片上傳成功,上傳后的腳本路徑如下所示。

http://192.168.71.1/webug4/template/upload/info18.jpg

(5)訪問腳本

接下來利用Nginx解析法構造腳本的訪問路徑,具體如下所示。

http://192.168.71.1/webug4/template/upload/info18.jpg/x.php

由于x.php不存在,PHP會遞歸向前解析,如果info18.jpg存在就會把info18.jpg當做PHP解析,造成了解析缺陷,從而成功獲取到服務器的php相關信息,具體如下所示。

5.生僻字繞過滲透實戰

(1)制作腳本

將info.php復制一份,并重命名為info18.jpg。

(2)上傳圖片并bp抓包

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

(3)生僻字繞過

使用生僻字來繞過,具體如下所示。

將文件名進行修改,添加生僻字后文件名如下所示。

info18.php龘.jpg

?修改完畢后點擊發送,如下所示,滲透成功。

(4)訪問腳本

根據上一步中的腳本上傳地址來訪問腳本地址,如下所示滲透成功。

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

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

相關文章

【QT】QT中的網絡編程(TCP 和 UDP通信)

QT中的網絡編程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服務器流程&#xff1a;1.2.1.1 示例代碼1.2.1.2 現象 1.2.2 客戶端流程&#xff1a;1.2.2.1 示例代碼1.2.2.2 現象&#xff1a; …

架構思維:使用懶加載架構實現高性能讀服務

文章目錄 一、引言二、讀服務的功能性需求三、兩大基本設計原則1. 架構盡量不要分層2. 代碼盡可能簡單 四、實戰方案&#xff1a;懶加載架構及其四大挑戰五、改進思路六、總結與思考題 一、引言 在任何后臺系統設計中&#xff0c;「讀多寫少」的業務場景占據主流&#xff1a;瀏…

永磁同步電機控制算法--基于PI的位置伺服控制

一、原理介紹 永磁同步伺服系統是包含了電流環、速度環和位置環的三環控制系統。 伺服系統通過電流檢測電路和光電編碼器檢測電動機三相繞組電流和轉子位置θ&#xff0c;通過坐標變換&#xff0c;計算出轉矩電流分量iq和勵磁電流分量id。 位置信號指令與實際轉子位置信號的差…

linux系統線程實現原理淺析

背景 對進程和線程的理解&#xff0c;之前一直都是憑一些零碎不完整的信息在理解&#xff1b; linux的進程和線程基本上一樣&#xff0c;線程是輕量級進程&#xff0c;彼此有關聯又獨立。 得虧內核支持的好&#xff0c;寫用戶態程序可以不依賴于實現的理解&#xff0c;只需要…

MySQL連接報錯處理:1130-host ... is not allowed to connect to this MySql server

在MySQL安裝完成后&#xff0c;很多開發者會遇到這樣一個問題&#xff1a; 錯誤代碼 1130&#xff1a;host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 這個錯誤通常出現在你嘗試通過遠程工具&#xff08;如 Navicat、DBeaver 等&#xff09;連接 MySQL …

Linux系統之----進程控制

1.進程創建 進程創建部分由于就是fork函數&#xff0c;還有寫時拷貝&#xff0c;在上一篇已經講述過了&#xff0c;這里不在進行贅述&#xff0c;有疑問的讀者可以前往上一篇博文《Linux系統--程序地址空間》中閱讀&#xff01; 這里在多說一嘴寫時拷貝吧 我們可以對比一下寫…

Spring框架的設計目標,設計理念,和核心是什么 ?

Spring框架是一個為簡化企業級應用開發而設計的開源框架&#xff0c;它提供了全面的基礎設施支持&#xff0c;使得Java應用開發更加簡單、快速和可維護。下面我將詳細解釋Spring框架的設計目標、設計理念以及核心組件。 設計目標 簡化Java企業級應用開發&#xff1a;通過提供…

Red Hat6.4環境下搭建DNS服務器

DNS服務器&#xff08;Domain Name System Server&#xff09;是互聯網中用于將域名&#xff08;如 www.example.com&#xff09;解析為IP地址&#xff08;如 192.0.2.1&#xff09;的服務器。它是互聯網基礎設施的重要組成部分&#xff0c;幫助用戶通過易于記憶的域名訪問網站…

Nginx核心功能 02

目錄 Nginx代理技術核心概念 &#xff08;一&#xff09;正向代理&#xff08;Forward Proxy&#xff09; 1. 基本定義 2. 技術原理 3. 應用場景 &#xff08;二&#xff09;反向代理&#xff08;Reverse Proxy&#xff09; 1. 基本定義 2. 技術原理 3. 應用場景 一、…

關于Python:3. Python標準庫和常用模塊

1. os 和 sys&#xff08;系統編程基礎&#xff09; 這兩個模塊是進行系統層面操作&#xff08;如文件管理、路徑處理、環境變量訪問等&#xff09;必不可少的工具。 os 模塊 os 主要是用于與操作系統交互的&#xff0c;比如&#xff1a; 文件和目錄操作 獲取系統信息 運行…

Java基于SaaS模式多租戶ERP系統源碼

目錄 一、系統概述 二、開發環境 三、系統功能介紹 一、系統概述 ERP&#xff0c;全稱 Enterprise Resource Planning 即企業資源計劃。是一種集成化的管理軟件系統&#xff0c;它通過信息技術手段&#xff0c;將企業的各個業務流程和資源管理進行整合&#xff0c;以提高企業…

個人健康中樞的多元化AI網絡革新與精準健康路徑探析

引言 隨著數字化轉型的深入推進,個人健康中樞作為集成化健康管理系統,正在從傳統的單一功能向多元化的AI驅動方向快速發展。在這一背景下,新興網絡硬件技術,特別是DPU(數據處理單元)和全光網絡的出現,為個人健康中樞的革新提供了前所未有的機遇。本研究將深入探討這些技…

AI跑得快,MCP來加速——模型計算平臺在訓練與推理中的硬核作用

AI跑得快,MCP來加速——模型計算平臺在訓練與推理中的硬核作用 一、引言:AI是“鐵人三項”,但訓練+推理常常“掉鏈子” 如今的人工智能系統越來越強,像ChatGPT、Stable Diffusion、Segment Anything等模型不斷刷新技術天花板。但你是否也注意到: 明明模型設計得挺好,訓練…

《MATLAB實戰訓練營:從入門到工業級應用》工程實用篇-自動駕駛初體驗:車道線檢測算法實戰(MATLAB2016b版)

《MATLAB實戰訓練營&#xff1a;從入門到工業級應用》工程實用篇-&#x1f697; 自動駕駛初體驗&#xff1a;車道線檢測算法實戰&#xff08;MATLAB2016b版&#xff09; 大家好&#xff01;今天我要帶大家一起探索自動駕駛中一個非常基礎但又至關重要的技術——車道線檢測。我…

模型部署——cuda編程入門

CUDA中的線程與線程束 kernel是在device上線程中并行執行的函數&#xff0c;核函數用__global__符號聲明&#xff0c;在調用時需要用<<<grid_size, block_size>>>來指定kernel要執行的線程數量。在CUDA中&#xff0c;每一個線程都要執行核函數&#xff0c;并…

WordPress不支持中文TAG標簽出現404的解決方法

我們在后臺編輯文章時輸入中文標簽會發現出現404的情況&#xff0c;其實中文TAG標簽鏈接無法打開的原因是WordPress不支持中文的編碼。那么解決的方法也很容易&#xff0c;只要改代碼讓WordPress能支持中文的編碼形式&#xff0c;也就是UTF-8和GBK編碼即可&#xff0c;無需用到…

金融信貸公司所需的技術和風控體系及其帶來的價值

金融信貸公司的技術架構通過集成傳統大型機系統與現代數據平臺&#xff0c;能夠有效支持金融信貸業務的運作&#xff0c;同時通過大數據、ETL、報表開發、數據倉庫等技術為公司帶來更高效的數據驅動決策、精準的風控分析和更靈活的業務支持。 一、公司技術架構 數據倉庫架構&…

《AI大模型應知應會100篇》第43篇:大模型幻覺問題的識別與緩解方法

第43篇&#xff1a;大模型幻覺問題的識別與緩解方法 摘要 當AI系統自信滿滿地編造"量子計算機使用香蕉皮作為能源"這類荒謬結論時&#xff0c;我們不得不正視大模型的幻覺問題。本文通過15個真實案例解析、6種檢測算法實現和3套工業級解決方案&#xff0c;帶您掌握…

計算方法實驗五 插值多項式的求法

【實驗性質】 綜合性驗 【實驗目的】 掌握Lagrange插值算法、Newton插值算法&#xff1b;理解Newton插值算法相對于Lagrange插值算法的優點。 【實驗內容】 先用C語言自帶的系統函數sin x求出 的值&#xff0c;然后分別用Lagrange、Newton方法求出的值&#xff0c;并與用…

文獻總結:TPAMI端到端自動駕駛綜述——End-to-End Autonomous Driving: Challenges and Frontiers

端到端自動駕駛綜述 1. 文章基本信息2. 背景介紹3. 端到端自動駕駛主要使用方法3. 1 模仿學習3.2 強化學習 4. 測試基準4.1 真實世界評估4.2 在線/閉環仿真測試4.3 離線/開環測試評價 5. 端到端自動駕駛面臨的挑戰5.1 多模態輸入5.2 對視覺表征的依賴5.3 基于模型的強化學習的世…