对错误,漏洞和exploits的说明(4)
我已经给出了一个由设计错误导致漏洞的例子:WEP密钥,但它很容易引出另一个设计错误的例子:设想一个软件公司编写了一个软件用于浏览和创建文本文档。他们想要出售他们的产品,然而由于竞争者的软件公司也开发了一款相同功能的软件,他们不得不设计一个表面上有更强大的功能的程序。因此他们决定增加一个特性以允许用户能对自己创建的文档有更多的控制,那样用户可以编写小型函数(宏),并能被植入文档中,同时能够帮助文档浏览者在他的计算机上做各种各样的事情。如果所有这些功能被一个恶意攻击者使用,创建一个已植入宏的文档,能复制自身到机器上被找到的其他所有文档中去,并且不经过浏览者的同意做各种各样的其他事情呢?那么在这个被设计而创建的程序中,我们又有了一个可能的漏洞。
你可以看到,一个错误会导致产生一个漏洞。在宏被使用在文档中的情况下,帮助软件用户创建更多动态文档的想法很伟大,除设计时没有考虑安全因素以外。
那么什么是一个exploit?
exploit就是一种利用一个已发现的漏洞来改变程序或者系统初始功能的方法。这种方法对于一个攻击者而言更有用处。在计算机安全中,术语"exploit"经常被用于描述一个特殊的程序,它的唯一目的就是自动利用一个漏洞来取得对有漏洞的目标程序的控制权,或者终止目标程序的正常功能。
但是在一个系统或者网络中使用一个错误的配置对要利用它的攻击者来说,也能被叫做一个exploit,尽管它不一定非要是一个实际上能完成工作的特殊程序。
我将通过一些C代码的例子来试着说明一个exploit的作用,其中之一是一个存在缓冲区溢出漏洞的简单的程序,另一个则是exploit。
注意:这里给出的例子可能在不同的编译器和系统上表现不同。你可能需要改变缓冲区中字符的数目才能真正改写返回地址,或者exploitfunction的地址会不同,但是他们仍能工作。
vulnerable_program.c:
Copy code
#include "stdio。h"
/*利用函数*/
exploitfunction()
{
/*如果缓冲区溢出被成功利用,就会输出此行内容*/
printf("This line will be printed after successfully exploiting the buffer overflow. ");
system("pause");
ExitProcess(0);
}
normalfunction(char *myargument)
{
char buffer[10];
strcpy(buffer,myargument);
}
main(int argc, char *argv[])
{
if(argc>1)
{
normalfunction(argv[1]);
printf(" These lines get printed during normal execution with at least 1 commandline argument.The address of exploitfunction
内容版权声明:除非注明,否则皆为本站原创文章。