protostar stack0

assb
|2020. 10. 29. 19:18

old.liveoverflow.com/binary_hacking/protostar/stack0.html

 

Stack 0 - LiveOverflow

Bruteforcing stack canary, stack guard, stack cookie with a C program.

old.liveoverflow.com

 

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  volatile int modified;
  char buffer[64];

  modified = 0;
  gets(buffer);

  if(modified != 0) {
      printf("you have changed the 'modified' variable\n");
  } else {
      printf("Try again?\n");
  }
}

 먼저 소스 코드를 확인해보면 4byte modified 변수와 64byte 버퍼가 존재한다. 또한 buffer을 입력받고, modified의 값이 0이 아니면 (값이 변조되면) 값이 변경되었다고 출력된다. 

 

 위의 이미지는 gdb로 살펴본 코드이다. 이 코드에 따라 스택을 정리하면 아래의 이미지와 같다. 

 

 ~ebp, esp 정리~

 <main+1>: ebp를 esp로 옮긴다. (ebp=esp)
 <main+3>: esp에 0xfffffff0을 and 연산한다. 이 연산을 진행하면 esp=ebp+8이 된다. 따라서 ebp와 esp 사이에 8byte의 간격이 생긴다. 
 <main+6>: esp에서 0x60을 빼준다. 이 공간은 main 함수에서 사용하게 된다. 

 

 

 

 buffer과 modified 사이에는 0x44-0x4=0x40(10진수로 64)byte가 존재한다. 따라서 65byte 이상을 입력하게 되면 modified 값이 변경되어 문제를 해결할 수 있다.

 

 

728x90

'CTF > 시스템' 카테고리의 다른 글

protostar stack2  (0) 2020.10.29
protostar stack1  (0) 2020.10.29
해커스쿨 FTZ level18  (0) 2020.10.29
해커스쿨 FTZ level17  (0) 2020.09.29
해커스쿨 FTZ level16  (0) 2020.09.24