Linux缓冲区溢出问题

本文详细介绍了Linux系统中的缓冲区溢出问题,分析了其成因、制造缓冲区溢出的方法,以及如何通过缓冲区溢出获取用户shell。此外,还展示了如何利用缓冲区溢出进行系统攻击,并提供了一个利用mount程序漏洞的攻击实例。
摘要由CSDN通过智能技术生成

##########################################
                缓冲区溢出(buffer overflow)机理分析                                     ##########################################

                            Only 1997.7.19
                      Only.bbs@bbs.sjtu.edu.cn

1.什么是缓冲区溢出?
~~~~~~~~~~~~~~~~~~~
    buffer overflow,buffer overrun,smash the stack,trash the stack,
scribble the stack, mangle the stack,spam,alias bug,fandango on core,
memory leak,precedence lossage,overrun screw...指的是一种系统攻击的手
段,通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程
序的堆栈,使程序转而执行其它指令,以达到攻击的目的。据统计,通过缓冲区
溢出进行的攻击占所有系统攻击总数的80%以上。
    造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。例如下面程
序:

example1.c
----------------------------------------------------------------------
void function(char *str) {
   char buffer[16];

   strcpy(buffer,str);
}
----------------------------------------------------------------------

    上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度
大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的
标准函数还有strcat(),sprintf(),vsprintf(),gets(),scanf(),以及在循环内的
getc(),fgetc(),getchar()等。
    当然,随便往缓冲区中填东西造成它溢出一般只会出现Segmentation fault
错误,而不能达到攻击的目的。最常见的手段是通过制造缓冲区溢出使程序运行
一个用户shell,再通过shell执行其它命令。如果该程序属于root且有suid权限
的话,攻击者就获得了一个有root权限的shell,可以对系统进行任意操作了。
    请注意,如果没有特别说明,下面的内容都假设用户使用的平台为基于Intel
x86 CPU的Linux系统。对其它平台来说,本文的概念同样适用,但程序要做相应
修改。

2.制造缓冲区溢出
~~~~~~~~~~~~~~~~
    一个程序在内存中通常分为程序段,数据端和堆栈三部分。程序段里放着程
序的机器码和只读数据。数据段放的是程序中的静态数据。动态数据则通过堆栈
来存放。在内存中,它们的位置是:

                       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值