티스토리 뷰

ftz를 통해서 시스템해킹을 조금이나마 배워보자는 마음으로 풀이를 작성합니다. 


ftz level1로 접속해서 ls로 봅니다.

level2 권한에 setuid를 찾으라고 했으니, find 명령어로 찾아보면 /bin/ExecuteMe 가 나옵니다.

-perm +6000 -> level2권한과 level1의 그룹 권한 중 하나라도 SUID나 SGID가 설정된 파일을 찾음

-perm -6000 -> level2권한과 level1의 그룹 권한에 모두 SUID나 SGID가 설정된 파일을 찾음

2> /deb/null -> 검색 결과 중에서 에러가 발생한 결과를 버림.

1> -> 표준출력(STDOUT)

2> -> 표준에러(STDERR)

/dev/null -> 윈도우 운영체제에 있는 휴지통과 비슷

* 검색결과 중에서 표준에러는 휴지통으로 버리고, 표준출력 내용만 출력.

위와 다르게 2> /dev/null 없이 실행을 하게 된다면 표준 에러가 생략없이 출력이 됩니다. 

< 2> /dev/null 옵션을 주지 않은 결과>


-exec 옵션 앞에서 검색한 검색 결과가 -exec 옵션 다음에 있는 {} 에 들어가서 출력이 됩니다.


gdb를 이용하여 /bin/ExecuteMe를 리버싱 합니다.


'disas main'을 입력하여 main을 보겠습니다. gdb가 저도 생소해서 명령어를 공부중인데, 

http://suspected.tistory.com/entry/gdb-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95 

포스팅을 해놨으니 번갈아가면서 보면서 공부하면 좋을 것 같습니다.


ExecuteMe를 한번 실행해 봅시다.


b는 breakPoint를 걸어주는 gdb 명령어입니다. 0x0804851c 부분은 밑의 사진과 같이 입력을 받는 부분바로 다음입니다. 임의 글자를 입력 합니다.


브레이크가 되었고, x/3x는 3개의 x(16진수)를 출력하라는 gdb 명령어이고, 참고로 x/s는 문자열 출력입니다.


함수의 인자들을 x/s로 출력합니다.


je 어셈블러가 보입니다. 입력 값이 chmod이거나 my-pass이면 exit로 종료하고, 아니면 <main+251> 부분으로 jump하게 됩니다.


이부분은 사용자의 입력을 받는 부분입니다. fget 함수.



0xbba(3002)이므로, setreuid(3002, 3002)를 복원할 수가 있습니다.

3002는 level2의 그룹 ID를 의미합니다.



0xffffffd8은 사용자가 입력한 것으로 system명령어로 실행을 시킵니다.

코드를 요약해보자면, 앞에서 입력한 명령어가 my-pass가 아니고 chmod도 아니면 level2의 그룹 ID 권한으로 명령을 실행합니다.


sh, bash, /bin/sh, /bin/bash와 같은 셸 실행 명령어를 입력하면 level2 계정의 권한을 지속적으로 유지할 수 있게 됩니다. 

*일시적으로 다른 계정의 권한을 얻은 상황에서 이 권한을 유지할 수 있는 대표적인 방법 가운데 가장 간단하고 정확한 방법은 역시 배시셸을 실행하는 것입니다. 그러면 프롬프트가 생기면서 일시적으로 얻었던 level2의 권한이 유지됩니다. 






'시스템해킹 > FTZ' 카테고리의 다른 글

FTZ LEVEL6 문제풀이(시스템 인터럽트)  (0) 2015.07.21
FTZ LEVEL5 문제풀이(Race condition)  (0) 2015.07.20
FTZ LEVEL4 문제풀이  (0) 2015.07.18
FTZ LEVEL3 문제풀이  (0) 2015.07.15
FTZ LEVEL2 문제풀이  (0) 2015.07.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함