电气工程
会计论文
金融论文
国际贸易
财务管理
人力资源
轻化工程
德语论文
工程管理
文化产业管理
信息计算科学
电气自动化
历史论文
机械设计
电子通信
英语论文
物流论文
电子商务
法律论文
工商管理
旅游管理
市场营销
电视制片管理
材料科学工程
汉语言文学
免费获取
制药工程
生物工程
包装工程
模具设计
测控专业
工业工程
教育管理
行政管理
应用物理
电子信息工程
服装设计工程
教育技术学
论文降重
通信工程
电子机电
印刷工程
土木工程
交通工程
食品科学
艺术设计
新闻专业
信息管理
给水排水工程
化学工程工艺
推广赚积分
付款方式
首页
|
毕业论文
|
论文格式
|
个人简历
|
工作总结
|
入党申请书
|
求职信
|
入团申请书
|
工作计划
|
免费论文
|
现成论文
|
论文同学网
|
全站搜索
搜索
高级搜索
当前位置:
论文格式网
->
免费论文
->
其他论文
计算机安全实用技术及研究(三)
本论文在
其他论文
栏目,由
论文格式
网整理,转载请注明来源
www.lwgsw.com
,更多论文,请点
论文格式范文
查看
大凡上网久点的网人对缓冲区溢出应该是知道的,因为它的确是一个众人皆知、非常危险的漏洞,它是个不分什么系统、什么程序,都广泛存在的一个漏洞。以缓冲区溢出为类型的安全漏洞是最为常见,也是被黑客最多使用的攻击漏洞。所以了解缓冲区溢出方面的知识对于黑客也好或者管理员也好也或者是一般的网人也好都相对是有必要的。
一、缓冲区溢出的概念和原理
缓冲区是内存中存放数据的地方。在程序试图将数据放到机器内存中的某一个位置的时候,因为没有足够的空间就会发生缓冲区溢出。而人为的溢出则是有一定企图的,攻击者写一个超过缓冲区长度的字符串,然后植入到缓冲区,而再向一个有限空间的缓冲区中植入超长的字符串可能会出现两个结果,一是过长的字符串覆盖了相邻的存储单元,引起程序运行失败,严重的可导致系统崩溃;另有一个结果就是利用这种漏洞可以执行任意指令,甚至可以取得系统root特级权限。大多造成缓冲区溢出的原因是程序中没有仔细检查用户输入参数而造成的。缓冲区是程序运行的时候机器内存中的一个连续块,它保存了给定类型的数据,随着动态分配变量会出现问题。大多时为了不占用太多的内存,一个有动态分配变量的程序在程序运行时才决定给它们分配多少内存。这样想下去的话,如果说要给程序在动态分配缓冲区放入超长的数据,它就会溢出了。一个缓冲区溢出程序使用这个溢出的数据将汇编语言代码放到机器的内存里,通常是产生root权限的地方,这就不是什么好现象了。仅仅就单个的缓冲区溢出惹眼,它并不是最大的问题根本所在。但如果溢出送到能够以root权限运行命令的区域,一旦运行这些命令,那可就等于把机器拱手相让了。
二、缓冲区溢出漏洞攻击方式
缓冲区溢出漏洞可以使任何一个有黑客技术的人取得机器的控制权甚至是最高权限。一般利用缓冲区溢出漏洞攻击root程序,大都通过执行类似“exec(sh)”的执行代码来获得root 的shell。黑客要达到目的通常要完成两个任务,就是在程序的地址空间里安排适当的代码和通过适当的初始化寄存器和存储器,让程序跳转到安排好的地址空间执行。
1、在程序的地址空间里安排适当的代码:
其实在程序的地址空间里安排适当的代码往往是相对简单的,但也同时要看运气如何。如果说要攻击的代码在所攻击程序中已经存在了,那么就简单的对代码传递一些参数,然后使程序跳转到目标中就可以完成了。攻击代码要求执行“exec(‘/bin/sh’)”,而在libc库中的代码执行“exec(arg)”,当中的“arg”是个指向字符串的指针参数,只要把传入的参数指针修改指向“/bin/sh”,然后再跳转到libc库中的响应指令序列就OK了。当然了,很多时候这个可能性是很小的,那么就得用一种叫“植入法”的方式来完成了。当向要攻击的程序里输入一个字符串的话,程序就会把这个字符串放到缓冲区里,这个字符串包含的数据是可以在这个所攻击的目标的硬件平台上运行的指令序列。缓冲区可以设在像:堆栈(自动变量)、堆(动态分配的)和静态数据区(初始化或者未初始化的数据)等的任何地方。也可以不必为达到这个目的而溢出任何缓冲区,只要找到足够的空间来放置这些攻击代码就够了。
2、将控制程序转移到攻击代码的形式:
所有的这些方法都是在寻求改变程序的执行流程,使它跳转到攻击代码,最为基本就是溢出一个没有检查或者其它漏洞的缓冲区,这样做就会扰乱程序的正常执行次序。通过溢出某缓冲区,可以改写相近程序的空间而直接跳转过系统对身份的验证。原则上来讲攻击时所针对的缓冲区溢出的程序空间可为任意空间。但因不同地方的定位相异,所以也就带出了多种转移方式。
(1)unction Pointers(函数指针)
在程序中,“void (* foo) ( )”声明了个返回值为“void” Function Pointers的变量“foo”。Function Pointers可以用来定位任意地址空间,攻击时只需要在任意空间里的Function Pointers邻近处找到一个能够溢出的缓冲区,然后用溢出来改变Function Pointers。当程序通过Function Pointers调用函数,程序的流程就会实现。这个你可调用Linux下的superprobe程序体验一下。
(2)ctivation Records(激活记录)
当一个函数调用发生时,堆栈中会留驻一个Activation Records,它包含了函数结束时返回的地址。执行溢出这些自动变量,使这个返回的地址指向攻击代码,再通过改变程序的返回地址。当函数调用结束时,程序就会跳转到事先所设定的地址,而不是原来的地址。这样的溢出方式也是较常见的。你在使用漏洞扫描(Unix下的SATAN或者NT下的Retina)器时,最好是多注意“stack smashing attack”的字样。
(3)Longjmp buffers(长跳转缓冲区)
在C语言中包含了一个简单的检验/恢复系统,称为“setjmp/longjmp”,意思是在检验点设定“setjmp(buffer)”,用longjmp(buffer)“来恢复检验点。如果攻击时能够进入缓冲区的空间,感觉“longjmp(buffer)”实际上是跳转到攻击的代码。像Function Pointers一样,longjmp缓冲区能够指向任何地方,所以找到一个可供溢出的缓冲区是最先应该做的事情。
3、植入综合代码和流程控制:
常见的溢出缓冲区攻击类是在一个字符串里综合了代码植入和ctivation Records。攻击时定位在一个可供溢出的自动变量,然后向程序传递一个很大的字符串,在引发缓冲区溢出改变ctivation Records的同时植入代码(权因C在习惯上只为用户和参数开辟很小的缓冲区)。植入代码和缓冲区溢出不一定要一次性完成,可以在一个缓冲区内放置代码(这个时候并不能溢出缓冲区),然后通过溢出另一个缓冲区来转移程序的指针。这样的方法一般用于可供溢出的缓冲区不能放入全部代码时的。如果想使用已经驻留的代码不需要再外部植入的时候,通常必须先把代码做为参数。在libc(熟悉C的朋友应该知道,现在几乎所有的C程序连接都是利用它来连接的)中的一部分代码段会执行“exec(something)”,当中的something就是参数,使用缓冲区溢出改变程序的参数然后利用另一个缓冲区溢出使程序指针指向libc中的特定的代码段。
4、缓冲区溢出的防患:
缓冲区溢出的漏洞被发现到利用以来一直都是网络安全领域的最大隐患,很多安全人士均对这些漏洞做了仔细的研究,但是缓冲区溢出的完全防止往往因为这样那样的人为或者其它的因素仍显得有点力不从心。在这篇文章里,就目前缓冲区溢出漏洞的几种保护方法做个简单的描述。
(1)正确的编写代码
我想在编写代码的时候一般不会有人故意想要发生错误的,但是丝毫的错误往往会造成严重后果(C语言多是字符串因0收尾,往往就是一个很不安全例子)。所以正确的编写代码是很关键的。
在编写时以免错误发生最原始的方法就是用gerp来找出源代码中较容易产生的漏洞的库的调用。像对sprintf和strcpy的调用,这两个函数都不会检查参数输入的长度。有的在编写的时候采用了sprintf和strcpy的替代函数来防止,但是还是会有问题发生的。因为这些错误的隐蔽性,所以就出现了查错工具faultin-jection。faultin-jection可以通过人为随时产生一些缓冲区溢出来找到代码的安全漏洞。只能说faultin-jection等类似的工具可以让编写时缓冲区溢出的漏洞更少一点,而完全的没有则是不现实的。因为它们确实不可能找到所有的溢出缓冲区的漏洞。编写时重复的检查代码的漏洞可以使程序更加完美和安全。
(2)非执行的缓冲区
在老版的UNIX系统中,程序的数据段地址空间是不可执行的,这样就使得黑客在利用缓冲区植入代码时不能执行。但是现在的UNIX和Windows系统考虑到性能和功能的速率和使用合理化,大多在数据段中动态形式的放入了可执行的代码,为了保证程序的兼容性不可能使用所有程序的数据段不可执行间。但可以通过只设定堆栈数据段不可执行,这样就很大程度上保证了程序的兼容性能。UNIX、Linux、Windows、Solaris都已经发布了这方面的补丁。
(3)检查数组边界
数组边界检查完全没有缓冲区溢出的产生,所以只要保证数组不溢出,那么缓冲区溢出攻击也就只能是望梅止渴了。实现数组边界检查,所有的对数组的读写操作都应该被检查,这样可以保证对数组的操作在正确的范围之内。检查数组是一件叫人头大的事情,所以利用一些优化技术来检查就减少了负重。可以使用Compaq公司专门为Alpha CPU开发的Compaq C编译器、Jones&Kelly的C的数组边界检查、Purify存储器存取检查等等来检查。
所有的缓冲区溢出漏洞都归于C语言的“功劳”。如果只有类型-安全的操作才可以被允许执行,这样就不会出现对变量的强制操作。类型-安全的语言被认定为Java和ML等,但作为Java执行平台的Java虚拟机是C程序,所以攻击JVM的途径就是使JVM的缓冲区溢出。
(4)程序指针完整性检查
程序指针完整性检查在程序指针被引用之前检测到它的改变,这个时候即便是有人改变了程序的指针,也辉因为系统早先已经检测到了指针的改变而不会造成指针对利用的。但程序指针完整性检查不能解决所有的缓冲区溢出问题;如果有人使用了其它的缓冲区溢出,那么程序指针完整性检查就不可能检测到了。可话又说回来了,程序指针完整性检查在性能上却有着很大的优势,并且有良好的兼容性。
2.1.4 网络监听攻击技术
在网络中,当信息进行传播的时候,可以利用工具,将网络接口设置在监听的模式,便可将网络中正在传播的信息截获或者捕获到,从而进行攻击。网络监听在网络中的任何一个位置模式下都可实施进行。而黑客一般都是利用网络监听来截取用户口令。比如当有人占领了一台主机之后,那么他要再想将战果扩大到这个主机所在的整个局域网话,监听往往是他们选择的捷径。很多时候我在各类安全论坛上看到一些初学的爱好者,在他们认为如果占领了某主机之后那么想进入它的内部网应该是很简单的。其实非也,进入了某主机再想转入它的内部网络里的其它机器也都不是一件容易的事情。因为你除了要拿到他们的口令之外还有就是他们共享的绝对路径,当然了,这个路径的尽头必须是有写的权限了。在这个时候,运行已经被控制的主机上的监听程序就会有大收效。不过却是一件费神的事情,而且还需要当事者有足够的耐心和应变能力。
一、网络监听的原理
Ethernet(以太网,它是由施乐公司发明的一种比较流行的局域网技术,它包含一条所有计算机都连接到其上的一条电缆,每台计算机需要一种叫接口板的硬件才能连接到以太网)协议的工作方式是将要发送的数据包发往连接在一起的所有主机。在包头中包括有应该接收数据包的主机的正确地址,因为只有与数据包中目标地址一致的那台主机才能接收到信息包,但是当主机工作在监听模式下的话不管数据包中的目标物理地址是什么,主机都将可以接收到。许多局域网内有十几台甚至上百台主机是通过一个电缆、一个集线器连接在一起的,在协议的高层或者用户来看,当同一网络中的两台主机通信的时候,源主机将写有目的的主机地址的数据包直接发向目的主机,或者当网络中的一台主机同外界的主机通信时,源主机将写有目的的主机IP地址的数据包发向网关。但这种数据包并不能在协议栈的高层直接发送出去,要发送的数据包必须从TCP/IP协议的IP层交给网络接口,也就是所说的数据链路层。网络接口不会识别IP地址的。在网络接口由IP层来的带有IP地址的数据包又增加了一部分以太祯的祯头的信息。在祯头中,有两个域分别为只有网络接口才能识别的源主机和目的主机的物理地址这是一个48位的地址,这个48位的地址是与IP地址相对应的,换句话说就是一个IP地址也会对应一个物理地址。对于作为网关的主机,由于它连接了多个网络,它也就同时具备有很多个IP地址,在每个网络中它都有一个。而发向网络外的祯中继携带的就是网关的物理地址。Ethernet中填写了物理地址的祯从网络接口中,也就是从网卡中发送出去传送到物理的线路上。如果局域网是由一条粗网或细网连接成的,那么数字信号在电缆上传输信号就能够到达线路上的每一台主机。再当使用集线器的时候,发送出去的信号到达集线器,由集线器再发向连接在集线器上的每一条线路。这样在物理线路上传输的数字信号也就能到达连接在集线器上的每个主机了。当数字信号到达一台主机的网络接口时,正常状态下网络接口对读入数据祯进行检查,如果数据祯中携带的物理地址是自己的或者物理地址是广播地址,那么就会将数据祯交给IP层软件。对于每个到达网络接口的数据祯都要进行这个过程的。但是当主机工作在监听模式下的话,所有的数据祯都将被交给上层协议软件处理。
当连接在同一条电缆或集线器上的主机被逻辑地分为几个子网的时候,那么要是有一台主机处于监听模式,它还将可以接收到发向与自己不在同一个子网(使用了不同的掩码、IP地址和网关)的主机的数据包,在同一个物理信道上传输的所有信息都可以被接收到。
在UNIX系统上,当拥有超级权限的用户要想使自己所控制的主机进入监听模式,只需要向Interface(网络接口)发送I/O控制命令,就可以使主机设置成监听模式了。而在Windows9x的系统中则不论用户是否有权限都将可以通过直接运行监听工具就可以实现了。
在网络监听时,常常要保存大量的信息(也包含很多的垃圾信息),并将对收集的信息进行大量的整理,这样就会使正在监听的机器对其它用户的请求响应变的很慢。同时监听程序在运行的时候需要消耗大量的处理器时间,如果在这个时候就详细的分析包中的内容,许多包就会来不及接收而被漏走。所以监听程序很多时候就会将监听得到的包存放在文件中等待以后分析。分析监听到的数据包是很头疼的事情。因为网络中的数据包都非常之复杂。两台主机之间连续发送和接收数据包,在监听到的结果中必然会加一些别的主机交互的数据包。监听程序将同一TCP会话的包整理到一起就相当不容易了,如果你还期望将用户详细信息整理出来就需要根据协议对包进行大量的分析。Internet上那么多的协议,运行进起的话这个监听程序将会十分的大。
现在网络中所使用的协议都是较早前设计的,许多协议的实现都是基于一种非常友好的,通信的双方充分信任的基础。在通常的网络环境之下,用户的信息包括口令都是以明文的方式在网上传输的,因此进行网络监听从而获得用户信息并不是一件难点事情,只要掌握有初步的TCP/IP协议知识就可以轻松的监听到你想要的信息的。前些时间美籍华人China-babble曾提出将望路监听从局域网延伸到广域网中,但这个想法很快就被否定了。如果真是这样的话我想网络必将天下大乱了。而事实上现在在广域网里也可以监听和截获到一些用户信息。只是还不够明显而已。在整个Internet中就更显得微不足道了。
二、检测网络监听的方法
网络监听在上述中已经说明了。它是为了系统管理员管理网络,监视网络状态和数据流动而设计的。但是由于它有着截获网络数据的功能所以也是黑客所惯用的伎俩之一。网络监听是很难被发现的。当运行监听程序的主机在进听的过程中只是被动的接收在以太网中传输的信息,它不会跟其它的主机交换信息的,也不能修改在网络中传输的信息包。这就说明了网络监听的检测是比较麻烦的事情。
一般情况下可以通过ps-ef或者ps-aux来检测。但大多实施监听程序的人都会通过修改ps的命令来防止被ps-ef的。修改ps只需要几个shell把监听程序的名称过滤掉就可以了。
当你怀疑网内某太机器正在实施监听程序的话,可以用正确的IP地址和错误的物理地址去ping它,这样正在运行的监听程序就会做出响应的。这是因为正常的机器一般不接收错误的物理地址的ping信息的。但正在进听的机器就可以接收,要是它的IP stack不再次反向检查的话就会响应的。不过这种方法对很多系统是没效果的,因为它依赖于系统的IP stack。
另一种就是向网上发大量不存在的物理地址的包,而监听程序往往就会将这些包进行处理,这样就会导致机器性能下降,你可以用icmp echo delay来判断和比较它。还可以通过搜索网内所有主机上运行的程序,但这样做其的难度可想而知,因为这样不但是大的工作量,而且还不能完全同时检查所有主机上的进程。可是如果管理员这样做也会有很大的必要性,那就是可以确定是否有一个进程是从管理员机器上启动的。
在Unix中可以通过ps –aun或ps –augx命令产生一个包括所有进程的清单:进程的属主和这些进程占用的处理器时间和内存等。这些以标准表的形式输出在STDOUT上。如果某一个进程正在运行,那么它将会列在这张清单之中。但很多黑客在运行监听程序的时候会毫不客气的把ps或其它运行中的程序修改成Trojan Horse程序,因为他完全可以做到这一点的。如果真是这样那么上述办法就不会有结果的。但这样做在一定程度上还是有所作为的。在Unix和Windows NT上很容易就能得到当前进程的清单了。但DOS、Windows9x很难做到。
有个叫Ifstatus的运行在Unix下的工具,它可以识别出网络接口是否正处于调试状态下或者是在进听装下。要是网络接口运行这样的模式之下,那么很有可能正在受到监听程序的攻击。Ifstatus一般情况下不会产生任何输出的,当它检测到网络的接口处于监听模式下的时候才回输出。管理员可以将系统的cron参数设置成定期运行Ifstatus,如果有好的cron进程的话可以将它产生的输出用mail发送给正在执行cron任务的人,要实现可以在crontab目录下加****/usr/local/etc/ifstatus一行参数。这样不行的话还可以用一个脚本程序在crontab下00****/usr/local/etc/run-ifstatus。
2.1.5 IP欺骗攻击
这种攻击方式主要应用于用IP协议传送的报文中。它仅适用于少数几种平台。所谓IP欺骗,无非就是伪造他人的源IP地址。其实质就是让一台机器来扮演另一台机器,籍以达到蒙混过关的目的。IP欺骗技术只能实现对某些特定的运行Free TCP/IP协议的计算机进行攻击。一般来说,任何使用Sun RPC调用的配置、利用IP地址认证的网络服务、MIT的X Window系统、R服务等这些服务易受到IP欺骗攻击。
IP欺骗式攻击形式多种多样,从随机扫描到利用系统已知的一些漏洞。IP欺骗攻击通常发生于一台主机被确信在安全性方面存在漏洞之后。此时入侵者已作好了实施一次IP欺骗攻击的准备,他(或她)知道目标网络存在漏洞并且知道该具体攻击哪一台主机。IP欺骗攻击对技术的要求相当高,它的原理是这样的:
1.假设Z企图攻击A,而A信任B,并且Z已经知道了A、B之间存在信任关系。
2.Z想办法使B的网络功能暂时瘫痪,以免对攻击造成干扰。
3.Z必须确定A当前的ISN。首先连向25端口,开始记录A的ISN,以及Z到A的大致的RTT(round trip time)。这个步骤要重复多次以便求出 RTT的平均值。现在Z知道了A的ISN基值和增加规律,也知道了从Z到A需要RTT/2的时间。
4.Z将自己的IP改成了B的IP后向A发送带有SYN标志的数据段请求连接。这时A会以为是B发的SYN,从而导致A向B回送SYN+ACK数据段,但此时的B已经无法响应。
5.Z暂停一小会儿,让A有足够时间发送SYN+ACK,因为Z看不到这 个包。然后Z再次伪装成B向A发送ACK,此时发送的数据段带有 Z预测的A的ISN+1。如果预测准确,连接建立,数据传送开始。
6.到此时,欺骗攻击可以说完成了一大半,因为此时A仍然会向B发送数据,而不是Z,Z 仍然无法看到A发往B的数据段。
7.Z必须按照rlogin协议标准假冒B向A发送类似 "cat + + >> ~/.rhosts" 这样的命令, 于是攻击完成。
从上面的过程我们可以看到,攻击最困难的地方就是预测A的ISN。这要求攻击者对协议本身相当熟悉,不是一般的黑客能够做到的。
2.1.6 扫描程序与口令攻击
扫描的工作原理通过选用远程TCP/IP不同的端口的服务,并记录目标给予的回答,通过这种方法,可以搜集到很多关于目标主机的各种有用的信息(比如:是否能用匿名登陆!是否有可写的FTP目录,是否能用TELNET,HTTPD是用ROOT还是nobady在跑!)
扫描并不是一个直接的攻击网络漏洞的程序,它仅仅能帮助我们发现目标机的某些内在的弱点。一个好的扫描器能对它得到的数据进行分析,帮助我们查找目标主机的漏洞。但它不会提供进入一个系统的详细步骤。
在网络上最常见的就是扫描了,扫描大致可分为几种:端口扫描、系统信息扫描、漏洞扫描。扫描一般都是用专门的工具进行,现在网上的黑客工具属于扫描工具的有很多,而且功能越来越强。很多的扫描工具都是支持多进程、多线程的。可以同时扫描整个的B类或C类网段。
一个黑客进行入侵,最必要的就是对目标进行扫描。所谓“知己知彼,百战百胜”,要想成功入侵,对目标的信息一定要进行详尽的收集,而这一步的实施就主要靠扫描。
网上的扫描程序、工具基本上是现下现用的,不需要使用者深入了解什么专业的知识。这也是一个初级黑客用得最多的原因。我用过很多的扫描工具:portscan、Wingate scan、PingPlus、SuperScan、rscan、Shadow scan等等,其中不乏精品。对于我们来讲,使用扫描软件是必要的,用来扫扫自己的机器,从中找到漏洞并及时弥补,才不会给黑客可乘之机。
口令攻击是黑客最喜欢采用的入侵在线网络的方法。一般他们都采用逐个试口令直到成功为止。在“行话”中常把他们使用的方法叫做“字典攻击”。所谓“字典攻击”就是黑客用专门的破解软件对系统的用户名和口令进行猜测性的攻击。从理论上来讲,只要Hacker使用的字典文件中包含那个密码字串的话,你的密码就是再复杂也会被破解出来的。而在多操作系统中,UNIX 是最容易受到字典攻击的对象,因为UNIX不象其他操作系统一样在一定次数的登陆(注册)失败后就封锁这个用户。
我们知道基于UNIX下的加密算法——DES加密,但关于DES加密技术的材料很少,这主要是IBM应美国国家安全局的要求把某些文档定的为了国家机密文档。而UNIX下的一个加密程序Crypt(3) 却广泛的流传,甚至它的源代码随处可得。所以我介绍一下Crypt(3)的加密过程:
1】以明码正文形式取出口令。
2】把口令作为关键词,用一系列的“0”进行敝屏加密。
3】把一个64位二进制值转变成以56位为变量基础的唯一的64位二进制值作为关键字再加密。
兼于CRYPT(3)的加密随机性之大,56位关键字的存在可能 性超过7×10E16种,所以想要逆向解码是不可能的,但是我们可以用比较法,其方法如下:
1】获得一个字典文件,它是一个单词表。
2】把这些单词用用户的加密程序进行加密,(符合DES标准)。
3】把每个单词加密后的结果与目标加密后的结果进行比较 如果匹配,则该单词就是加密关键字。
上面的可能说得有点深奥,也许大家不太懂。不过有人已经编出了现成的程序专门对付UNIX的加密算法。最有名的莫过于John the Riper。
首页
上一页
1
2
3
4
5
6
下一页
尾页
3
/6/6
相关论文
上一篇
:
LED数码管显示技术
下一篇
:
防御网站被攻击对策探讨
Tags:
计算机
安全
实用技术
研究
【
收藏
】 【
返回顶部
】
人力资源论文
金融论文
会计论文
财务论文
法律论文
物流论文
工商管理论文
其他论文
保险学免费论文
财政学免费论文
工程管理免费论文
经济学免费论文
市场营销免费论文
投资学免费论文
信息管理免费论文
行政管理免费论文
财务会计论文格式
数学教育论文格式
数学与应用数学论文
物流论文格式范文
财务管理论文格式
营销论文格式范文
人力资源论文格式
电子商务毕业论文
法律专业毕业论文
工商管理毕业论文
汉语言文学论文
计算机毕业论文
教育管理毕业论文
现代教育技术论文
小学教育毕业论文
心理学毕业论文
学前教育毕业论文
中文系文学论文
最新文章
热门文章
推荐文章