k8slanparty-challenge3-data-leakage

소개

앞서 소개한 K8SLANPARTY 2 – Finding Neighbours 풀이에 이어 3 – Data Leakage 풀이를 공유해보려 합니다.

이번 문제는 NFS(Network File System) 프로토콜로 공유된 스토리지로부터의 데이터 유출을 확인해야하는 문제입니다.

3 – Data Leakage

문제

문제에서 아래와 같은 정보를 제공해주고 있습니다.

  • 표적 기업은 Production 환경에서 데이터 저장을 오래된 클라우드 지원 기술을 활용합니다.
  • 이 기술은 네트워크 기반 접근제어만 사용하고 있습니다.

Challenge 제목을 보아 데이터 유출 관련된 것이고 네트워크 기반의 접근제어만 적용되어있는 환경에서 flag 를 찾아야 하는 것같습니다.

필요 사전 지식

  • AWS EFS 는 AWS 에서 제공되는 Elastic File System 으로 NFS 프로토콜 기반의 관리형 스토리지 서비스입니다.
  • NFS (Network File System) 프로토콜은 서버-클라이언트 구조로 여러 컴퓨터간 파일을 공유할 수 있도록 해줍니다.

풀이

클라우드 기술 지원의 스토리지를 사용하고 있다고 하였으니, 먼저 df 를 통해 filesystem 별 mount 현황을 확인해 봅니다.

K8SLANPARTY-challenge-3

AWS EFS 가 마운트 되어있네요.

ls -alh /efs 로 마운트된 경로에 어떤 파일이 있는지 확인을 한번 해봅니다.

K8SLANPARTY-challenge-3

바로 flag.txt 파일이 보이네요. 바로 읽어봅니다.

K8SLANPARTY-challenge-3

그냥 읽으니 Permission denied 가 발생하여, sudo 로 다시 읽어보았습니다만,,
root 권한 사용이 막혀있습니다.

다시 flag.txt 파일에 대한 정보를 위에서 보니 파일권한을 아무것도 가지고 있지 않습니다.

mount 명령어를 통해 마운트 정보를 다시 확인해봅니다.

K8SLANPARTY-challenge-3

아래 내용을 추가 확인할 수 있었습니다.

  • 서버 : 192.168.124.98
  • NFS 보안모드 : sec=sys 기본 보안 옵션으로 클라이언트 uid, gid 기반으로 맵핑되어 NFS 서버 파일 접근을 위한 권한 부여

그렇다면 클라이언트의 uid, gid 는 무엇인지 한번 확인해보았습니다.

K8SLANPARTY-challenge-3

1001 이군요.

종합해보면..

그냥 flag.txt 파일을 읽었을 때 권한 에러가 발생하였고, ls 확인 시 파일 권한이 어떠한 권한도 가지고 있지 않았습니다.

NFS 서버의 flag.txt 파일권한이 클라이언트에서 uid, gid 권한으로는 읽을 수 없는 권한을 가지고 있어 이렇게 나온것이 아닌가.. 추측해 봅니다.

다른 권한으로 읽을 수 있어야 할듯한데, 아마 root 권한으로 읽어야 하지 않을까… 생각해 봅니다.

그렇다면 NFS 보안모드가 sec=sys 로 되어있었던 만큼 uid, gid 를 0 (root) 로 지정해서 nfs 서버로 파일 확인요청을 보낼 수 있는 nfs 클라이언트가 있으면 우회가 가능할 것같습니다.

이전 문제들에서도 기본적으로 문제들을 풀 수 있는 tool 들은 제공을 해주었기에.. global 실행 명령어로 nfs 관련된 것이 혹시 있는지 /usr/bin 디렉터리를 뒤져봅니다.

K8SLANPARTY-challenge-3

nfs-cat 이라는 것이 있군요. 해당 이름으로 검색하니 ubuntu manpages 에 관련 정보가 있습니다.

       nfs-cat is a utility to read a file off an NFS server.

       Example: Print the content of a file:

           $ nfs-cat nfs://127.0.0.1/data/tmp/foo.c

사용 방법이 나오네요. 하지만 uid, gid 지정에 대한 옵션은 보이질 않습니다.

manpage 에 추가로 확인해 보라는 libnfs 라이브러리 깃페이지를 확인해봅니다. 아마 libnfs 라이브러리를 사용하여 구현된 것 같습니다.

확인 결과 아래와 같이 libnfs 는 NFS 쉐어 서버에 엑세스할 수 있는 client library 라고 합니다.

K8SLANPARTY-challenge-3

uid, gid 를 포함하는 nfs url 포맷을 위와 같이 사용할 수 있도록 해줍니다.

그렇다면 이를 이용하여 nfs-cat 인자로 uid, gid 0 을 포함하는 nfs url 를 전달해서 읽어봅니다.

K8SLANPARTY-challenge-3

// 를 넣어야 절대경로 확인이 된다고 하여 다시 입력하니 flag 가 확인이 되었네요!

Series Navigation<< K8SLANPARTY – Challenge 2 Finding Neighbours 풀이K8SLANPARTY – Challenge 4 Bypassing Boundaries 풀이 >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Back To Top