• 美文
  • 文章
  • 散文
  • 日记
  • 诗歌
  • 小说
  • 故事
  • 句子
  • 作文
  • 签名
  • 祝福语
  • 情书
  • 范文
  • 读后感
  • 文学百科
  • 当前位置: 柠檬阅读网 > 范文 > 正文

    智能微电网中具有可扩展性的Web漏洞扫描工具研究与实现

    时间:2023-02-09 20:10:06 来源:柠檬阅读网 本文已影响 柠檬阅读网手机站

    廖 微

    (军事科学院系统工程研究院军事新能源技术研究所 北京 102300) (nyyth2019@163.com)

    5G的普及使得人类社会步入了新的发展阶段,电子设备遍及国民生活的方方面面.伴随着智能化出现的是迅速增长的电力需求.在这种趋势下,现有的集中式发电系统结构复杂、成本高,而且远距离传输和高强度运行难以满足更加多样化和高质量的供电需求[1-2].为了充分利用可再生能源发电的技术优势,分布式的微电网模式成为人们的关注热点.智能微电网是与传统的集中式电网系统相对的概念.它在传统的输配电基础上,将可再生能源发电技术作为新型分布式电源,通过部署集成能源管理系统(EMS)和物联网技术实现了一种新的环境友好型发电模式[3].按照一定的拓扑结构,多个分布式电源及负载等可以形成独立、小型的网络并关联至传统的主网中,由静态开关作为中间枢纽.其中,微电网能量管理系统(MGEMS)需要借助互联网技术收集和处理大量的实时数据,进行调度决策和管理控制,是整个系统的控制中枢.一旦其中的Web应用存在漏洞,攻击者就能够攻击系统服务器,窃取电力数据甚至扰乱电能的正常传输与配送.因此,针对MGEMS设计和实现完备的Web应用漏洞检测工具进行测试并提前发现漏洞,必然能够提高整个智能微电网系统的安全性.

    2020年,国家信息安全漏洞共享平台(CNVD)共收录19 964个漏洞,其中,中高危漏洞共计17 542个,所占比重高达87.9%,相较于2019年同比增加24.39%.图1是不同漏洞类型的分布图.

    图1 2020年不同类型漏洞占比

    可以看出,Web应用程序漏洞位居第2位,仅次于未详细列出的其他所有漏洞类型总和.不仅如此,这些漏洞数量并不包括未被发现或者黑客团队发现自行利用的,这种隐藏的漏洞可能才是最影响Web安全性的.比如2015年Hacking Team数据泄露事件就造成了很大的影响.Hacking Team是一家专门从事监视技术的公司,主要协助政府监控公民,被某组织攻击后,包括多个0day漏洞的exp,公民信息文件在内的400 G的数据在网络上公开.其中的几个flash漏洞可以影响几乎所有的Web应用并无法在短时间内修复,这使得许多用户的信息被窃取.此外,由于Web应用的用户群体庞大,信息传播速度更快,造成的危害难以想象.

    在智能微电网系统中,MGEMS包含大量的物联网数据交互和操纵过程,不可避免地要大规模应用Web技术,这使其面临更多的潜在漏洞[4].一旦被不法分子发现和利用,不仅用户的用电数据和个人隐私信息被泄露和推断,整个电力调配系统也很容易被恶意操纵,影响国民生产生活的整个过程.因此,本文针对智能微电网系统中涉及的Web安全,设计并实现了一个较为全面的漏洞检测框架,以增强智能微电网系统的安全性和可靠性.

    1.1 智能微电网

    智能微电网是相对于传统智能电网的一个概念,它将可再生能源技术、分布式电源、储能装置、能源管理系统和输配电基础设施高度集成[5].它既可以看作是电力系统中一个可控制的调度单元,能在数秒内对中央控制系统的指令作出反应.同时也可以看作是针对用户的可定制电源,以满足多样化的用电需求.其智能化主要体现在微电网中采用多样化的传感技术和物联网设备来监测底层运行数据并进行有效控制,通过模型仿真进行实时分析,挖掘电力特征并制定合理的输配电策略.如图2所示,这一切的控制中枢就是其内部的微网能量管理系统,是保证微网安全运行、有效调度决策的最重要组成部分.

    微电网的概念最早由美国提出,因此美国在相关领域的研究和实践起步更早,发展更快,成果更突出.欧洲自1998年逐步开始对微电网进行研发,针对相关的能源集成、协调控制等管理方案形成了一套基本的理论体系.我国微电网虽然仍处于起步阶段,但也吸引了大量的人力物力资源,通过在研究项目中不断实践和摸索,取得了一定成果并确定了基本的技术路线和发展目标.其中,促进微电网系统智能化、安全化是主要研究方向之一.

    图2 微电网控制结构

    1.2 Web漏洞

    Web应用中的漏洞主要可以分为2大类:

    一类是Web应用所依托的服务器和数据库软件自身的漏洞[6].这些漏洞和桌面应用程序的漏洞比较类似,主要有缓冲区溢出、远程代码执行、拒绝服务等.现在比较受欢迎的Apache,IIS,Nginx等服务器以及常用的数据库管理系统MySQL,MS SQL Server,Oracle等都或多或少出现过一些比较严重的漏洞.由于几乎每个Web应用中都会用到服务器和数据库软件,一旦这些软件出现问题,就很可能被攻击者批量利用,影响会非常大.

    另一类是Web应用本身出现的漏洞,可以分为以下4类:

    1) SQL注入漏洞.

    SQL注入漏洞是Web应用中最常见的一种漏洞,通过该漏洞可以获取数据库中的信息,读取本地文件,甚至执行一些命令.SQL注入漏洞在1999年就已出现,并在2003年前后危害到达顶峰[7].即使到现在它仍然是OWASP TOP10上的前几位.

    2) 跨脚本攻击(XSS)漏洞.

    跨站脚本攻击(cross site script, CSS)漏洞主要在前端出现,但同样也是由于后台程序过滤不严导致的.为了避免与层叠样式表CSS命名冲突,将其简称为XSS[8].

    3) 跨站请求伪造(CSRF)漏洞.

    CSRF是一种欺骗用户的浏览器跨站点去访问一个需要认证的网站,并执行非自愿操作的攻击手段[9].在实际攻击中,CSRF漏洞常常和XSS漏洞配合使用,特别是当网站存在同源策略的限制时.

    4) 未授权访问漏洞.

    在Web应用中用户需要登录才能访问页面中的某些内容.但当不同的用户仅仅是通过URL中的ID参数来区分而不添加访问控制时,他们彼此之间就可以相互查看或修改个人信息[10].

    以上只是列举的Web应用中常见的漏洞,并不局限于此.因此,能够检测和识别Web系统中潜在的漏洞威胁对维护整个网络空间的安全是至关重要的.

    1.3 现有Web漏洞检测工具

    为了减少Web应用漏洞的危害,国内外已有许多面向企业的Web漏洞检测工具出现.这些工具主要是向网站服务器发送不同的HTTP数据包,通过分析响应结果,探测网站服务器版本和数据库版本,然后根据探测的信息向网站服务器发送已知类型漏洞的payload,同样,分析返回结果判断是否存在漏洞,最后生成结果报表.

    在国外相对比较成熟的如Acunetix[11], Web Vulnerability Scanner[12],由Java开发,支持ajax解析、flash内容检索,有业内较为先进的SQL注入和XSS漏洞测试引擎,稳定性较好,有丰富的报告功能.

    在国内,各大安全公司也推出了不少相关产品,如:360推出的网站安全检测平台;
    保护伞网络开发的Safe3 Scanner;
    知道创宇公司推出的Websaber网站应用安全评估系统.这些系统能够发现常见类型的Web应用漏洞,提出解决方案,适合常规的自动化测试.

    然而Web漏洞的成因和利用方式都是多种多样的,用户的需求也是不同的,这些工具仍存在以下局限性[13]:

    1) 较为臃肿,多个功能集成在一起,用户不易选择;

    2) 速度和扫描的深入度不足;

    3) 灵活性较差,不易配合人工的测试使用.

    针对以上问题,本文设计和实现了一个完备的漏洞检测框架,可以由用户自由选择扫描引擎,用于辅助安全人员进行漏洞检测或自动化地漏洞扫描.整个框架包含站点地图绘制、HTTP代理、请求重放和入侵等多个程序模块,以辅助智能微电网系统的人工测试,便于安全人员把握Web应用结构,完成HTTP流量分析和Fuzzing测试等;
    自动化扫描的程序模块既包括单页面扫描也包括整站扫描,其中单页面扫描可以选择调用Sqlmap,nmap等安全工具,支持输入命令与安全工具交互,也可以用框架自带的引擎进行扫描,并返回发现的漏洞详情.最后,使用PyQt的样式设计语言QSS设计了整个程序的界面,优化用户使用感,并将各模块封装在单独的API文件中,便于后续的扩展和功能完善.

    本文设计的漏洞检测框架如图3所示,该框架包括站点地图、HTTP代理、请求重放、入侵、扫描5个功能模块.各模块之间既可以独立使用,也可以相互调用输出结果.

    图3 漏洞检测框架总体设计

    3.1 站点地图绘制

    该模块通过用户输入域名,选择需要使用的协程数等参数后会扫描该域名下的所有页面,并以目录树的形式展现.当使用者点击目录树中爬取到的URL时,可以在内嵌的浏览器中预览每个页面以及爬取时的请求/响应包.

    3.1.1 高效判重数据结构Bloom Filter

    URL爬取的难点是URL的去重[14].本文框架使用Python的一个扩展包BitVector实现了高效判重的Bloom Filter数据结构.该结构在1970年由Bloom提出.Bloom Filter的核心思想是利用多个Hash函数将URL映射到某些集合里.因为单个Hash函数出现冲突的可能性比较高,遇到冲突时就用另外的Hash函数再次映射,从而减少了冲突[15].但它有一定的误判率,在判断某元素是否存在集合中时可能误判,误判率会随着元素个数的增多而增大.如果应用在该模块的爬虫URL去重中,较低的误判率是可以接受的,误判1次只是多爬1个页面而已.为了减少空间的占用,Bloom Filter使用位数组对元素的Hash进行存储,占用的内存比其他数据结构要小得多.

    3.1.2 并发

    为了提高爬取的速度,本文框架使用协程进行并发,将每个耗时的IO操作封装成一个协程.协程类似于一个个函数,一个函数执行到一半时可以跳到另一个函数执行,这种特性非常适合IO密集型程序的迸发,实现非阻塞的异步IO[16].IO密集型的程序耗时主要发生在发出请求等待响应的那段时间,有了协程就可以在刚发送完请求后跳到另一个协程执行,收到响应后再回来继续执行接下来的任务,也就是同时可以并发几个链接.协程实际上只在1个线程中运行,主要利用线程内任务的切换,一般不需要加锁,并且占用资源较少.

    3.1.3 模块实现

    算法1是针对站点地图的并发式爬虫算法,使用Bloom Filter数据结构进行去重,并设计了一些正则表达式来匹配和抓取页面中的链接.

    算法1.站点地图爬虫算法.

    输入:域名dname、协程数目n.

    ① 初始化爬取成功的URL队列q,Bloom Filter数据结构seen_url;

    ② 将域名的首页URL放入q和seen_url;

    ③ 创建协程;

    ④ WHILE 队列q非空

    ⑤ 从q中取出爬取到的url,输出并发送请求;

    ⑥ IF响应为重定向

    ⑦ THEN 添加其到q和seen_url中;

    ⑧ ELSE

    ⑨ 利用正则表达式从返回页面中找到所有链接;

    ⑩ IF 域名协议符合要求且不在seen_url中

    对于该模块中的页面预览功能,通过PyQt的QWebView类实现.使用者点击URL后,通过QWebView的load方法将其加载出来,并根据程序界面大小调整页面比例.请求/响应包分析则需要通过Python的requests包获得请求头和响应对象,并按HTTP包的规范重新组合请求头部和主体部分,得到规范的HTTP请求包和响应包,将其显示在对应文本框中.

    3.2 HTTP代理

    首先浏览器需要设置好代理服务器地址,打开本文框架HTTP代理功能,可以拦截浏览器的HTTP请求包,支持修改和释放.拦截的HTTP请求包可以选择发送到请求重放或入侵模块,进行后续处理.

    3.2.1 Socket编程

    Socket是网络中主机间通信必不可少的部分,如果把网络中的主机比喻为一部部电话机,那么Socket就是电话线插口.本文只涉及用户客户端和Web服务器之间的通信,所以下面只简要说明1个客户端和1个服务器间的通信过程[17].

    假设A是服务器,B是客户端,那么A会将Socket绑定到1个端口,然后监听这个端口,等待接受客户端的连接.每当有1个客户端发送请求就会新开1个Socket,用于和该客户端通信.客户端只要知道服务器的地址就可以新建1个Socket来请求连接服务器.两者连接后,使用send,recv等函数进行通信,完毕后可以用close关闭连接.

    3.2.2 模块实现

    该模块的核心部分是HTTP请求的拦截和释放,使用Python的套接字模块Socket实现与浏览器及目标服务器的通信,并用Select模块实现IO多路复用,防止线程一直等待1个Socket降低整个程序的效率.这里使用Select而不是poll或epoll主要是考虑到可移植性,因为Select既可用于Windows平台也可用于Linux平台.

    首先,给定host和port为(“127.0.0.1”,6666),并将浏览器HTTP代理服务器地址也设置为(“127.0.0.1”,6666).服务器端会新建1个Socket绑定在这个地址并监听,等待接收请求.当用户访问网页时,浏览器会将请求发送到本程序,服务器端接收请求后,新建1个Socket并新开启1个线程Proxy用于和浏览器传输数据,从而避免当1个线程有多个Socket在通信时,程序不知道将接收到的请求传给哪一个Socket.新开启的线程Proxy会接收浏览器发来的请求并解码,然后提取出请求目标的主机号、端口、请求主体内容等信息,和通信用的Socket一起用字典存储起来,并放到队列中,交给主进程处理.主进程会从队列中取出该请求,并显示到文本框中.

    3.3 请求重放

    请求重放模块可以接收由HTTP代理模块发过来的请求,或由使用者自行输入请求包,由此发送请求后可以得到响应包.

    该模块中主要用到Python的http.client模块,首先和目标服务器建立连接,连接对象为conn,然后根据HTTP请求包的特点提取出请求的路径、请求头部、POST参数等,然后用http.client的request方法向目标服务器发送请求,并得到响应对象.响应对象中有状态码、响应HTTP协议版本、响应主体等信息,需要将其重新组合成标准形式的响应字符串,然后显示在文本框内.程序执行流程如图4所示:

    图4 请求重放模块程序执行流程

    3.4 入 侵

    可以用一系列测试字符串替换请求包中的某位置字符串并发送请求,用于密码爆破或Fuzzing测试.因为载荷位置标记、载荷设置等都是比较基础的字符串操作,故该模块的核心在开始攻击后的部分,如算法2所示:

    算法2.站点入侵算法.

    输入:目标服务器地址target、目标服务器端口号port、请求包、相应队列deque.

    ① 标记载荷位置、输入或导入载荷集;

    ② IF 攻击类型为“Sniper”

    ③ THEN 使用载荷集中的载荷逐一替换请求包中被标记的位置(即每次只替换1个位置);

    ④ ELSE IF 攻击类型为“Battering ram”

    ⑤ THEN使用载荷集中的载荷同时替换被标记的所有位置(即每次替换多个位置);

    ⑥ END IF

    ⑦ 使用SocketHTTP函数发送修改后的请求;

    ⑧ 将得到的响应以及关键信息放入deque中;

    ⑨ 主进程从deque中取出响应信息,以表格形式显示;

    ⑩ IF 结果存在异常

    由于每个发送的请求相互独立,没有需要共享的变量,也不需要加锁,所以可以将载荷集划分成几个部分,交给不同的线程处理,效率比较高.

    3.5 漏洞扫描

    前4个模块属于辅助人工测试的模块,漏洞扫描模块主要是自动化的漏洞扫描,分为单页面的漏洞扫描和整站漏洞扫描,其中单页面扫描可以选择调用其他安全工具如Sqlmap.主要检测的漏洞有SQL注入和XSS跨站脚本攻击.

    3.5.1 外部工具调用

    在该模块中,我们使用PyQt的QProcess新建1个子进程,这个子进程会执行预设的或用户自行输入的命令,打开所选择的工具,将该子进程输出的信号绑定到1个槽中,一旦输出缓冲区中有字符串就会将缓冲区内的内容添加到文本框中.另外,由于有时需要与工具进行交互,所以在界面中保留1个输入框,用QProcess的write方法将命令通过管道写入子进程,当子进程结束时输入无效.

    以Sqlmap的调用为例,预设的命令是“python2 sqlmap.py -u [url]”,这里[url]要用输入框中的URL替换,Sqlmap会检测该URL对应页面的所有SQL漏洞.

    3.5.2 单页面漏洞扫描

    和外部工具的调用类似,单页面漏洞扫描同样需要开启1个子进程调用对应文件.单页面扫描时间复杂度不大,所以无需使用并行的方法加速.子进程每检测到1个漏洞就将输出通过管道传递给主进程,主进程再将其显示在文本框内.扫描的主要原理是将攻击载荷加到请求的GET参数或POST参数中,通过分析响应结果判断页面是否存在漏洞.

    针对不同类型的漏洞有不同的检测方法,该模块主要检测SQL注入漏洞和XSS跨站脚本攻击漏洞.SQL注入漏洞主要分为bool型盲注、报错注入等[18],它们的检测方式也各不相同.对于bool型盲注,主要是通过在GET和POST参数部分加上或者替换类似于and 1=1和and 1=2这样的载荷,如果2次请求返回的页面长度不同,可以认为2个载荷成功插入SQL查询并且执行,因此页面存在bool型盲注漏洞.对于报错注入,通过在GET和POST参数部分加上可使Web后台报错的载荷,例如单引号.返回的页面中如果有相关错误信息则认为存在报错注入.至于延时盲注,由于对程序效率影响比较大,这里不进行检测.对于XSS漏洞的检测与之类似,在GET和POST参数中加上XSS攻击载荷,然后发送请求,如果返回的页面载荷被成功植入,则说明页面存在XSS漏洞.

    所有扫描需要的载荷以及对应的测试方式都存放在1个XML文件里,框架已经有一些基本的载荷,使用者也可以自行添加,攻击载荷形式如下:

    〈bool〉

    〈p1〉 OR 1=1〈/p1〉

    〈p2〉 OR 1=2〈/p2〉

    〈type〉0〈/type〉

    〈/bool〉

    bool表示该攻击载荷用于检测bool型盲注,p1和p2内是攻击载荷,需要分别添加到请求参数中,并判断响应长度是否一样.type标签表明载荷的使用规则,type为0时表明该载荷需要追加到参数后面,type为1时则表明需要用载荷替换参数内容.

    〈error〉

    〈p〉′〈/p〉

    〈grep〉语法错误〈/grep〉

    〈type〉0〈/type〉

    〈/error〉

    error表示检测报错注入,与bool型盲注不同的是p内是攻击载荷,grep内是需要从响应中寻找的错误信息.

    〈xss〉

    〈p〉lt;script>alert(1)</script>

    〈/p〉

    〈grep〉lt;script>alert(1)<

    /script>〈/grep〉

    〈type〉1〈/type〉

    〈/xss〉

    XSS表示检测XSS漏洞,和报错注入检测方式比较类似.

    3.5.3 整站漏洞扫描

    实现整站扫描分为2部分:整站页面的爬取和单页面漏洞扫描.整站页面的爬取用的是站点地图模块所使用的爬虫算法,单页面漏洞扫描已经在前文中进行详细叙述,只需将二者结合,即每爬取1个URL就使用漏洞扫描引擎进行检测,实时返回结果.

    Web应用漏洞的自动化扫描实际上就是模拟手工检测的方式,向目标网站发送请求并分析响应情况.由于电网系统是国家的要害部门,进行真实环境的测试需要层层审批,因此通过自身可操纵的网站来模拟微电网中的能源管理系统,进行漏洞检测.

    4.1 实验环境

    操作系统:Windows 7 Ultimate;

    CPU:Intel Core i5-5200u;

    内存:4.00 GB;

    开发工具:Python3.5+PyQt5+SQLite;

    开发环境:Sublime Text3.

    4.2 实验过程及结果

    4.2.1 站点地图

    用户输入域名,并选择协程数,点击开始,左边会即时显示扫描到的该域名下的页面,以目录树的形式显示,如果点击停止则会中止扫描.如果点击1个扫描到的URL,在右侧栏中,上边的内嵌浏览器会展示该页面,下边的标签栏会显示爬取该URL的请求包和响应包,如图5所示:

    图5 站点地图

    4.2.2 HTTP代理

    当打开代理功能时,设置浏览器的HTTP代理服务器为localhost:6666(该模块的代理服务器会监听本地的6666端口),那么访问HTTP网页时,请求会被拦截,并在如图6所示的框中显示出来,此时所访问的页面不会被加载.

    图6 HTTP代理界面

    当点击释放时请求会被发送,并将响应返回给浏览器,百度的首页加载成功,如图7所示.

    图7 点击释放后的HTTP代理界面

    对于每个拦截到的HTTP请求,还可以选择发送到请求重放模块或入侵模块,如图8所示.

    图8 发送拦截到的HTTP请求

    4.2.3 请求重放

    请求重放模块可以接收由HTTP代理模块传来的请求,或者是由使用者自行输入请求包,由此发送请求后可以得到响应包,如图9所示,右侧显示了相应的头部和主体HTML代码.

    图9 请求重放界面

    如果请求包中不存在Host头部,则需要输入目标主机Host.

    图10 输入目标服务器Host

    4.2.4 入侵

    图11 入侵模块流程

    该模块首先需要给定1个请求包以及请求的服务器地址,这个可以由HTTP代理模块传入,或者由使用者自己输入,如图10所示.然后需要在请求包中标记一些字符串,并选择攻击载荷,即1组字符串,该模块会用这组字符串分别替换请求包中被标记的字符串,并发送新的请求,将每个请求的响应结果信息发送给主线程.该模块可以用于密码爆破、模糊测试等.完整流程如图11所示.

    4.2.5 扫描

    在该模块中,用户在单页面扫描选项卡中可以选择调用其他安全工具,既可以通过自定义命令,也可以使用程序预设的命令.此处以Sqlmap为例,预设的命令是“python2 sqlmap.py -u [url]”,这里[url]要用输入框中的URL替换,Sqlmap会检测该URL对应页面的所有SQL漏洞,如图12所示,检测出了该测试网站中存在的SQL注入漏洞.

    如图13所示,如果不选择工具(即选择No tool选项),则会使用该框架自身的扫描引擎,可以看出,同样检测出相关漏洞,每检测出1个漏洞会标明它的类型、URL以及使用的攻击载荷.

    另外,该模块还支持整站扫描功能,自动扫描某域名下的所有页面,并检测漏洞.由于整站扫描时页面比较多,比较耗时,所以使用协程来提高效率,将漏洞的检测和页面的爬取放到1个消息循环中,并使用多任务并行处理.用户可以选择协程的数量,协程数越多速度越快,但也越不稳定,框架中默认为50个协程.

    图12 使用Sqlmap进行单页面扫描

    图13 使用自身扫描引擎进行单页面扫描

    4.3 系统对比

    为了更客观地评测本文所提出的漏洞检测框架,我们与文献[19]进行了系统性对比,如表1所示:

    表1 系统对比分析

    可以看出,本文提出的框架功能更为全面,漏洞扫描引擎更强大,且可扩展性更强.对于扫描粒度而言,文献[19]更适合于单台主机的本地扫描,而本文提出的框架更适合Web服务的安全性检测,服务范围更广.但该框架缺少检测结果的可视化界面,对于非技术人员有一定的操作难度.

    本文针对智能微电网能源管理系统中潜在的Web应用漏洞设计实现了一个较为全面的漏洞检测框架,用于辅助安全人员进行漏洞检测或自动化的漏洞扫描.相比其他漏洞扫描工具,本文实现的框架功能较为丰富,包含5个功能模块:站点地图、HTTP代理、请求重放、入侵、扫描,可独立使用,也可相互调用输出结果.将每个功能封装为单独的文件和API接口,便于后续功能的扩展.同时使用协程技术来提高检测效率,占用资源较少.最后,通过实验对实际网站进行测试,证明本文所提出的框架的有效性.

    本文框架的稳定性和易用性较好,但在功能上仍有许多待改进和完善的地方,如增加更多种类漏洞的检测,增加更多用户可以控制的选项.此外,增加一个生成漏洞结果报表的功能,更有助于微电网相关人员直观地了解系统中的安全状况,提升系统的可用性.

    猜你喜欢 漏洞页面框架 漏洞今日农业(2022年13期)2022-09-15刷新生活的页面保健医苑(2022年1期)2022-08-30有机框架材料的后合成交换黑龙江大学自然科学学报(2022年1期)2022-03-29框架小资CHIC!ELEGANCE(2022年1期)2022-01-11答案动漫界·幼教365(中班)(2021年4期)2021-05-23让Word同时拥有横向页和纵向页电脑爱好者(2020年17期)2020-09-14三明:“两票制”堵住加价漏洞中国卫生(2016年5期)2016-11-12漏洞在哪儿儿童时代(2016年6期)2016-09-14关于原点对称的不规则Gabor框架的构造燕山大学学报(2015年4期)2015-12-25高铁急救应补齐三漏洞中国卫生(2015年12期)2015-11-10
    相关热词搜索: 扩展性 电网 漏洞

    • 文学百科
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章