소스코드가 많이 짧습니다.
setreuid() 조차도 없습니다.
setreuid()가 있는 shell code를 사용하면 되겠습니다.
그 외에는 일반 BOF와 다른게 없습니다.
gdb로 attackme를 열어봅니다.
Stack을 40(0x28)만큼 확보합니다.
Stack 구조
Low addr
buf (40-byte) |
sfp (4-byte) |
ret (4-byte) |
High addr
ret 뒤쪽에 shell code를 넣고 return 하면 되겠습니다.
buf의 주소를 찾기 위해 buf에 접근하는 printf 주변을 찾아봅니다.
0xbffffb00부터 buf가 시작됩니다.
쓰레기 값을 44-byte 입력하고 ret 값을 뒤쪽의 nop slide로 떨어뜨려줍니다.
level20의 shell이 떨어졌습니다.