티스토리 뷰
bugbear.c
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[])
{
char buffer[40];
int i;
if(argc < 2){
printf("argv error\n");
exit(0);
}
if(argv[1][47] == '\xbf')
{
printf("stack betrayed you!!\n");
exit(0);
}
strcpy(buffer, argv[1]);
printf("%s\n", buffer);
}
bugbear는 아주 간단한 문제였다.
argv[1][47]이 \xbf가 아니여야 하는 거였는데 이 부분은 ret의 주소 맨 앞자리에 해당된다.
그래서 system함수를 이용하여 풀기로 하였다.
buffer와 sfp 44byte는 nop로 채운뒤 ret에 system함수의 주소를 넣고 4byte의 nop와 /bin/sh의 주소를 넣어 성공하였다.
'SYSTEM > bof' 카테고리의 다른 글
LEVEL15 (giant -> assassin) : no stack, no RTL (0) | 2013.07.19 |
---|---|
LEVEL14 (bugbear -> giant) : RTL2, only execve (1) | 2013.07.19 |
LEVEL12 (golem -> darkknight) : sfp (0) | 2013.07.19 |
LEVEL11 (skeleton -> golem) : stack destroyer (0) | 2013.07.19 |
LEVEL10 (vampire -> skeleton) : argv hunter (0) | 2013.07.19 |
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday