[HTB] Outbound (Easy_Linux)
🔐 보호된 게시글
이 게시글을 보려면 비밀번호를 입력해주세요
Congratulations OilLampCat, best of luck in capturing flags ahead!
시작에 앞서
이번엔 다시 돌아온 linux 머신(그것도 easy)인데,
어라? 리눅스에서 계정 정보를 주는 것은 처음이다.
계정 : tyler / LhKL1o9Nm3X2
일단 시작해보자구.
정찰 및 정보 수집 (Reconnaissance & Enumeration)
보아하니 SSH와 http 포트가 열려있는데 mail.outbound.htb라는 도메인으로 리다이렉트가 되는 것을 확인했다.
그렇다면 우리의 타겟은 저 메일이겠지?
/etc/hosts 파일에 매핑해주자.
아하 이래서 계정을 주었나보다.
로그인을 해보면.. 메일이 없다?
다 찾아봐도 다른 특별한 내용은 없었고 대신 무엇으로 만들어 졌는지, 거기에 쓰인 플러그인들의 버전이 무엇인지 등의 내용들을 찾을 수 있었다. 그럼 이제 이걸 토대로 침투하러 가보자!
초기 침투 (Initial Foothold / Exploitation)
아니 검색 하자마자 바로 이 버전 웹메일의 취약점이 나온다. 그것도 RCE라니.
따끈따끈한 metasploit 모듈이다.
hakaioffsec/CVE-2025-49113-exploit 혹은 다른 POC를 이용하면 될듯 한데 난 가능하면 msf를 쓰지 않고 진행해보겠다.
리버스 쉘을 얻는데 성공했다.
하지만 내가 접근할 수 있는 권한이 없다는거..
물론 계정도 있으니 바로 로그인하면 그만이다.
아쉽게도 파이썬이 없어서 이상한 쉘로 볼 수밖에 없다.
어.. 근데 내가 뭘 할수 있지? send 파일도 비어있고..
일단 칭찬은 고맙고 보아하니 roundcubemail에서는 config.inc.php라는 파일이 중요하다고 한다.
일단 찾았고 한번 파일을 열어보자.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
/*
+-----------------------------------------------------------------------+
| Local configuration for the Roundcube Webmail installation. |
| |
| This is a sample configuration file only containing the minimum |
| setup required for a functional installation. Copy more options |
| from defaults.inc.php to this file to override the defaults. |
| |
| This file is part of the Roundcube Webmail client |
| Copyright (C) The Roundcube Dev Team |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
| See the README file for a full license statement. |
+-----------------------------------------------------------------------+
*/
$config = [];
// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:password@host/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// NOTE: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
// or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
$config['db_dsnw'] = 'mysql://roundcube:RCDBPass2025@localhost/roundcube';
// IMAP host chosen to perform the log-in.
// See defaults.inc.php for the option description.
$config['imap_host'] = 'localhost:143';
// SMTP server host (for sending mails).
// See defaults.inc.php for the option description.
$config['smtp_host'] = 'localhost:587';
// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';
// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';
// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';
// Name your service. This is displayed on the login screen and in the window title
$config['product_name'] = 'Roundcube Webmail';
// This key is used to encrypt the users imap password which is stored
// in the session record. For the default cipher method it must be
// exactly 24 characters long.
// YOUR KEY MUST BE DIFFERENT THAN THE SAMPLE VALUE FOR SECURITY REASONS
$config['des_key'] = 'rcmail-!24ByteDESkey*Str';
// List of active plugins (in plugins/ directory)
$config['plugins'] = [
'archive',
'zipdownload',
];
// skin name: folder from skins/
$config['skin'] = 'elastic';
$config['default_host'] = 'localhost';
$config['smtp_server'] = 'localhost';
오! mysql 계정에 대한 정보를 얻었다!
뭔가 암호화되어있으니 주의하라는 문구가 들어있는게 있긴 한데 이건 일단 뭔지 모르겠으니 넘어가서 mysql을 이용해볼까?
왜 안 뜨는거지?
쉘의 문제인가 싶어 metasploit을 이용해보기로 했다.
자 필수적인 부분을 모두 기입후 실행시키자.
음.. 이게 이상하게 exit;을 넣어야지만 위에 입력한 값의 결과 값이 나오는데 왜 이런걸까?
다른게 문제가 아니라 역시 생각했듯 셸의 형태가 문제였다.
확실히 이제야, 비대화형으로 실행하니 잘 나온다.
이렇게 뭔가를 찾아서 gemini에게 물어보니,
오? base64로 인코딩된 세션 정보라는데?
확실히 그러했다!
jacob
L7Rv00A8TuwJAr67kITxxcSgnIk25Am/
어쩌면 당연하겠다만 이거 자체가 비밀번호는 아닌 샘이다. 그렇다고 base64도 아니였다.
공식 roundcubemail 깃허브의 내용을 찾아보니 아예 복호화에 대한 코드가 있었다.
실행시켜 복호화 시킬 내용을 넣으니 이번에야말로 이게 비밀번호일까?
드디어 jacob의 이메일에 접속해 볼 수 있었다.
일단 첫 메일에서는 tyler가 메일 비번 바뀌었으니 다음에 로그인하면 비밀번호를 바꾸라고 한다. 이건 ssh의 비밀번호일까? 아니면 바뀌기 전의 이메일 비밀번호일까?
mel이라는 사람에게 연락이 왔는데 메인 서버의 리소스 사용량이 비정상적으로 높아서 확인하기 위해 Below라는 모니터링 툴을 설치했고 jacob에게 그 권한을 부여했다고 한다.
그럼 이제 위 결과에 따라 첫 메일 부터 시도해보자.
오잉? 진짜로 ssh네? 그리고 바로 뭔가 사용량들이 쭉 뜨는데 이게 위에서 말한 below라는 모니터링 툴인걸까?
일단 userflag를 얻었으니 한잔해.
권한 상승 (Privilege Escalation)
일단 아까 위에서 Below라는 툴에 권한이 있다고 했으니까 sudo -l 라는 명령어를 통해서 확인해보니 /usr/bin/below라는 툴에 권한이 있는것을 확인해볼 수 있었다.
찾아보니 Below has Incorrect Permission Assignment for Critical Resource라고 하는 취약점이 있었다. CVE-2025-27591로 나와있어 이를 이용하면 될듯 하다.
혹시하여 jacob@outbound:~$ sudo /usr/bin/below 명령어를 통해 들어가 확인해보니 버전이 0.8.0이었다.
BridgerAlderson/CVE-2025-27591-PoC를 이용하여 루트 권한을 얻는데 성공했다!
마치며
오랜만에 다시 돌아온 리눅스! 뭔가 확실히 아직은 리눅스 문제 푸는게 훨씬 더 익숙하다.
근데 이번 문제는 뭔가 user플래그를 얻는게 root 얻는 것 보다 훨씬 어려웠던 느낌? 특히 mysql에 대해 잘 알지 못한 상태로 도전을 하게 되니까 계속 진행하며 막혀서 더 그랬던 것도 있는듯 하다.
그리고 이제야 스크립트 키디 타이틀을 얻게 되었다. 다음 Hacker까지! 꾸준히 노력해보자!