일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 화이트해커를 위한 웹 해킹의 기술
- 홍대 토라비
- graphql
- 고르드
- typescript
- apolloclient
- 잠실새내
- 금별맥주
- 잠실새내 도그존
- graphql with RN
- promise처리
- 홍대 예술
- graphql 400
- 도그존
- graphql with reactnative
- 홍대 카페 장쌤
- useMutation error
- promise메서드
- 신촌 소문난집
- 비동기배열
- 운정 소바동
- apollo react native
- 화이트 해커를 위한 웹 해킹의 기술
- 앙버터마카롱
- graphql react native
- 예쁜술집 예술
- 지보싶 신촌점
- 비동기배열처리방법
- graphql mutation error
- 토라비
- Today
- Total
yehey's 공부 노트 \n ο(=•ω<=)ρ⌒☆
FTZ level4 풀이 본문
id: level4
pw: suck my brain
로그인 후 ls -l 명령어를 이용해서 디렉토리 확인
역시 hint가 있고 이를 읽어보겠음 (cat hint)
누군가가 /etc/xinetd.d/ 위치에 백도어를 심어놓았다는 힌트가 들어있다.
/etc/xinetd.d/에 존재하는 백도어는 네트워크를 이용한 서비스 포트와 관련된 포트 백도어!
포트백도어: 로컬 백도어와 달리 원격에서도 사용할 수 있는 장점이 있다.
백도어를 확인하기위해 저 이치로 이동하자 (cd /etc/xinetd.d/)
디렉토리 이동 후 ls 명령어를 실행시켰더니 backdoor 파일이 존재한다.
이를 읽어보자! (cat backdoor)
우리에게 필요한 코드를 분석해보자!
user: 권한을 나타내며 level5의 권한을 가지고 있다는 뜻
server: xinetd에 의해 실행될 데몬파일의 경로와 파일이름을 나타낸다.
즉, finger라는 service를 통해 level5의 권한으로 /home/level4/tmp/backdoor 가 실행된다는 의미!
service finger : 서비스 이름
disable =no: 데몬을 비활성화 하지 않음, (yes: 할당 서비스를 기동하지 않음)
flags=REUSE: 서비스 포트가 사용 중인 경우 해당 포트의 재사용을 허가
socket_type = stream : TCP/IP 프로토콜 선택
wait=no: 다수의 접속이 가능 (이미 서비스가 연결된 상태에서 다른 요청이 들어오면 바로 응답)
log_on_failure += UERID : 정상적인 기동에 실패할 경우 USERID를 로그에 기록
그렇다면 데몬파일이 위치한 곳으로 가보자 (cd /home/level4/tmp)
데몬: 시스템에 관련된 작업을 하는 후위 프로세서
이벤트를 기다리거나 주기적으로 주어진 작업을 수행하기 위해서 대기하고 있는 프로세스를 의미
데몬 실행방식
-Stand_alone: 데몬이 시작되면 시스템에 상주하며 client 요청에 응답을 보내주는 방식, 틀라이언트 요청이 잦은 데몬들이 사용하는 방식, 항상 서비스가 가능하다, 네트워크 서비스 데몬이 client요청을 바로 처리할 수 있다.
-xinetd: xinetd라는 슈퍼데몬이 시스템에 대기, 요청이 들어오면 xinetd 데몬에 의해 해당 서비스를 제공해줄 데몬을 실행시키는 방식, client 요청 빈도수가 낮은 서비스들이 사용, 자원 관리 면에서 이득
/etc/xietd.d/ 에 존재하는 파일들은 xinetd기반 서비스들의 개별 설정파일
/home/level4/tmp로 이동한 후 ls -al 명령어를 이용해 디렉토리를 확인했지만 backdoor 파일은 존재하지 않는다.
따라서 우리가 리눅스 명령어를 실행하도록 코드를 짜 주어야 한다.
vi editor를 이용해 backdoor.c 파일을 만들어 주고
코드는 다음과 같다.
우선 쉘 명령어가 잘 실행되는지 확인하기 위해 system에 "id"를 넣어준다.
(쉘 명령어 실행 확인과 동시에 권한도 확인할 수 있다!)
//backdoor.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
system("id"); //C언어에서 리눅스 쉘 명령어를 실행
//level5의 권한으로 실행되는지 확인하기 위해
//id 명령어 입력
return 0;
}
작성한 코드를 컴파일 하고 확인한다.
컴파일 (gcc -o backdoor backdoor.c) 실행파일 이름은 반드시 backdoor여야 한다!
이제 위에서 보았던 finger 서비스를 이용해서 backdoor 파일을 실행시킬 것이다.
(finger @localhost)
localhost의 id를 출력하는 것을 볼 수 있다! (system 명령어가 잘 작동함)
권한 또한 level5인 것을 확인할 수 있다!
그럼 이제 level5의 비밀번호를 알아내보자!
위의 코드에서 system에 id 대신 "my-pass"를 넣어주고 return 0; 은 지워주자
(이유는 모르겠지만 return 0; 이 있으면 finger가 잘 작동하지 않았음...)
//backdoor.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
system("my-pass");
//level5의 비밀번호를 알아내기 위해
//my-pass 입력
}
다시 컴파일을 해주고 (gcc -o backdoor backdoor.c) 여기서도 실행파일 이름은 무조건 backdoor!
finger @localhost를 입력해주면?
level5의 pw를 얻을 수 있다!
level5의 pw: "what is your name?"
'wargame 풀이 > FTZ' 카테고리의 다른 글
FTZ level6 풀이 (0) | 2020.09.15 |
---|---|
FTZ level5 풀이 (0) | 2020.09.14 |
FTZ level3 풀이 (0) | 2020.09.12 |
FTZ level2 풀이 (0) | 2020.09.12 |
FTZ level1 풀이 (0) | 2020.09.12 |