'분류 전체보기'에 해당되는 글 80건

level10

해커스쿨 FTZ 2018. 3. 26. 17:54

 

 

두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다. 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라.

 

공유메모리 사용 내역을 알아보기 위해 ipcs -a를 사용했다.

 

key가 0x00001d6a를 10진수로 바꾸면 7530이다. 힌트에서 언급한 숫자와 같다.

 

이 코드부분은 (http://molrayo.tistory.com/entry/Network-shmgetshmatshmdtshmctl-%EA%B4%80%EB%A0%A8-%EC%98%88%EC%A0%9C)를 참고했다.

 

공유메모리에 대한 지식이 많이 없는 상태에서 코드들을 뒤져보며 이해한 건,

 

1. shmget()

int shmget(key_t key, int size, int shmflg);

shmget을 통해 공유메모리에 접근하는데 여기서 key_t값을 전에 확인한 7530으로 설정하였다. shmget함수는 공유메모리의 ID값을 리턴하기때문에 이를 shmid에 저장한다.

 

 

2. shmat()

void *shmat(int shmid, const void* shmaddr, int shmglf)

shmat는 공유메모리를 프로세스에 첨부한다. 붙이는 영역은 shmaddr로 결정할 수 있는데 NULL인경우 시스템이 알아서 적당히 붙인다고 한다.

그리고 shmat()함수는 해당 공유 메모리 id값에 대한 어드레스를 리턴해준다.

 

 

3. shmctl()

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

shmctrl()은 공유메모리를 제어한다. 즉 공유메모리의 내용을 받아오거나 수정, 삭제 하기 위해 사용한다.

 

이 코드의 경우 공유메모리의 내용을 받아와야하기 때문에 가장먼저 shmget()을 통해 접근하고, shmat()를 통해 프로세스에 첨부한 뒤, shmctl()에서 IPC_STAT을 사용해서 메모리의 내용을 받아왔다.

 

일단 대개 이해는 가지만 나중에 코드를 직접 짜면서 여러번 복습해야하는 부분인 것같다.

 

이 프로그램을 컴파일해서 실행하면 대화내용이 나온다

그리고 대화 내용에는 비밀번호가 적혀있는것을 알 수 있다.

 

'해커스쿨 FTZ' 카테고리의 다른 글

level12  (0) 2018.03.28
level11  (0) 2018.03.27
level9  (2) 2018.03.26
level8  (0) 2018.03.26
level7  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level9

해커스쿨 FTZ 2018. 3. 26. 17:08

level9의 힌트는

 

/usr/bin/bof의 소스코드이다.

buf2[10]이 먼저 선언되고 buf[10]이 선언되었으므로 스택메모리에

 

buf1

buf2

 

순으로 입력되었을 것이다.

 

그러면 buf1의 버퍼의 크기를 넘는 부분에 go를 입력해주면 if(strncmp(buf2, "go", 2) ==0)이 참이된다.

 

몇 자리수가 정확히 오버플로우 되는 부분인지 알 수가 없어서 그냥 go를 연속해서 계속 적었다.

Good Skill!이라는 메시지와 함께 level10의 쉘에 접속한 것을 볼 수 있다.

 

my-pass를 입력하면 비밀번호를 알 수 있다.

 

 

 

'해커스쿨 FTZ' 카테고리의 다른 글

level11  (0) 2018.03.27
level10  (0) 2018.03.26
level8  (0) 2018.03.26
level7  (0) 2018.03.26
level6  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level8

해커스쿨 FTZ 2018. 3. 26. 16:58

 

level8의 힌트에선 level9의 shadow파일이 숨어있다며 파일의 용량이 2700이라고 한다.

 

shadow파일은 각 유저의 비밀번호를 저장하는 파일이다. /etc/shadow에 있으며 root만이 읽을 수 있다.

 

우선 용량이 2700인 파일을 구해야한다.

 

find의 파라미터 중에는 size가 있는데 이것에 2700을 넣으면 될 것 같았다.

 

 

그런데 보다시피 찾아지는 파일이 없었다.

 

검색을하다보니 find의 size에는 용량을 설정해야 했다.

 

b : 블록단위

c : byte

k : kbyte

w : 2byte 워드


출처: http://nota.tistory.com/89 [nota's story]

 

 

검색을하면 gz파일이나 gif파일 txt파일이 검색된다. 가장 열어보기 쉬운 txt파일부터 열어보았다.

 

 

이런 문자열이 계속 반복되는 형태가 나온다.

 

shadow파일의 형태를 검색해보니

 

      root:$1$9L2L0oTwd:12751:0:99999:7 : : :

        ①                  ②                   ③   ④   ⑤      ⑥⑦⑧⑨

① 필드 1 : 사용자명

② 필드 2 : 패스워드

③ 필드 3 : 패스워드 파일 최종 수정일

④ 필드 4 : 패스워드 변경 최소일

⑤ 필드 5 : 패스워드 변경 최대일

⑥ 필드 6 : 패스워드 만료 경고기간

⑦ 필드 7 : 패스워드 파기 기간(패스워드 파기후 게정 비활성 기간)

⑧ 필드 8 : 계정 만료 기간

⑨ 필드 9 : 예약 필드


출처: http://webdir.tistory.com/129 [WEBDIR]

 

라고 한다.

 

따라서 구하고자하는 Level9의 비밀번호는 $1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps이다. 물론 암호화된 상태이므로 복호화가 필요하다.

 

구글에 '/etc/shadow 복호화'를 검색하니 존 더 리퍼라는 프로그램이 나왔다.

 

우선 txt에다가 shadow파일을 붙혀 넣었다.

 

 

그리고 윈도우 명령프롬포트 (cmd)를 해당 디렉토리로 이동시킨 뒤 'john.exe shadow.txt'명령어를 실행하였다.

 

 

 

 

그랬더니 level9의 비밀번호인 apple을 구할 수 있었다.

'해커스쿨 FTZ' 카테고리의 다른 글

level10  (0) 2018.03.26
level9  (2) 2018.03.26
level7  (0) 2018.03.26
level6  (0) 2018.03.26
level5  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level7

해커스쿨 FTZ 2018. 3. 26. 14:44

여기선 /bin/level7을 실행하면 패스워드 입력을 요청한다고 한다.

2진수를 10진수로 바꾸라는 내용도 있다.

 

 

글씨는 깨졌지만 아래쪽에

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

는 알아볼 수 있다. 각각 하이픈을 1 언더바를 0으로 두고 띄어쓰기대로 끊어서 입력해보면

 

1101101 1100001 1110100 1100101

또는

10010 11110 1011 11010이될 것이다

 

각각 10진수로 바꾸면

 

109 97 116 101

또는

18 30 11 26이 될 것이다.

 

아스키표에 대치시켜보면

첫번째는

mate

두번째는

없는 문자자체가 너무 많다.

 

비밀번호 mate를 입력하면    

level8의 비밀번호를 알 수 있다.

 

ps. 지금 보면 사용자가 root로 되어있음을 볼 수 있다. 이는 개인 FTZ를 구축하면 wrong.txt가 사라져 --_--_- --____- ---_-__ --__-_- 이 힌트를 볼 수 없기 때문에 권한을 얻기위해서 사용한 것이다. 실수로 잊고 본래계정으로 돌아가지 않았지만 루트권한을 이용해 문제풀이를 하지 않았으므로 따로 수정하지 않았다.

 

'해커스쿨 FTZ' 카테고리의 다른 글

level9  (2) 2018.03.26
level8  (0) 2018.03.26
level6  (0) 2018.03.26
level5  (0) 2018.03.26
level4  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level6

해커스쿨 FTZ 2018. 3. 26. 14:29

접속하자마자 ctrl+c를 하면 바로 쉘로 빠져나올 수 있다.

 

디렉토리에서 ls를 하면  password가 나오는데

 

이 파일을 열어보면

비밀번호가 바로 나온다.

'해커스쿨 FTZ' 카테고리의 다른 글

level8  (0) 2018.03.26
level7  (0) 2018.03.26
level5  (0) 2018.03.26
level4  (0) 2018.03.26
level3  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level5

해커스쿨 FTZ 2018. 3. 26. 14:16

 

이번엔 /tmp에 level5.tmp라는 임시파일이 생성된다고 한다.

 

/usr/bin/level5의 코드를 봐볼까 싶어 권한을 보니

level5그룹에게는 실행권한밖에 없다.

 

아쉬워하면서 tmp로 이동해서 파일을 실행해 보았다.

 

분명이 /usr/bin/level5를 실행했는데도 level5.tmp파일이 생성되어 있지 않다.

 

임시파일이라 그런지 바로 삭제되는 것 같다.

 

 

혹시나 해서 파일을 미리 만들어 두고 프로그램을 실행해 보았더니 파일이 삭제되지 않고 내용만 적혀있는것을 확인할 수 있었다.

 

아마 임시파일 특성상 생성 후 바로 지워지는 것일텐데 파일을 미리 만들어 놓아서 삭제하지 못한 것 같다.

'해커스쿨 FTZ' 카테고리의 다른 글

level7  (0) 2018.03.26
level6  (0) 2018.03.26
level4  (0) 2018.03.26
level3  (0) 2018.03.26
level2  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,

level4

해커스쿨 FTZ 2018. 3. 26. 13:57

level4의 힌트이다. /etc/xinetd.d/에 백도어가 있다고 한다.

ls로 찾아보니 가장 위에 backdoor이라는 파일이 있다.

 

cat으로 내용을 확인해 보니 잘은 모르겠지만

service finger

user level5

server /home/level4/tmp/backdoor

이 보인다.

 

대충 finger이라는 서비스를 이용하고 유저는 level5이며 /home/level4/tmp/backdoor을 서버로 설정한것으로 보인다.

 

현재 pwd가 /home/level4이므로 tmp로 cd하고, backdoor이라는 실행파일을 만들기 위해 code.c를 생성하였다.

 

처음에 코드를 이렇게 짜고

gcc -o backdoor code.c를 하였다.

 

그리고 finger을 실행하니

접속해있는 사람들만 뜬다.

 

finger의 사용법을 보려고 해도

finger 의 usage는 finger [-lmps] [login ...]뿐이다.

 

구글링한 결과 finger에 host를 정해줄 수도 있다고 한다.

 

finger @localhost를 실행하면

결과가 나온다.

 

PS. 사실 finger @localhost를 사용해도 비밀번호가 나오지 않았다. 그런데 저 위에 사용자목록에 level3가 없어지지 않길래 한번 시스템을 재부팅했더니 같은 명령어로 정답이 나왔다.  정답을 얻은 뒤에 똑같은 명령어를 다시 실행해 보았는데 또 출력되지 않는다. finger서비스를 한번 실행하면 그 다음부터는 백도어가 실행되지 않는건지 모르겠다.... ㅠㅠ

'해커스쿨 FTZ' 카테고리의 다른 글

level6  (0) 2018.03.26
level5  (0) 2018.03.26
level3  (0) 2018.03.26
level2  (0) 2018.03.26
level1  (2) 2018.03.26
블로그 이미지

천재보다는 범재

,

level3

해커스쿨 FTZ 2018. 3. 26. 12:47

 

먼저 hint파일을 열어보면 autodig의 코드가 적혀있다.

 

find / -name *autodig* 2>/dev/null로 검색해 보니 /bin/autodig가 있는것을 확인했다. 또 autodig파일에 level4의 setuid권한이 설정되어있는것도 확인했다

 

힌트를 확인하니 동시에 여러 명령어를 사용하려면? 과 문자열 형태로 명령어를 전달하려면? 이라고 되어있다.

 

autodig /bin/bash;my-pass를 실행하니

Level3의 비밀번호가 나온다.

 

한참 생각하다보니 힌트에 '문자열'형태로 명령어를 전달하려면? 이라는 구절이 있었다. 그래서 "/bin/bash;my-pass"를 실행하니

level4의 비밀번호가 "suck my brain"인 것을 알 수 있었다.

 

 

 

 

 

'해커스쿨 FTZ' 카테고리의 다른 글

level6  (0) 2018.03.26
level5  (0) 2018.03.26
level4  (0) 2018.03.26
level2  (0) 2018.03.26
level1  (2) 2018.03.26
블로그 이미지

천재보다는 범재

,

level2

해커스쿨 FTZ 2018. 3. 26. 11:07

level2 역시 ls로 디렉토리를 확인해 보면 hint 파일이 존재한다.

hint의 내용은 '텍스트 파일 편집 중 쉘의 명령을 실행시킬 수 있다는데...'이다.

 

vi 편집기는 사용중에 :![명령어]의 형태로 명령어를 실행할 수 있는데 만약 level3의 setuid권한을 가진 에디터가 있다면 에디터 내에서 :!/bin/bash를 사용하거나 :!my-pass를 사용하면 답이 나올것이라고 예상했다.

 

 

 

역시나 level3의 setuid를 가진 실행파일이 하나 나온다.

 

 

먼저 !my-pass를 실행해 보았다.

 

비밀번호인 "can you fly?"를 밷는다.

 

/bin/bash를 실행해 보았다.

level3의 쉘을 가져온 것을 볼 수 있다.

이 상태에서 my-pass를 실행해도 비밀번호를 확인할 수 있다.

'해커스쿨 FTZ' 카테고리의 다른 글

level6  (0) 2018.03.26
level5  (0) 2018.03.26
level4  (0) 2018.03.26
level3  (0) 2018.03.26
level1  (2) 2018.03.26
블로그 이미지

천재보다는 범재

,

level1

해커스쿨 FTZ 2018. 3. 26. 10:37

가장 먼저 ls로 디렉토리에 있는 파일을 보면 hint, public_html, tmp가 있는것을 볼 수 있다.

(처음에 한글이 깨져서 export LANG=EUC-KR을 입력하고 xshell에 인코딩을 Korean (EUC)로 설정했다.)

 

cat hint로 힌트를 보면 'level2 권한에 setuid가 걸린 파일을 찾는다.' 라고 적혀있다.

 

trainer에서 배운대로 find / -user level2 -perm -4000 2>/dev/null 을 실행한다.


여기서 -user level2는 소유자가 level2라는 것이고 -perm -4000은 권한이 최소 setuid가 있는 경우를 말한다, 뒤에 2>/dev/null은 Permission denied같은 오류들을 보이지않게 하기 위해 입력했다.

검색결과 /bin/ExecuteMe라는 프로그램이 나온다.

 

프로그램을 실행하면 레벨2의 권한으로 한가지 명령어를 실행해주겠다고 한다. 단 해당 레벨의 비밀번호를 말해주는 my-pass나 권한을 수정하는 chmod는 제외되었다.


해당 프로그램은 level2의 setuid권한을 가지고 있으므로 해당 프로그램을 실행하는 동안은 level2의 권한을 사용할 수 있다.

 

level2의 권한으로 /bin/bash를 실행하면 level2의 쉘을 획들할 수 있으므로 /bin/bash를 실행한다.

 

level2의 쉘을 획득한 상태에서 my-pass를 입력하면 level2의 비밀번호를 볼 수 있다.

비밀번호는 'hacker or cracker'이다.

'해커스쿨 FTZ' 카테고리의 다른 글

level6  (0) 2018.03.26
level5  (0) 2018.03.26
level4  (0) 2018.03.26
level3  (0) 2018.03.26
level2  (0) 2018.03.26
블로그 이미지

천재보다는 범재

,