티스토리 뷰
저번에 level9는 그냥 찍어서 풀었으므로
이번에는 정석으로 한번 풀어보겠다.
먼저 이 bof2가 어디서 시작하는지 주소를 알아보고
그러기 위해서 gdb의 디버거를 해보겠다.
그런데 이 실행코드는 나에게 권한이 없다.
그래서 gdb를 실행할 수가 없다.
하지만 소스코드는 알 수 있으므로
cd /home/level9/tmp에 들어가서
vi test.c로 소스코드를 붙여놓고
gcc -o test test.c로 컴파일을 한다....!!!!!
그 다음 gdb test로 디버거를 해본다...
맨 처음 disas main으로
main을 보면 이렇게 뜬다.
뭔가 엄청 많은데 한번 보자!!
보면 맨 처음에 sub $0x28, %esp로 스택에 0x28만큼을 할당해줍니다.
그 뒤에 보면 또 sub $0xc, %esp로 0xc만큼 할당을 해줍니다.
둘 중 하나가 buf이고 나머지가 buf2일 겁니다... 하지만 확실히는 모르죠
그 뒤에 보면 fgets함수가 보입니다.
입력을 받는 함수로 main+43부분을 보면 0xffffffd8 (%ebp), %eax로
0xffffffd8 (%ebp)를 인자로 주는 것으로 볼 수 있습니다.
그렇다면 buf의 주소이겠죠???
그 뒤에 strncmp함수를 보면 그 전에 push로 0x2를 주고 그 다음으로 push $0x804856a이고
마지막으로 0xffffffe8 (%ebp), %eax로 세 개의 인자를 줍니다.
소스 코드를 보면 strncmp(buf2, "go", 2)를 볼 수 있는데
어셈블리어에서는 거꾸로 한다
그래서 0x804856a가 go를 의미하고
0xffffffe8 (%ebp)가 buf2의 주소일 것이다.
그럼 다 구했다...
buf 0xffffffd8 (%ebp)
buf2 0xffffffe8 (%ebp)
그럼 차이가 16만큼 나므로 16개 채우고 그 다음에 go를 하면 된다!!
'모각코' 카테고리의 다른 글
| 모각코 1월17일 (0) | 2019.01.17 |
|---|---|
| ftz level10 (0) | 2019.01.15 |
| 모각코 1월15일 (0) | 2019.01.15 |
| ftz level9 (0) | 2019.01.10 |
| ftz level8 (0) | 2019.01.10 |
