나는 bufferoverflow에 대해 숙제가있다.exploit bufferoverflow shellcode
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이며, 또한 목표는 루트 권한을 얻을 버퍼 오버플로를 사용
\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
shellcode.txt있다. 하지만 정확히 어떻게해야할지 모르겠습니다.
main과 func1 함수에 대해 'gdb'와 disas를 사용합니다.
그러나 어셈블리 코드는 많은 정보를주지 못했습니다. 주요 기능에 대한 어셈블러 코드의
덤프 : 함수 func1에 대한 어셈블러 코드의
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
덤프 : 당신은 버퍼 오버플로 공격을 탑재 할 경우
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 <[email protected]>
0x08048412 <+30>: lea -0x198(%ebp),%eax
0x08048418 <+36>: mov %eax,(%esp)
0x0804841b <+39>: call 0x8048324 <[email protected]>
0x08048420 <+44>: leave
0x08048421 <+45>: ret