CTF

[9월 10일] CTF_Hackable3

ljm 2025. 9. 10. 16:37

MAC 주소 1EEE

 

 

arp-scan 결과 192.168.16.115

 

 

nmap 결과, 차단되어있는 22번 포트 확인

 


 

http 접속

 

view source에서 port knocking 힌트 확인

 

/login_page

 

.login.html

 


 

gobuster로 디렉토리 스캔

 

/css에서 이상한 코드 발견

 

"4444" 단서 획득

 

/config에서 이상한 코드 발견

 

"10000" 단서 획득

 


 

/backup에서 의문의 wordlist 발견 > hydra 명령어에 사용될지도 모름

 

 

robots.txt

 

혹시 몰라서, durb 명령어도 사용

 

 

login.php를 확인해본결과 3.jpg가 의심스러움
3.jpg의 이미지를 확대해봤지만 잘 안보임
'스테가노그래피' 일지도 모르니까, 우선 내 Kali에 3.jpg 다운받기

 

 

여기서, 스테가노그래피란?

 

스테가노그래피'비밀 통신' 기술의 한 종류로, 메시지나 파일을 다른 파일(예: 사진, 오디오, 동영상) 안에 숨겨서, 겉으로 보기에는 아무런 이상이 없는 것처럼 보이게 하는 기술입니다.


암호화(Cryptography)와는 어떻게 달라?

  • 암호화: 메시지를 알아볼 수 없는 형태로 '변형' 합니다.
    • 예: "안녕" -> "x7d#kL2"
    • 메시지 자체가 숨겨지지는 않기 때문에, 누군가 암호화된 메시지를 발견하면 "이건 비밀 메시지구나"라고 알아차릴 수 있습니다.
  • 스테가노그래피: 메시지 자체를 '숨깁니다'.
    • 예: "안녕"이라는 글자를 평범한 고양이 사진 안에 숨깁니다.
    • 겉으로 보면 그냥 고양이 사진일 뿐이라서, 누군가 이 파일을 보더라도 그 안에 비밀 메시지가 있다는 사실조차 알지 못합니다.

어떻게 숨길까?

가장 흔한 방법은 디지털 이미지나 오디오 파일의 미세한 부분을 수정하는 것입니다. 예를 들어, 사진을 이루는 수많은 픽셀의 색상 값을 아주 조금씩 바꾸는 방식으로 데이터를 숨길 수 있습니다. 이 정도의 변화는 사람의 눈으로는 거의 구분할 수 없습니다.

어디에 쓰일까?

  • 보안 및 정보보호: 기밀 문서를 숨기거나, 워터마크를 삽입하는 용도로 사용됩니다.
  • 사이버 범죄: 범죄 조직이 불법 정보를 숨겨서 주고받는 데 악용되기도 합니다.

스테가노그래피는 겉으로 드러나지 않는다는 점에서 강력한 비밀 통신 수단이지만, 이 때문에 악의적으로 사용될 수도 있어 보안 전문가들이 주의 깊게 다루는 분야이기도 합니다.

 

 


 

stegseek 도구를 다운받기

 

"Stegseek" 이란 무엇일까?

stegseek는 **스테가노그래피(Steganography)**를 이용해 숨겨진 파일을 찾는 도구입니다.

이름에서 알 수 있듯이 'Steg' (스테가노그래피)와 'seek' (찾다)의 합성어입니다. 주로 JPG, PNG 같은 이미지 파일이나 MP3 같은 오디오 파일에 숨겨진 비밀 파일을 찾아낼 때 사용됩니다.


stegseek는 어떻게 파일을 찾아낼까?

stegseek는 **무차별 대입 공격(Brute-force attack)**을 사용해 숨겨진 파일을 찾습니다.

스테가노그래피로 파일을 숨길 때 비밀번호를 설정하는 경우가 많습니다. stegseek는 미리 가지고 있는 비밀번호 목록(wordlist)에 있는 단어들을 하나씩 대입해서 숨겨진 파일의 비밀번호를 찾아냅니다.

만약 비밀번호가 일치하면 숨겨진 파일의 압축이 풀리면서 파일의 내용을 볼 수 있게 되는 방식입니다.

 

 

rockyou.txt 파일을 이용해서 3.jpg를 stegseek 스캔

 

생성된 img 파일의 값은 65535

 

 

 

여기까지 10000, 4444, 65535 총 3개의 값을 발견했다.
port-knocking 힌트와, img파일의 'porta'를 미루어볼때, 아마도 포트번호로 추정된다.

 

 


 

※ 반대로 steghide 도구를 사용해도 된다. 파일을 숨기거나 추출할 수 있다. (Embed/Extract)

 

steghide 를 이용하여 3.jpg 추출
steganopayload148505.txt 추출

 


 

 

knockd 다운받기

 

 

 

knockd 란 무엇일까?

 

 

미리 정해둔 순서대로 특정 포트에 '똑똑' 노크(접속시도) 를 해야만 진짜 접속할 포트를 열어주는 보안 기술


포트 노킹이란?

포트 노킹은 서버의 특정 포트를 열거나 닫기 위해 미리 정해진 순서대로 TCP 또는 UDP 패킷을 보내는 보안 기술입니다. 외부에서 특정 포트(예: SSH 접속에 사용되는 22번 포트)에 바로 접근하는 것을 막고, '비밀 신호'를 보낸 사용자에게만 해당 포트를 일시적으로 열어주는 방식입니다.

예를 들어, SSH 포트를 외부에 아예 닫아두고, 다음과 같은 '비밀 신호' 순서로 패킷을 보내도록 설정할 수 있습니다.

  1. 5400번 포트로 접속 시도
  2. 6700번 포트로 접속 시도
  3. 8900번 포트로 접속 시도

이렇게 미리 정한 순서대로 포트에 접근 시도가 들어오면, knockd는 SSH 포트(22번)를 열어 사용자가 접속할 수 있게 해줍니다.


knockd의 역할

knockd는 서버에서 데몬(daemon) 형태로 동작합니다. 데몬은 백그라운드에서 계속 실행되면서 특정 이벤트를 감시하는 프로그램입니다.

knockd는 설정 파일(knockd.conf)에 정의된 규칙에 따라 다음과 같은 작업을 수행합니다.

  • 패킷 감시: 모든 포트로 들어오는 패킷을 감시합니다.
  • 패킷 순서 분석: 미리 정해진 순서대로 패킷이 들어오는지 확인합니다.
  • 규칙 실행: 올바른 순서의 패킷이 감지되면, 방화벽 규칙을 변경하여 특정 포트를 열어줍니다.

이러한 knockd의 기능 덕분에, 해커나 악의적인 사용자는 해당 포트의 존재조차 알기 어렵기 때문에 무차별 대입 공격(Brute-force attack) 같은 공격을 효과적으로 방어할 수 있습니다.

 

해당 포트들로 노크를 해보았다.

 

SSH 포트가 열린것을 확인

 


 

아까 웹에서 찾았던 wordlist를 내 Kali로 다운받기

 

192.168.16.52의 jubiscleudo 계정에 대해 wordlist.txt 파일의 모든 비밀번호를 하나씩 대입해보며 SSH 로그인 시도 공격 결과 'onlymy'라는 비밀번호 획득

 

jubiscleudo SSH 접속

 

user_flag 획득

 

 

wget 명령어가 사용가능하며, suid를 가진 파일도 없고, sudo 명령가능한 파일도 없음을 확인

 


 

파이썬 내장 모듈을 이용해 간단한 웹 서버를 실행
8000번 포트로 linpeas.sh 다운받기
linpeas.sh로 취약점 찾기
password가 담긴 php파일을 발견하였다.

 


 

hackable_3의 로그인정보 획득
hackable_3 로그인 완료

 

 

hackable_3 계정에서 lxd 취약점 발견 > lxd 권한 상승 시도해보기

 

 

 

lxd-alpine-builder : LXD 컨테이너를 위한 Alpine 리눅스 이미지를 만드는 데 사용되는 스크립트 모음

 

alpine 넘겨주기위해 포트 오픈
alpine 넘겨받기
현재 폴더에 있는 alpine linux 이미지 파일을 LXD 시스템으로 가져오면서 hacktest 라는 별칭을 붙여줌
lxd init으로 컨테이너 환경 세팅 (사용자의 시스템 환경에 맞게 LXD를 자동으로 구성)

 

hacktest 이미지파일로 ignite라는 새로운 컨테이너 생성 및 특권 모드 부여

 

 

ignite 컨테이너에 mydevice라는 디스크 추가 및 source를 mnt/root에 마운트 > 컨테이너 안에서 호스트 시스템의 모든 파일에 접근 가능 > 컨테이너 시작 후 쉘을 실행

 

root 권한 획득 후 root_flag 획득

 

 

 

설정 오류: 핵심적인 문제는 hackable_3 같은 일반 사용자 계정이 lxd 그룹에 속해 있었다는 점.

이 그룹에 속한 사용자는 LXD 컨테이너를 생성하고 관리할 수 있는 특별한 권한을 가지고 있다.

 

lxd 권한 상승 취약점을 이용해 root 권한을 획득하는 과정

  1. 우선 hackable_3 계정으로 전환하여, 이 계정이 lxd 권한 상승이 가능한 조건을 갖추고 있는지 확인
  2. lxd 권한 상승을 위해 alpine 이미지를 사용하기로 결정하고, 해당 이미지를 다운로드
  3. 이후 이미지를 가져와서 컨테이너를 만들고, 이 컨테이너를 호스트 시스템의 /root 디렉터리에 마운트하여 root 권한을 탈취

  컨테이너 기술의 권한 관리 취약점을 이용하는 대표적인 해킹 시나리오.

 

lxd 그룹에 속한 사용자는 컨테이너를 생성하고 관리할 수 있는데, 이 권한을 악용해 호스트 시스템의 루트 권한까지 접근 가능

'CTF' 카테고리의 다른 글

[9월 12일] CTF_Keyring  (0) 2025.09.12
[9월 11일] CTF_Ripper: 1  (0) 2025.09.11
[9월 9일] CTF_Potato Sun(CSR): 1  (0) 2025.09.09
[9월 9일] CTF_Potato: 1  (0) 2025.09.09
[9월 8일] CTF_Momentum2  (0) 2025.09.08