win32.EXPLOIT.IMG-WMF.th.8704(漏洞利用程序)怎么杀啊

win32.EXPLOIT.IMG-WMF.th.8704(漏洞利用程序)怎么杀啊,第1张

Win32EXPLOITIMG-WMFik57344

病毒名称(中文):病毒别名:威胁级别:★☆☆☆☆病毒类型:病毒长度:23552影响系统:Win9xWinMeWinNTWin2000WinXPWin2003

病毒行为:

该病毒会在磁盘中释放出文件。

在磁盘中释放出以下文件:

C:\sytem

病毒会连接作者指定的网址:

病毒会从>

C语言的gets函数一般包含在stdioh头文件里,如果没有包含比头文件那可能会有问题。第二种情况包含了还出问题,说明你的编译器已经不支持这个函数了,这个函数非常不安全,容易造成溢出,建议换成fgets函数。

函数原型

char fgets(char buf, int bufsize, FILE fp);

数解释:

参数一是输入字符串存放地址,

参数二是存放地址最大容量,

参数三是从哪里输入,可以从文件也可从输入设备,如果从输入设备输入这个参数可以写成stdin,如果从文件输入此参数为文件指针。

返回值

输入成功返回参数一,失败返回NULL

补充知识:

为什么gets不让用呢,我们可以看它的原型:char gets(char buf);

这个函数可以一直输入知道换行或者EOF,它并不考虑buf空间是否足够大能放下,这就容易导致溢出,有些别有用心的人就会利用这个漏洞去攻击你的程序

而fgets可以通过第二参数保证不会读入超过buf空间的字符。

缓冲区溢出攻击利用了目标程序的缓冲区溢出漏洞,通过 *** 作目标程序堆栈并暴力改写其返回地址,从而获得目标控制权。它的原理是:向一个有限空间的缓冲区中拷贝过长的字符串,这带来两种后果,一是过长的字符串覆盖了相临的存储单元而造成程序瘫痪,甚至造成宕机、系统或进程重启等;二是可让攻击者运行恶意代码,执行任意指令,甚至获得超级权限等。

事实上,在网络空间中利用这种缓冲区溢出漏洞而发起的攻击屡见不鲜。早在1988年,美国康奈尔大学的计算机科学系研究生,23岁的莫里斯利用Unix fingered程序不限制输入长度的漏洞,输入512个字符后使缓冲器溢出。莫里斯又写了一段特别大的程序使他的恶意程序能以root(根)身份执行,并感染到其他机器上。年初名燥一时的“SQL Slammer”蠕虫王的发作原理,就是利用未及时更新补丁的MS SQL Server数据库缓冲区溢出漏洞,采用不正确的方式将数据发到MS SQL Server的监听端口,这个错误可以引起缓冲溢出攻击。攻击代码通过缓冲溢出获得非法权限后,被攻击主机上的Sqlserverexe进程会尝试向随机的IP地址不断发送攻击代码,感染其他机器,最终形成UDP Flood,造成网络堵塞甚至瘫痪。

由上可知,缓冲区溢出攻击通常是在一个字符串里综合了代码植入和激活纪录。如攻击者将目标定为具有溢出漏洞的自动变量,然后向程序传递超长的字符串,进而引发缓冲区溢出。经过精巧设计的攻击代码以一定的权限运行漏洞程序,获得目标主机的控制权。这种攻击手段屡次得逞主要是利用了程序中边境条件、函数指针等设计不当问题,即利用了C程序本身的不安全性。大多数Windows、Linux、Unix系列的开发都依赖于C语言,所以缓冲区溢出攻击成为 *** 作系统、数据库等应用程序最普遍的漏洞之一。

值得关注的是,防火墙对这种攻击方式无能为力,因为攻击者传输的数据分组并无异常特征,没有任何欺骗(这就是Nimda、SQL Slammer可以顺利穿透防火墙的原因)。另外可以用来实施缓冲区溢出攻击的字符串非常多样化,无法与正常数据有效进行区分。缓冲区溢出攻击不是一种窃密和欺骗的手段,而是从计算机系统的最底层发起攻击,因此在它的攻击下系统的身份验证和访问权限等安全策略形同虚设。

用户及开发者该如何降低因缓冲区溢出而造成的攻击损失呢?首先,编程人员可以使用具有类型安全的语言 Java以避免C的缺陷;产品发布前仔细检查程序溢出情况;使用检查堆栈溢出的编译器等。作为普通用户或系统管理员,应及时为自己的 *** 作系统和应用程序更新补丁;减少不必要的开放服务端口等,合理配置您的系统。更重要的是,还应注重P2DR模型的作用,即增加Policy(安全策略)、Protection(防护)、Detection(检测)和Response(响应)的能力,如提高系统的防护时间Pt,降低检测时间Dt和响应时间Rt,完善应急响应机制和安全风险管理等,才能为自己的网络系统构建动态积极的安全防御体系。

Linux c/c++上常用内存泄露检测工具有valgrind, Rational purify。Valgrind免费。Valgrind可以在 32位或64位 PowerPC/Linux内核上工作。

Valgrind工具包包含多个工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。下面分别介绍个工具的作用:

Memcheck 工具主要检查下面的程序错误:

• 使用未初始化的内存 (Use of uninitialised memory)

• 使用已经释放了的内存 (Reading/writing memory after it has been free’d)

• 使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)

• 对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)

• 申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)

• malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])

• src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)

Valgrind不检查静态分配数组的使用情况。

Valgrind占用了更多的内存--可达两倍于你程序的正常使用量。如果你用Valgrind来检测使用大量内存的程序就会遇到问题,它可能会用很长的时间来运行测试

21 下载安装

>

----------------------------------------------------------------------------

我先说一下整个功能和逻辑顺序

1函数传入的参数应该为文件路径和文件名即str

2通过文件名以只读方式打开

3循环读取文件,每次读取一个结构单元到缓存

4然后由缓存复制到申请的内存空间中

下面是循环体中的执行过程

1循环执行之初会将游标p3指向的结构单元的next指针指向此次读入内存的结构单元

2在循环的最后,会将p3指向此次读入内存的结构单元以便下次循环使用

3这样总是将上次读入内存结构单元的next指向此次读入内存的结构单元,将链表连接起来

4循环结束的唯一条件是当前读入内存的结构单元的next指针为空。

更细节的内容可以看注释

这个程序有个小漏洞是p1的指针指向的内存空间没有释放

----------------------------------------------------------------------------

#include <stdioh>

#include <stdlibh>

#include <stringh>

#define NAME 20

#define PHOTOL 20

#define EMAIL 20

#define WORK 20

typedef struct Personal_management

{

char name[NAME];

char work_unit[WORK];

char photol[PHOTOL];

char Email[EMAIL];

struct Personal_management next;

} PEMAN; //定义了PEMAN的结构体类型

PEMAN fout()

{

FILE fp;

PEMAN p1,p2,p3,head;

p1=(PEMAN )malloc(LENGTH); //p1为缓存

head=NULL;

fp=fopen(str,"r"); //str是函数传入的文件名,以只读方式打开

do

{

fread(p1,LENGTH,1,fp); //从文件读取一个结构体的内容

p2=(PEMAN )malloc(LENGTH);

//复制过程应该很清楚

strcpy(p2->name,p1->name);

strcpy(p2->photol,p1->photol);

strcpy(p2->work_unit,p1->work_unit);

strcpy(p2->Email,p1->Email);

p2->next=p1->next;

//如果是第一循环头指针应该是空的,

//所以将头指针指向p2所指向的结构体

if (head==NULL)

head=p2;

else

//除了第一循环,此后均执行这一条语句,

p3应该是游标,现在是指向上次读入内存的结构单元

/

p3->next=p2;

if(p2->next==NULL) //如果当前读入的结构体后继为空,读入链表结束

break;

p3=p2; //将游标指向当前读入内存的结构单元

} while (1);

fclose(fp);

return head; //返回链表的头指针

}

以上就是关于win32.EXPLOIT.IMG-WMF.th.8704(漏洞利用程序)怎么杀啊全部的内容,包括:win32.EXPLOIT.IMG-WMF.th.8704(漏洞利用程序)怎么杀啊、C语言程序问题,数组元素无法赋值请大家帮忙看看、c语言的gets函数编译不成功阿,很短的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10126257.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存