티스토리 뷰

모각코

ftz level9 plus

AI의 호흡 2019. 1. 15. 19:48

 저번에 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함