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. 密码学: 经典密码算法的现代应用

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

相似文章
相似文章
 全屏