Webug4.0通關筆記06- 第8關CSV注入

目錄

CSV注入漏洞

1.CSV漏洞簡介

2.漏洞原理

(1)公式執行

(2)DDE機制

(3)OS命令執行

3.漏洞防御

第08關 CSV注入

1.打開靶場

2.修改源碼

3.注入命令

4.導出excel表

5.打開excel表


CSV注入漏洞

1.CSV漏洞簡介

CSV公式注入(CSV Injection)是一種會造成巨大影響的攻擊向量。攻擊包含向惡意的EXCEL公式中注入可以輸出或以CSV文件讀取的參數。當在Excel中打開CSV文件時,文件會從CSV描述轉變為原始的Excel格式,包括Excel提供的所有動態功能。在這個過程中,CSV中的所有Excel公式都會執行,從而可能導致黑客利用此功能進行滲透,形成CSV漏洞

2.漏洞原理

(1)公式執行

當輸入一個公式,會被Excel自動運算并執行。如下圖執行公式=1+2+3

回車后這一行數據就會變為6

(2)DDE機制

而當你輸入一個別的Excel本身不存在的功能時,Excel就會被微軟的另一種機制:DDE機制調用。

DDE是Windows下進程間通信協議,是一種動態數據交換機制,使用DDE通訊需要兩個Windows應用程序,其中一個作為服務器處理信息,另外一個作為客戶機從服務器獲得信息。DDE支持Microsoft Excel,LibreOffice和Apache OpenOffice。 Excel、Word、Rtf、Outlook都可以使用這種機制,根據外部應用的處理結果來更新內容。因此,如果我們制作包含DDE公式的CSV文件,那么在打開該文件時,Excel就會嘗試執行外部應用

(3)OS命令執行

通過在CSV文件中構建DDE公式,可以調用系統cmd執行命令,從而達到執行操作系統命令的目的,形成命令執行漏洞

如下圖所示,在單元格中輸入1+cmd|’/C calc’!A0

1+cmd|'/C calc'!A0

回車后Excel會彈出一個框,提醒Excel需要啟動另外一個程序(cmd)

點擊是,Windows會彈出計算器窗口。

因此,利用這種漏洞危害,我們可以在用戶的操作系統上執行添加用戶、開啟任意程序、操作注冊表、反彈shell等命令。?

3.漏洞防御

1、確保單元格不以特殊字符(“+、-、@、=”)開頭;
2、對單元格的內容進行特殊字符(“+、-、@、=”)過濾;
3、先對原始輸入內容進行轉義(雙引號前多加一個雙引號),然后在添加tab鍵和雙引號防止注入;
4、禁止導出CSV、Excel格式;
5、導出為Excel格式前,利用代碼把單元格的格式設置為文本(對CSV不生效)。?

第08關 CSV注入

1.打開靶場

初始打開效果如下所示

2.修改源碼

這是因為源碼有問題,需要修改源碼csv_vuln.php,修改后如下所示

<?php$conn = mysqli_connect('localhost', 'root', 'root', 'webug');if ($conn) {$sql = "select * from data_crud";$res = $conn->query($sql);}if (isset($_POST['daochu'])){$headerArray = ['name','age','email'];$string = implode(",",$headerArray)."\n";//先做出表頭while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){$data = [['name'=>urldecode($name),'age'=>urldecode($age),'email'=>urldecode($email)]];foreach ($data as $key => $value) {//把需要的字段一一對應起來,如果已經對應好 直接 $outArray = $value;$outArray['name'] = $value['name'];$outArray['age'] = $value['age'];$outArray['email'] = $value['email'];$string .= implode(",",$outArray)."\n"; //用英文逗號分開 }}@$filename = date('Ymd').'.csv'; //設置文件名header("Content-type:text/csv");header("Content-Disposition:attachment;filename=".$filename);header('Cache-Control:must-revalidate,post-check=0,pre-check=0');header('Expires:0');header('Pragma:public');exit(mb_convert_encoding($string, "GBK", "UTF-8"));}
?><?php
require_once "../../common/common.php";
if (!isset($_SESSION['user'])) {header("Location:../login.php");
}
?>
<!doctype html>
<html><head><meta charset="utf-8"><title></title>
</head>
<style>body{font-family: Arial, Helvetica, sans-serif;}table{border-collapse: collapse;width: 50%;text-align: center;}td,th{border:1px solid #ccc; padding: 2px 5px;}button{padding: 5px;}div {line-height: 3;}
</style>
<body>
<?php$i_name =  urlencode($_POST[name]);$i_age =  urlencode($_POST[age]);$i_email =  urlencode($_POST[email]);if ($dbConnect) {if ($i_name != null && $i_age != null && $i_email != null){$sql = "INSERT INTO data_crud(name,age,email) VALUES ('$i_name','$i_age','$i_email')";$res = $dbConnect->query($sql);}}if ($dbConnect) {$sql = "select * from data_crud";$res = $dbConnect->query($sql);}
?><table id="table"><tr><th>Name</th><th>Age</th><th>Email</th></tr><?phpif ($res) {while (list($id, $name, $age, $email, $deflag) = mysqli_fetch_row($res)){echo '<tr>';echo '<input type="text" hidden="hidden" name="id[]" value="'.$id.'">';echo '<td><div contenteditable="true">'.urldecode($name).'</div></td>';echo '<td><div contenteditable="true">'.urldecode($age).'</div></td>';echo  '<td><div contenteditable="true">'.urldecode($email).'</div></td>';echo '</tr>';}}?></table><form action="#" method="post"><input name="daochu" type="submit" value="導出"/></form><br><h2>添加新用戶信息</h2>
<form action="#" method="post"><table id="table"><tr><td>Name</td><td>Age</td><td>Email</td></tr><tr><td><input name="name" type="text" size="20"/></td><td><input name="age" type="text" size="20"/></td><td><input name="email" type="text" size="20"/></td></tr></table><div><input name="submit" type="submit" value="確認添加"/></form></div>
</body>
<script src="../../../aa/html/table-to-excel.js"></script><script>var tableToExcel = new TableToExcel();document.getElementById('button').onclick = function () {tableToExcel.render("table");};</script>
</html>

修改源碼后,打開頁面如下所示

3.注入命令

在添加用戶信息處,任選一項name處,添加1+cmd|'/C calc'!A0這個csv注入命令,其他兩項甜味18和ljn,接下來點擊確認添加

添加后如下所示

這個時候點擊導出,將excel表導出,很明顯此時導出的表格中會包含此csv注入命令。

4.導出excel表

點擊導出后效果如下,此時導出成功會提示是否打開,選擇打開

5.打開excel表

打開后,當點擊=1+cmd|'/C calc'!A0項數據時,提示如下

這個時候如果點擊是的話,如下所示通關excel表的csv注入將計算器啟動,滲透成功

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

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

相關文章

Windows和 macOS 上安裝 `nvm` 和 Node.js 16.16.0 的詳細教程。

Windows和 macOS 上安裝 nvm 和 Node.js 16.16.0 的詳細教程。 --- ### 1. 安裝 nvm&#xff08;Node Version Manager&#xff09; nvm 是一個 Node.js 版本管理工具&#xff0c;可以輕松安裝和切換不同版本的 Node.js。 #### Windows 安裝 nvm 1. **下載 nvm 安裝包**&#x…

[特殊字符] 藍橋杯省賽全解析:含金量、獲獎難度、參賽意義與發展價值全面剖析

藍橋杯省賽剛剛落幕&#xff0c;不論你是剛參加完比賽的同學&#xff0c;還是還在觀望是否值得投入時間去準備藍橋杯的學生&#xff0c;相信你都關心&#xff1a; 藍橋杯到底值不值得參加&#xff1f; 獲獎難不難&#xff1f;含金量如何&#xff1f; 和其它算法競賽相比有什么…

ASP.NET MVC后端控制器用模型 接收前端ajax數據為空

1、前端js代碼 如下&#xff1a; const formData {DeptName: D001,Phone: 12345678900 };$.ajax({url: "/Phone/SavePhone1",type: "POST",contentType: "application/json",data: JSON.stringify(formData), //必須要JSON.stringifysuccess:…

擁抱 Kotlin Flow

1. 引言 Kotlin Flow 是 Kotlin 協程生態中處理異步數據流的核心工具&#xff0c;它提供了一種聲明式、輕量級且與協程深度集成的響應式編程模型。與傳統的 RxJava 相比&#xff0c;Flow 更簡潔、更易于維護&#xff0c;尤其在 Android 開發中已成為主流選擇。本文將從基礎概念…

精益數據分析(34/126):深挖電商運營關鍵要點與指標

精益數據分析&#xff08;34/126&#xff09;&#xff1a;深挖電商運營關鍵要點與指標 在創業和數據分析的學習之旅中&#xff0c;我們都在不斷探尋如何讓業務更上一層樓。今天&#xff0c;我依舊帶著和大家共同進步的想法&#xff0c;深入解讀《精益數據分析》中電商運營的關…

Learning vtkjs之ImageCropFilter

過濾器 圖片數據體積裁剪 介紹 vtkImageCropFilter可以裁剪vtkImageData。這只適用于IJK對齊的平面。 請注意&#xff0c;由于CPU限制的裁剪&#xff0c;這在大型數據集上會很慢。 效果 核心代碼 需要實現這個代碼主要邏輯 1、設定的crop的包圍盒 其實主要是IMax IMin JM…

深入理解 C++11 delete 關鍵字:禁用函數的藝術

一、什么是 delete 關鍵字 C11 引入的 delete 關鍵字是一種??顯式禁用函數??的語法機制。它允許開發者主動阻止特定函數的使用&#xff0c;比傳統的私有化聲明更直觀、更安全&#xff0c;且能在編譯期捕獲更多潛在錯誤。 二、為什么需要 delete&#xff1f; 1. 傳統方式…

深度剖析!GPT-image-1 API 開放對 AI 繪畫技術生態的沖擊!

4月24日凌晨&#xff0c;OpenAI正式發布了全新的圖像生成模型“gpt-image-1”&#xff0c;并通過API向全球開發者開放使用&#xff0c;這意味著其GPT-4o的圖像生成能力正式向開發者開放&#xff01; 在這之前&#xff0c;GPT-4o的圖像生成功能于今年3月25日由 OpenAI 創始人兼 …

扣子流程圖批量導入飛書多維表格

文章目錄 整體結構分步驟進行處理1. 程序代碼處理2. 多維表格配置 整體結構 整個代碼塊結構如下&#xff1a; 首先&#xff0c;我們從其他流程中拿到一個數據列表&#xff0c;通過一個循環體&#xff0c;將每一個部分的內容都通過python代碼整理后&#xff0c;使用【插件】的…

【安全掃描器原理】端口掃描

【安全掃描器原理】端口掃描 1.端口掃描基本原理2.TCP掃描3.UDP掃描4.手工掃描1.端口掃描基本原理 以TCP端口為例,其原理是當一個主機向遠端一個服務器的某一個端口提出建立連接的請求,如果對方有此項服務,就會同意建立連接,如果對方未安裝此項服務時,則不會同意建立連接…

FastGPT部署的一些問題整理

在B站學習 圖靈程序員-諸葛 的LangChain快速入門課程之《部署FastGPT構建本地應用》。在我學習課程跟著老師實踐的過程中&#xff0c;踩了一些坑。這篇文章以問答的形式記錄一下學習中的一些問題&#xff0c;主要面向的讀者是&#xff0c;在學習同樣的課程的和部署FastGPT遇到各…

如何查看k8s獲取系統是否清理過docker鏡像

k8s集群某個節點down掉后&#xff0c;pod就會漂移到其他節點&#xff0c;但是在該節點卻又執行了拉取鏡像操作&#xff0c;明明該節點之前部署過該容器的&#xff0c;不知為什么又拉取了一次鏡像&#xff08;鏡像拉取配置的優先使用本地&#xff09;&#xff0c;所以懷疑是觸發…

聚焦智能體未來,領馭科技在微軟創想未來峰會大放異彩

2025年4月23日&#xff0c;微軟創想未來峰會在北京中關村國際創新中心盛大舉行。作為微軟中國南區核心合作伙伴及HKCSP 1T首批授權云服務商&#xff0c;深圳領馭科技有限公司受邀參會&#xff0c;攜瀚鵬工業AI應用解決方案亮相峰會&#xff0c;與全球AI領袖及行業精英共話智能體…

元宇宙2.0:當區塊鏈成為數字世界的憲法

引言&#xff1a;當虛擬世界成為“新大陸” 清晨&#xff0c;你戴上VR設備進入一個由數字建筑構成的城市&#xff0c;這里的地皮屬于全球玩家&#xff0c;街邊的藝術品標著NFT認證碼&#xff0c;咖啡館里的人們用加密貨幣支付咖啡&#xff0c;而社區規則由持有代幣的居民投票決…

力扣hot100——239.滑動窗口最大值

題目鏈接&#xff1a; 239. 滑動窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 優先級隊列 優先級隊列自動按照大小排序&#xff0c;隊首即為最大元素&#xff0c;但取隊首時要注意元素是否在滑動窗口內&#xff0c;如果不在則彈出。 class Solution { public:vector&…

Alibaba國際站商品詳情AP接口概述,json數據示例返回參考

前言 Alibaba國際站商品詳情API&#xff08;通常稱為item_get接口&#xff09;是阿里巴巴開放平臺提供的一項核心服務&#xff0c;允許開發者通過商品ID獲取商品的詳細信息。該接口廣泛應用于電商系統集成、數據分析、競品監控等場景&#xff0c;支持企業自動化獲取商品標題、…

[論文閱讀]Adversarial Semantic Collisions

Adversarial Semantic Collisions Adversarial Semantic Collisions - ACL Anthology Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing (EMNLP) 對抗樣本是相似的輸入但是產生不同的模型輸出&#xff0c;而語義沖突是對抗樣本的逆…

25【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法(二)

上一篇關于屬性表自動編號的文章因為涉及到代碼&#xff08;【干貨】在Arcgis中根據字段屬性重新排序并自動編號的方法&#xff08;一&#xff09;&#xff09;&#xff0c;擔心大家有些東西確實不熟悉&#xff0c;今天就更新一篇不需要代碼也能達到這個目的的方法。主要的思路…

從后端研發角度出發,使用k8s部署業務系統

k8s&#xff0c;作為目前最流行的容器編排中間件&#xff0c;大家應該都聽說過&#xff0c;很多公司也都在用&#xff0c;但基本都是運維在管理k8s&#xff0c;開發人員一般涉及不到&#xff0c;開發人員只需要寫業務代碼&#xff0c;然后運維人員負責制作鏡像&#xff0c;然后…

Vue3 Echarts 3D圓柱體柱狀圖實現教程以及封裝一個可復用的組件

文章目錄 前言一、實現原理二、series ——type: "pictorialBar" 簡介2.1 常用屬性 三、代碼實戰3.1 封裝一個echarts通用組件 echarts.vue3.2 首先實現一個基礎柱狀圖3.3 添加上下2個橢圓面3.4 進階封裝一個可復用的3D圓形柱狀圖組件 總結 前言 在前端開發的數據可視…