文件上傳漏洞原理學習

什么是文件上傳漏洞

????????文件上傳漏洞是指用戶上傳了一個可執行的腳本文件,并通過此腳本文件獲得了執行服務器端命令的能力。“文件上傳” 本身沒有問題,有問題的是文件上傳后,服務器怎么處理、解釋文件。如果服務器的處理邏輯做的不夠安全,則會導致嚴重的后果。

這種攻擊方式是最為直接和有效的,所以我們需要思考的是如何繞過檢測和過濾。

漏洞危害

  1. 上傳文件是web腳本語言,服務器的web容器解釋并執行了用戶上傳的腳本,導致代碼執行。

  2. 上傳文件是病毒或者木馬時,主要用于誘騙用戶或者管理員下載執行或者直接 自勱運行

  3. 上傳文件是Flash的策略文件 crossdomain.xml,黑客用以控制Flash在該域 下的行為(其他通過類似方式控制策略文件的情況類似);

  4. 上傳文件是病毒、木馬文件,黑客用以誘騙用戶或者管理員下載執行;

  5. 上傳文件是釣魚圖片或為包含了腳本的圖片,在某些版本的瀏覽器中會被作為腳本執行,被用于釣魚和欺詐。

  6. 除此之外,還有一些不常見的利用方法,比如將上傳文件作為一個入口,溢 出服務器的后臺處理程序,如圖片解析模塊;或者上傳一個合法的文本文件,其內容包含了PHP腳本,再通過"本地文件包含漏洞(Local File Include)"執行此腳本。

要求條件?

上傳的后門文件,需要能被腳本語言解析執行。

說明一:對方服務器運行的PHP環境,你不能上傳一個JAVA的后門代碼。
說明二:你上傳文件的目錄可以被腳本語言解析執行,如果你上傳的目錄沒有執行權限也不行
說明三:一般文件上傳后會返回你一個地址,如果無妨鏈接到也不能構成文件上傳漏洞。
還有例外情況,非腳本文件也能被成功解析。比如:上傳了一個圖片🐎,如果對方中間件上存在一些漏洞的話,配合這些漏洞可以實現圖片文件按照腳本文件解析。

方法(以upload-labs為例)

在ctf比賽中,一般都是圍繞一句話木馬實現文件上傳漏洞的

那什么是一句話木馬?

通常,一句話木馬后綴為.php,因為文件上傳漏洞通常用于web中,而php是web能夠識別的語言(主要是能被對方服務器識別的語言后綴)

其內容是

 <?php eval($_POST['cmd']);?>

????????現在來解釋一下這個一句話木馬,這里的<?php和末尾的?>是php語言的標志,用來聲明這是個php語言,而括起來的內容就是php代碼。

? ? ? ? eval是php中的一個內置函數里面的內容會被當成命令執行。

? ? ? ? 而$_POST['cmd']是通過post傳參的方式獲取一個名為cmd的參數。

所以如果這個上傳的文件被解析,那我們就可以訪問這個文件的位置,并通過post傳參執行命令。(就像web的命令執行一樣),從而訪問,修改服務器中的目錄文件。

1,Less-1 前端驗證

我們直接上傳一個一句話木馬試一下

這里直接跳出一個彈窗,并顯示只能上傳的文件類型。

那這大概率是前端驗證,因為web中的彈窗通常是通過JavaScript實現

通過看查源代碼我們也可以證實

?不過這種檢查通常都是本地上傳時檢查,而在上傳過程和后端不會檢查,所以這種其實沒什么用。

我們有兩種方法繞過這種驗證

1,直接禁用JavaScript

禁用JavaScript后,這串代碼就不能生效了

打開開發者工具臺,直接禁用

然后再上傳文件,會發現上傳成功,然后就可以用蟻劍連接進入后臺了?2,抓包

先上傳一個滿足后綴的名字通過JavaScript檢查,然后抓包修改后綴

?

2,Less-2 MIME檢查

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。

就是會檢查文件類型,單純的后綴繞過不行了?

直接上傳php

我們抓包,將文件類型改為符合的格式?然后就上傳成功了

?3,Less-3 后綴繞過

看源碼,可以看到對文件后綴名的操作

同時這里是用黑名單的形式進行過濾,所以我們可以用黑名單以外的方法繞過

又因為這里會將文件后綴統一轉換為小寫,所以大小寫繞過不合適了

但我們任然可以用phtml

.phtml?是一種常見的文件擴展名,通常用于表示包含 PHP 代碼的 HTML 文件。它是 PHP 和 HTML 結合的產物,通常用于在網頁中嵌入動態內容。

還可以用php加上對應的php版本,比如php5,php6,php7進行繞過

將后綴改為phtml就可以上傳了

?然后再用蟻劍連接就可以了

4,Less-4 .htaccess

先看黑名單內容

可以看到過濾了php的大小寫繞過,版本繞過,和JavaScript等

但是我們可以用.htaccess強制將某種類型的文件作為php文件識別

問ai可以知道這是用于配置apache服務器的配置文件,將其內容設置為

AddType application/x-httpd-php .png
.htaccess的文件寫法有很多,如果這個不能成功可以網上搜其他的能運行的

?

這里我沒用apache服務器,看能不能識別為php文件

這里先上傳了.htaccess配置文件,在上傳一個圖片馬,發現并沒有被解析

?換成apache服務器后重復上面的操作,訪問對應的png文件

這樣就能證明上傳成功,且被當作了php文件解析

5,Less-5 .user.ini?

這關過濾了.htaccess,可以用.user.ini

?其中.user.ini的文件內容是

這樣當我們執行同目錄的其他php腳本就會包含a.jpg中的內容,而文件提示upload中有一個readme.php,我們嘗試訪問

可以看到我們的一句話代碼被包含?但這樣是沒有包含上的,我們修改一句話木馬,再次訪問

像這樣,沒有顯示出我們寫入的一句話木馬才是被成功解析?

6,pass-6? 大小寫繞過后綴名

可以看到,在處理后綴名時沒有進行大小寫的轉換,導致漏洞產生

為什么大寫PHP也能被解析?

所以我們上傳一句話木馬,改名為1.phP

成功上傳

?

7,Less-7 后綴名+空格

先看對后綴名的處理

?發現與之前少了刪除后綴名中空格的操作,而黑名單操作是將后綴名與里面的字符串整個比較,所以多加一個空格就會被認為是不同的字符串

但這只適用于Windows系統,linux系統在解析文件時不會自帶去掉末尾的空格

上傳文件用bp抓包,在后綴名末尾增添空格

上傳會出現錯誤

?從源碼分析應該是成功上傳的,但可能因為路徑的問題導致上傳錯誤

嘗試將php版本降低,成功上傳

?8,Less-8 后綴名+點繞過

先看對后綴名進行了什么樣的操作

可以看到少了去后綴名中的點操作,這樣我們就可以在后綴名后加點構成假后綴名,因為截取后綴名是截取最后一個點后的字符串

?而我們嘗試在Windows系統中在后綴中加點

會發現無法命名,并自動去掉最后一個點

而如果在最后在加上正常后綴名,就會將前面的當作文件名?所以,只要加上一個點就能成功繞過后綴名檢查,并上傳能執行的一句話木馬

牢樣子,bp抓包,在后綴名中做點修改

windows會自動將這個點刪掉,雖然我們訪問的1.php.,但任然可以連接,且后臺也是1.php

9,Less-9 附加數據流繞過

看查源碼對后綴名的操作,發現少了去除::$DATA?

?所以即使不知道::$DATA是什么,但只要知道他能幫助繞過黑名單就行了

bp抓包后,在后綴名里面加上::$DATA就可以了

剛剛傳上去就被火絨gank了?

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

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

相關文章

leetcode_數組 189. 輪轉數組

189. 輪轉數組 給定一個整數數組 nums&#xff0c;將數組中的元素向右輪轉 k 個位置&#xff0c;其中 k 是非負數 示例 1: 輸入: nums [1,2,3,4,5,6,7], k 3輸出: [5,6,7,1,2,3,4] 示例 2: 輸入&#xff1a;nums [-1,-100,3,99], k 2輸出&#xff1a;[3,99,-1,-100] 思…

天元證券|空倉一個月 這批新基金沖進去了!

多只一個月都按兵不動的次新基金&#xff0c;終于在4月7日沖進去了。 券商中國記者注意到&#xff0c;多只在3月初成立的新基金產品&#xff0c;在保持一個月凈值零波動之后&#xff0c;終于在4月7日建倉了。多只新基金產品當日凈值出現約1%至2%的波動幅度&#xff0c;參考4月7…

centos7系統搭建nagios監控

~監控節點安裝 1. 系統準備 1.1 更新系統并安裝依賴 sudo yum install -y httpd php php-cli gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel wget unzip sudo yum install -y epel-release # 安裝 EPEL 倉庫 sudo yum install -y automake autoconf lib…

3. git config

文章目錄 基本概述配置級別基本用法設置配置項查看配置項刪除配置項 常用配置項 基本概述 git config 的作用是&#xff1a;設置用戶信息、編輯器、別名、倉庫行為等。 配置級別 級別作用范圍配置文件路徑命令選項倉庫級別&#xff08;Local&#xff09;當前倉庫.git/config…

WHAT - React 組件的 props.children 屬性

目錄 一、什么是 children二、基本用法三、類型定義&#xff08;TypeScript&#xff09;四、一些高級用法1. 條件渲染 children2. 多個 children 插槽&#xff08;命名插槽&#xff09; 五、children 的優勢總結 在 React 中&#xff0c;children 是一個非常重要且特殊的 內置屬…

Spring Boot開發三板斧:高效構建企業級應用的核心技法

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;獲得2024年博客之星榮譽證書&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開發技術&#xff0c…

實戰篇-梳理時鐘樹

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、pandas是什么&#xff1f;二、使用步驟 1.引入庫2.讀入數據 總結 前言 這是B站傅里葉的貓視頻的筆記 一、建立工程 以Vivado的wave_gen為例子。為了引入異…

圖靈逆向——題六-倚天劍

從第六題開始就要有個先看看請求頭的習慣了[doge]。 別問博主為什么要你養成這個習慣&#xff0c;問就是博主被坑過。。。 headers里面有一個加密參數S&#xff0c;然后你就去逆向這個S對吧。 然后一看響應&#xff1a; 好家伙返回的還是個密文&#xff0c;所以要兩次逆向咯。…

ubuntu自動更新--unattended-upgrades

ubuntu自動更新--unattended-upgrades 1 介紹2 發展歷程3 配置與使用4 disable Auto update服務命令 參考 1 介紹 Unattended-Upgrades 是一個用于自動更新 Debian 及其衍生系統&#xff08;如 Ubuntu&#xff09;的工具。它的主要功能是自動檢查、下載并安裝系統更新&#xf…

從 Excel 到你的表格應用:條件格式功能的嵌入實踐指南

一、引言 在日常工作中&#xff0c;面對海量數據時&#xff0c;如何快速識別關鍵信息、發現數據趨勢或異常值&#xff0c;是每個數據分析師面臨的挑戰。Excel的條件格式功能通過自動化的視覺標記&#xff0c;幫助用戶輕松應對這一難題。 本文將詳細介紹條件格式的應用場景&am…

【HarmonyOS Next之旅】DevEco Studio使用指南(十一)

目錄 1 -> 代碼實時檢查 2 -> 代碼快速修復 3 -> C快速修復使用演示 3.1 -> 填充switch語句 3.2 -> 使用auto替換類型 3.3 -> 用&#xff1f;&#xff1a;三元操作符替換if-else 3.4 -> 從使用處生成構造函數 3.5 -> 將變量拆分為聲明和賦值 1…

win10離線環境下配置wsl2和vscode遠程開發環境

win10離線環境下配置wsl2和vscode遠程開發環境 環境文件準備wsl文件準備vscode文件準備 內網環境部署wsl環境部署vscode環境部署 遷移后Ubuntu中的程序無法啟動 環境 內網機&#xff1a;win10、wsl1 文件準備 wsl文件準備 在外網機上的wsl安裝Ubuntu24.04&#xff0c;直接在…

Elasticsearch | ES索引模板、索引和索引別名的創建與管理

關注&#xff1a;CodingTechWork 引言 在使用 Elasticsearch (ES) 和 Kibana 構建數據存儲和分析系統時&#xff0c;索引模板、索引和索引別名的管理是關鍵步驟。本文將詳細介紹如何通過 RESTful API 和 Kibana Dev Tools 創建索引模板、索引以及索引別名&#xff0c;并提供具…

提高MCU的效率方法

要提高MCU(微控制器單元)的編程效率,需要從硬件特性、代碼優化、算法選擇、資源管理等多方面入手。以下是一些關鍵策略: 1. 硬件相關優化 時鐘與頻率: 根據需求選擇合適的時鐘源(內部/外部振蕩器),避免過高的時鐘頻率導致功耗浪費。關閉未使用的外設時鐘(如定時器、UA…

Visual Studio未能加載相應的Package包彈窗報錯

環境介紹&#xff1a; visulal studio 2019 問題描述&#xff1a; 起因&#xff1a;安裝vs擴展插件后&#xff0c;重新打開Visual Studio&#xff0c;報了一些列如下的彈窗錯誤&#xff0c;即使選擇不繼續顯示該錯誤&#xff0c;再次打開后任然報錯&#xff1b; 解決思路&am…

Android中Jetpack設計理念、核心組件 和 實際價值

一、Jetpack 的定義與定位&#xff08;基礎必答&#xff09; Jetpack 是 Google 推出的 Android 開發組件集合&#xff0c;旨在&#xff1a; 加速開發&#xff1a;提供標準化、開箱即用的組件 消除樣板代碼&#xff1a;解決傳統開發中的重復勞動問題 兼容性保障&#xff1a;…

計算機網絡 實驗二 VLAN 的配置與應用

一、實驗目的 1. 熟悉 VLAN 和 PORT VLAN 的原理&#xff1b; 2. 熟悉華為網絡模擬器的使用&#xff1b; 3. 掌握網絡拓撲圖的繪制&#xff1b; 4. 掌握單交換機內 VLAN 的配置。 二、實驗設備 PC、華為模擬器 ENSP。 三、實驗步驟 知識準備&#xff1a;VLAN 和 PORT V…

聊透多線程編程-線程基礎-3.C# Thread 如何從非UI線程直接更新UI元素

目錄 1. 使用 Control.Invoke 或 Control.BeginInvoke&#xff08;Windows Forms&#xff09; 2. 使用 Dispatcher.Invoke 或 Dispatcher.BeginInvoke&#xff08;WPF&#xff09; 3. 使用 SynchronizationContext 桌面應用程序&#xff08;如 Windows Forms 或 WPF&#xf…

TCP 和 UDP 可以使用同一個端口嗎?

TCP 和 UDP 可以使用同一個端口嗎&#xff1f; 前言 在深入探討 TCP 和 UDP 是否可以使用同一個端口之前&#xff0c;我們首先需要理解網絡通信的基本原理。網絡通信是一個復雜的過程&#xff0c;涉及到多個層次的協議和機制。在 OSI 模型中&#xff0c;傳輸層是負責端到端數…

RVOS-2.基于NS16550a ,為os添加終端交互功能。

2.1 實驗目的 為os添加uart功能&#xff0c;通過串口實現開發板與PC交互。 2.1 硬件信息 QEMU虛擬SoC含有 虛擬NS16550A設備 。 不同的地址線組合&#xff08;A2、A1、A0&#xff09;對應的讀寫模式和寄存器如下所示&#xff1a; 2.2 NS16550a 的初始化 線路控制寄存器&#…