【发布时间】:2015-02-06 09:25:39
【问题描述】:
我有一些关于缓冲区溢出的作业。
int func1(char *str) {
char buffer[400];
strcpy(buffer,str);
printf("%s\n", buffer);
}
int main(int argc, char *argv[]) {
func1(argv[1]);
}
这是我的 bufferoverflow.c,我也有 shellcode.txt
\xeb\x16\x5e\x31\xd2\x52\x56\x89\xe1\x89\xf3\x31\xc0\xb0\x0b\xcd\x80\x31\xdb\x31\xc0\x40\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68
目标是使用bufferoverflow获取root权限。
但是,我不知道具体该怎么做。
关于 main 和 func1 函数,我使用“gdb”和 disas。
然而,汇编代码并没有给我很多信息。
函数 main 的汇编代码转储:
0x08048422 <+0>: push %ebp
0x08048423 <+1>: mov %esp,%ebp
0x08048425 <+3>: and $0xfffffff0,%esp
0x08048428 <+6>: sub $0x10,%esp
0x0804842b <+9>: mov 0xc(%ebp),%eax
0x0804842e <+12>: add $0x4,%eax
0x08048431 <+15>: mov (%eax),%eax
0x08048433 <+17>: mov %eax,(%esp)
0x08048436 <+20>: call 0x80483f4 <func1>
0x0804843b <+25>: leave
0x0804843c <+26>: ret
函数 func1 的汇编代码转储:
0x080483f4 <+0>: push %ebp
0x080483f5 <+1>: mov %esp,%ebp
0x080483f7 <+3>: sub $0x1a8,%esp
0x080483fd <+9>: mov 0x8(%ebp),%eax
0x08048400 <+12>: mov %eax,0x4(%esp)
0x08048404 <+16>: lea -0x198(%ebp),%eax
0x0804840a <+22>: mov %eax,(%esp)
0x0804840d <+25>: call 0x8048314 <strcpy@plt>
0x08048412 <+30>: lea -0x198(%ebp),%eax
0x08048418 <+36>: mov %eax,(%esp)
0x0804841b <+39>: call 0x8048324 <puts@plt>
0x08048420 <+44>: leave
0x08048421 <+45>: ret
【问题讨论】:
标签: linux assembly x86 shellcode