
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函数编译不成功阿,很短的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)