HTB多领域CTF解题全记录:硬件逆向、工控协议到动态规划
字数 4259 2025-11-05 23:45:18

HTB多领域CTF解题全记录:从硬件逆向到动态规划

概述

本文档详细记录了HTB(Hack The Box)平台上多个技术领域的CTF题目解题过程,涵盖硬件逆向、工控协议、逆向工程、取证分析和编程算法等多个方向。每个题目都包含完整的技术分析和解题思路。

一、硬件逆向专题

1.1 It's Oops PM - 硬件后门分析

系统架构分析

该系统模拟卫星通信环境传感器,包含四个核心模块:

  • tpm: 主控制器
  • ckey: 密钥生成器
  • encryption: 加密模块
  • backdoor: 后门检测模块

后门机制详解

backdoor.vhdl中发现关键代码:

constant pattern : STD_LOGIC_VECTOR(15 downto 0) := "1111111111101001";

当输入D等于"1111111111101001"(十六进制FFE9)时,后门信号B被置为'1'

加密与密钥机制

密钥设置 (key.vhdl):

constant key : STD_LOGIC_VECTOR(15 downto 0) := "0110001111100001";  // 十六进制63E1

加密逻辑 (encryption.vhdl):

  • 常规位:E(i) <= D(i) XOR K(i)(按位异或)
  • 特殊位处理:
    • E(0) <= NOT K(0)(位0取反)
    • E(6) <= NOT K(6)(位6取反)
    • E(13) <= NOT K(13)(位13取反)

后门触发流程

  1. 输入特定序列"1111111111101001"
  2. backdoor模块检测匹配,设置B='1'
  3. tpm模块直接输出密钥而非加密结果
  4. 攻击者获得密钥"0110001111101001"

Flag: HTB{4_7yp1c41_53cu23_TPM_ch1p}

1.2 Critical Flight - PCB文件分析

Gerber文件结构解析

  • 铜箔层: 主要导电层,连接电子元件
  • 阻焊层: 保护铜线,防止氧化和短路
  • 丝印层: 元件标记和识别
  • 焊膏层: 促进导电和热稳定性
  • 钻孔层: 固定和层间连接
  • 外形轮廓: 定义PCB形状

解题工具与方法

使用在线Gerber查看器:https://www.pcbway.com/project/OnlineGerberViewer.html

通过分析底层图层发现flag信息。

Flag: HTB{533_7h3_1nn32_w02k1n95_0f_313c720n1c5#$@}

1.3 Debug - 串口通信分析

工具准备

  • 使用Saleae Logic 2软件进行逻辑分析
  • 识别UART串口通信协议

参数配置关键

  • 协议选择:Async Serial(异步串行)
  • 通道设置:Channel 0作为TX
  • 波特率:通过尝试常见值(9600、115200等)确定
  • 数据位:8位
  • 校验位:None
  • 停止位:1位

数据分析流程

  1. 正确配置参数后解码串口数据
  2. 筛选有效信息得到flag

Flag: HTB{547311173_n37w02k_c0mp20m153d}

二、工控协议分析

2.1 Shush Protocol - 工控网络取证

协议特征

  • 明文传输协议
  • 缺乏足够加密保护

分析方法

使用Wireshark等工具直接分析网络流量,在CTF-Net中可快速提取关键信息。

技术要点: 自定义工控协议的安全风险评估

Flag: HTB{50m371m35_cu570m_p2070c01_423_n07_3n0u9h7}

三、逆向工程专题

3.1 FlagCasino - 随机数生成器逆向

算法识别与分析

  1. RNG类型识别: 检查数组值超出0x7FFFFFFF,排除简单31位LCG
  2. glibc random()算法实现:
    • 使用Peter Selinger简化版本
    • 状态数组r[0..344]初始化
    • 通过(16807 * prev) % 2147483647填充初始31个状态
    • 反馈计算:r[i] = (r[i-31] + r[i-3]) % 2^32
    • 输出:r[344] >> 1

破解策略

  1. 对每个check[i]枚举种子0-255
  2. 用上述算法计算第一个输出进行匹配
  3. 拼接所有种子字符得到flag

Flag: HTB{r4nd_1s_v3ry_pr3d1ct4bl3}

3.2 LootStash - 简单逆向分析

程序逻辑

rand()生成随机整数
v4 % 0x7F8取模
右移3位(除以8)作为索引
输出gear[index]

解题方法

  • 直接模拟程序逻辑计算索引
  • 或通过字符串搜索快速定位

Flag: HTB{n33dl3_1n_a_l00t_stack}

3.3 Don't Panic! - Rust程序分析

技术特点

  • Rust语言逆向特殊性
  • 使用Ghidra Bridge进行动调分析

Flag: HTB{d0nt_p4lche3ro}

3.4 TunnelMadness - 3D路径查找

问题描述

  • ELF程序从(0,0,0)开始移动
  • 目标:找到type=3的cell
  • 障碍:type=2的墙壁不可通过
  • 需要输出路径字符串(L/F/R等方向)

解题脚本关键

实现3D空间中的路径搜索算法

Flag: HTB{tunn3l1ng_ab0ut_in_3d_0c7f2e5758fde341dab91595d18a39ce}

3.5 Satellite Hijack - 函数劫持分析

程序结构

  • satellite: ELF 64位PIE可执行文件
  • 依赖library.so共享库

劫持机制分析

  1. 环境变量解密:

    • 构造SAT_PROD_ENVIRONMENT
    • 每个字节减1解码真实变量名
  2. 内存劫持流程:

    • 获取程序头基址(getauxval(AT_PHDR))
    • 遍历动态段(PT_DYNAMIC)
    • 定位.symtab, .strtab, .rela.plt
    • 找到read符号索引
    • mmap新内存并写入加密数据
    • memfrob()解密(XOR 42)
    • 覆盖read()的GOT/PLT入口
  3. flag解密逻辑:

    • 劫持的read()函数内进行XOR检查
    • flag分散在多个变量(flag_enc1..flag_enc5)
    • XOR规则:(input_byte ^ enc_byte) == index

解密算法

# 逆向计算原始flag
original_char = (cipher_char - position) mod 26

Flag: HTB{l4y3r5_0n_l4y3r5_0n_l4y3r5!}

四、数字取证专题

4.1 An unusual sighting - SSH日志分析

问题与解答

  1. SSH服务器地址: 100.107.36.130:2221
  2. 首次成功登录时间: 2024-02-13 11:29:50
  3. 异常登录时间: 2024-02-19 04:00:14(root用户凌晨登录)
  4. 攻击者公钥指纹: OPkBSs6okUKraq8pYo4XwwBg55QSo210F09FCe1-yj4
  5. 首个执行命令: whoami
  6. 退出前最后命令: ./setup

分析方法

  • 综合分析/var/log/auth.log和命令历史日志
  • 按时间序列重建攻击会话

Flag: HTB{4n_unusual_s1ght1ng_1n_SSH_l0gs!}

4.2 Phreaky - SMTP协议分析

攻击流程

  1. 邮件附件提取:

    • 使用strings搜索密码: strings phreaky.pcap | grep Password
    • 按TCP流提取Base64附件并解码
  2. PDF分段合并:

    • 将所有解码后的PDF分段合并为完整文件
  3. 信息提取:

    • 查看合并后的PDF获取flag

Flag: HTB{Th3Phr3aksReadyT0Att4ck}

4.3 Silicon Data Sleuthing - 路由器取证

设备信息

  • 小米路由器OpenWRT系统
  • 版本: 23.05.0
  • Linux内核: 5.15.134

文件系统分析

  1. 分区结构:

    • overlay分区包含用户配置
    • 挂载在SquashFS之上
    • 使用binwalk提取分析
  2. 关键信息提取:

    • root密码哈希: $1$YfuRJudo$cXCiIJXn9fWLIt8WY2Okp1:19804:0:99999:7:::
    • PPPoE凭证: 用户名yohZ5ah
    • WiFi配置: SSIDVLT-AP01
    • 端口重定向: 1778, 2289, 8088

高级技术点

通过修改哈希值重新创建闪存镜像,实现路由器后门植入。

Flag: HTB{Y0u'v3_m43t3r3d_0p3nWRT_d4t4_3xtr4ct10n!!_9f21960f4d36567b466cb6461ce6b900}

五、编程算法专题

5.1 Dynamic Paths - 动态规划问题

问题描述

网格最小路径和问题:从左上角到右下角,只能向右或向下移动,求路径数字最小和。

动态规划解法

状态定义:

  • dp[i][j]: 从(0,0)到(i,j)的最小路径和

状态转移方程:

dp[0][0] = grid[0][0]
第一行: dp[0][j] = dp[0][j-1] + grid[0][j]  
第一列: dp[i][0] = dp[i-1][0] + grid[i][0]
其他: dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j]

答案: dp[rows-1][cols-1]

算法实现要点

  • 边界条件处理
  • 状态转移的正确性验证
  • 路径重建(如需要)

Flag: HTB{b3h3M07H_5h0uld_H4v3_57ud13D_dYM4m1C_pr09r4mm1n9_70_C47ch_y0u_9d68b6a148f828e1ba728c8700e195f7}

六、密码学专题

6.1 Dynastic - 变种凯撒密码

加密算法分析

核心机制: 位置相关的移位密码

  • 每个字符的位移量取决于其在字符串中的位置
  • 加密公式: cipher_char = (original_char + position) mod 26

加解密函数

def to_identity_map(a):  # 字母转数字(A=0,...,Z=25)
def from_identity_map(a):  # 数字转字母
def encrypt(m):  # 第i个字符移动i个位置

解密算法

original_char = (cipher_char - position) mod 26

技术关联: Trithemius密码(凯撒密码的变种)

Flag: HTB{DID_YOU_KNOW_ABOUT_THE_TRITHEMIUS_CIPHER?!_IT_IS_SIMILAR_TO_CAESAR_CIPHER}

总结

本教学文档系统性地整理了HTB平台多个技术领域的CTF解题经验,涵盖了从硬件层到应用层的完整攻击面。关键学习点包括:

  1. 硬件安全: VHDL代码审计、PCB文件分析、串口协议逆向
  2. 工控安全: 专用协议的安全风险评估
  3. 逆向工程: 多种编程语言的逆向技巧和算法分析
  4. 数字取证: 日志分析、网络取证、嵌入式设备取证
  5. 算法安全: 动态规划等算法在安全领域的应用
  6. 密码学: 经典密码算法的现代应用

这些技术点构成了完整的安全技能体系,为后续的渗透测试和漏洞研究奠定了坚实基础。

HTB多领域CTF解题全记录:从硬件逆向到动态规划 概述 本文档详细记录了HTB(Hack The Box)平台上多个技术领域的CTF题目解题过程,涵盖硬件逆向、工控协议、逆向工程、取证分析和编程算法等多个方向。每个题目都包含完整的技术分析和解题思路。 一、硬件逆向专题 1.1 It's Oops PM - 硬件后门分析 系统架构分析 该系统模拟卫星通信环境传感器,包含四个核心模块: tpm : 主控制器 ckey : 密钥生成器 encryption : 加密模块 backdoor : 后门检测模块 后门机制详解 在 backdoor.vhdl 中发现关键代码: 当输入D等于"1111111111101001"(十六进制FFE9)时,后门信号B被置为'1' 加密与密钥机制 密钥设置 ( key.vhdl ): 加密逻辑 ( encryption.vhdl ): 常规位:E(i) <= D(i) XOR K(i)(按位异或) 特殊位处理: E(0) <= NOT K(0)(位0取反) E(6) <= NOT K(6)(位6取反) E(13) <= NOT K(13)(位13取反) 后门触发流程 输入特定序列"1111111111101001" backdoor模块检测匹配,设置B='1' tpm模块直接输出密钥而非加密结果 攻击者获得密钥"0110001111101001" Flag : HTB{4_7yp1c41_53cu23_TPM_ch1p} 1.2 Critical Flight - PCB文件分析 Gerber文件结构解析 铜箔层 : 主要导电层,连接电子元件 阻焊层 : 保护铜线,防止氧化和短路 丝印层 : 元件标记和识别 焊膏层 : 促进导电和热稳定性 钻孔层 : 固定和层间连接 外形轮廓 : 定义PCB形状 解题工具与方法 使用在线Gerber查看器:https://www.pcbway.com/project/OnlineGerberViewer.html 通过分析底层图层发现flag信息。 Flag : HTB{533_7h3_1nn32_w02k1n95_0f_313c720n1c5#$@} 1.3 Debug - 串口通信分析 工具准备 使用Saleae Logic 2软件进行逻辑分析 识别UART串口通信协议 参数配置关键 协议选择:Async Serial(异步串行) 通道设置:Channel 0作为TX 波特率:通过尝试常见值(9600、115200等)确定 数据位:8位 校验位:None 停止位:1位 数据分析流程 正确配置参数后解码串口数据 筛选有效信息得到flag Flag : HTB{547311173_n37w02k_c0mp20m153d} 二、工控协议分析 2.1 Shush Protocol - 工控网络取证 协议特征 明文传输协议 缺乏足够加密保护 分析方法 使用Wireshark等工具直接分析网络流量,在CTF-Net中可快速提取关键信息。 技术要点 : 自定义工控协议的安全风险评估 Flag : HTB{50m371m35_cu570m_p2070c01_423_n07_3n0u9h7} 三、逆向工程专题 3.1 FlagCasino - 随机数生成器逆向 算法识别与分析 RNG类型识别 : 检查数组值超出0x7FFFFFFF,排除简单31位LCG glibc random()算法实现 : 使用Peter Selinger简化版本 状态数组r[ 0..344 ]初始化 通过(16807 * prev) % 2147483647填充初始31个状态 反馈计算:r[ i] = (r[ i-31] + r[ i-3 ]) % 2^32 输出:r[ 344 ] >> 1 破解策略 对每个check[ i ]枚举种子0-255 用上述算法计算第一个输出进行匹配 拼接所有种子字符得到flag Flag : HTB{r4nd_1s_v3ry_pr3d1ct4bl3} 3.2 LootStash - 简单逆向分析 程序逻辑 解题方法 直接模拟程序逻辑计算索引 或通过字符串搜索快速定位 Flag : HTB{n33dl3_1n_a_l00t_stack} 3.3 Don't Panic ! - Rust程序分析 技术特点 Rust语言逆向特殊性 使用Ghidra Bridge进行动调分析 Flag : HTB{d0nt_p4lche3ro} 3.4 TunnelMadness - 3D路径查找 问题描述 ELF程序从(0,0,0)开始移动 目标:找到type=3的cell 障碍:type=2的墙壁不可通过 需要输出路径字符串(L/F/R等方向) 解题脚本关键 实现3D空间中的路径搜索算法 Flag : HTB{tunn3l1ng_ab0ut_in_3d_0c7f2e5758fde341dab91595d18a39ce} 3.5 Satellite Hijack - 函数劫持分析 程序结构 satellite: ELF 64位PIE可执行文件 依赖library.so共享库 劫持机制分析 环境变量解密 : 构造SAT_ PROD_ ENVIRONMENT 每个字节减1解码真实变量名 内存劫持流程 : 获取程序头基址(getauxval(AT_ PHDR)) 遍历动态段(PT_ DYNAMIC) 定位.symtab, .strtab, .rela.plt 找到read符号索引 mmap新内存并写入加密数据 memfrob()解密(XOR 42) 覆盖read()的GOT/PLT入口 flag解密逻辑 : 劫持的read()函数内进行XOR检查 flag分散在多个变量(flag_ enc1..flag_ enc5) XOR规则:(input_ byte ^ enc_ byte) == index 解密算法 Flag : HTB{l4y3r5_0n_l4y3r5_0n_l4y3r5!} 四、数字取证专题 4.1 An unusual sighting - SSH日志分析 问题与解答 SSH服务器地址 : 100.107.36.130:2221 首次成功登录时间 : 2024-02-13 11:29:50 异常登录时间 : 2024-02-19 04:00:14(root用户凌晨登录) 攻击者公钥指纹 : OPkBSs6okUKraq8pYo4XwwBg55QSo210F09FCe1-yj4 首个执行命令 : whoami 退出前最后命令 : ./setup 分析方法 综合分析/var/log/auth.log和命令历史日志 按时间序列重建攻击会话 Flag : HTB{4n_unusual_s1ght1ng_1n_SSH_l0gs!} 4.2 Phreaky - SMTP协议分析 攻击流程 邮件附件提取 : 使用strings搜索密码: strings phreaky.pcap | grep Password 按TCP流提取Base64附件并解码 PDF分段合并 : 将所有解码后的PDF分段合并为完整文件 信息提取 : 查看合并后的PDF获取flag Flag : HTB{Th3Phr3aksReadyT0Att4ck} 4.3 Silicon Data Sleuthing - 路由器取证 设备信息 小米路由器OpenWRT系统 版本: 23.05.0 Linux内核: 5.15.134 文件系统分析 分区结构 : overlay分区包含用户配置 挂载在SquashFS之上 使用binwalk提取分析 关键信息提取 : root密码哈希: $1$YfuRJudo$cXCiIJXn9fWLIt8WY2Okp1:19804:0:99999:7::: PPPoE凭证: 用户名 yohZ5ah WiFi配置: SSID VLT-AP01 端口重定向: 1778, 2289, 8088 高级技术点 通过修改哈希值重新创建闪存镜像,实现路由器后门植入。 Flag : HTB{Y0u'v3_m43t3r3d_0p3nWRT_d4t4_3xtr4ct10n!!_9f21960f4d36567b466cb6461ce6b900} 五、编程算法专题 5.1 Dynamic Paths - 动态规划问题 问题描述 网格最小路径和问题:从左上角到右下角,只能向右或向下移动,求路径数字最小和。 动态规划解法 状态定义 : dp[ i][ j ]: 从(0,0)到(i,j)的最小路径和 状态转移方程 : 答案 : dp[ rows-1][ cols-1 ] 算法实现要点 边界条件处理 状态转移的正确性验证 路径重建(如需要) Flag : HTB{b3h3M07H_5h0uld_H4v3_57ud13D_dYM4m1C_pr09r4mm1n9_70_C47ch_y0u_9d68b6a148f828e1ba728c8700e195f7} 六、密码学专题 6.1 Dynastic - 变种凯撒密码 加密算法分析 核心机制 : 位置相关的移位密码 每个字符的位移量取决于其在字符串中的位置 加密公式: cipher_ char = (original_ char + position) mod 26 加解密函数 解密算法 技术关联 : Trithemius密码(凯撒密码的变种) Flag : HTB{DID_YOU_KNOW_ABOUT_THE_TRITHEMIUS_CIPHER?!_IT_IS_SIMILAR_TO_CAESAR_CIPHER} 总结 本教学文档系统性地整理了HTB平台多个技术领域的CTF解题经验,涵盖了从硬件层到应用层的完整攻击面。关键学习点包括: 硬件安全 : VHDL代码审计、PCB文件分析、串口协议逆向 工控安全 : 专用协议的安全风险评估 逆向工程 : 多种编程语言的逆向技巧和算法分析 数字取证 : 日志分析、网络取证、嵌入式设备取证 算法安全 : 动态规划等算法在安全领域的应用 密码学 : 经典密码算法的现代应用 这些技术点构成了完整的安全技能体系,为后续的渗透测试和漏洞研究奠定了坚实基础。