一个利用缓冲区溢出执行代码的例子

2220阅读 0评论2013-10-12 joepayne
分类:LINUX


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (int argc, char **argv)
{
        int num = 0;
        char buffer[11] = {0};

        printf("num: %d\n", num);
        num = write(1, "buffer: ", 8);
        num = read(0, buffer, 10);
        printf("num: %d\n", num);
        printf("buffer: %s\n", buffer);

        return 0;
}


第一次运行:
root@platinum:/tmp
# ./a
num: 0
buffer: asdfasdf
num: 9
buffer: asdfasdf

root@platinum:/tmp
#

第二次运行:
root@platinum:/tmp
# ./a
num: 0
buffer: asdfasdfasdf
num: 10
buffer: asdfasdfas
root@platinum:/tmp
# df
文件系统             1K-块      已用      可用 已用% 挂载点
/dev/sda7             10369596   8918040   1451556  87% /
udev                     10240       284      9956   3% /dev
shm                    1028440         0   1028440   0% /dev/shm
/dev/sda1             20972824  14057852   6914972  68% /mnt/c
/dev/sda5            123893248 110845364  13047884  90% /mnt/d
root@platinum:/tmp

第一次运行时没有溢出,运行结果正常
第二次运行时缓冲区外面的 df 被当作了命令被执行了

上一篇:Git Tips
下一篇:服务器高性能程序 磁盘I/O篇