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取反)
后门触发流程
- 输入特定序列"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 - 简单逆向分析
程序逻辑
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共享库
劫持机制分析
-
环境变量解密:
- 构造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
original_char = (cipher_char - position) mod 26
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附件并解码
- 使用strings搜索密码:
-
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
- root密码哈希:
高级技术点
通过修改哈希值重新创建闪存镜像,实现路由器后门植入。
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解题经验,涵盖了从硬件层到应用层的完整攻击面。关键学习点包括:
- 硬件安全: VHDL代码审计、PCB文件分析、串口协议逆向
- 工控安全: 专用协议的安全风险评估
- 逆向工程: 多种编程语言的逆向技巧和算法分析
- 数字取证: 日志分析、网络取证、嵌入式设备取证
- 算法安全: 动态规划等算法在安全领域的应用
- 密码学: 经典密码算法的现代应用
这些技术点构成了完整的安全技能体系,为后续的渗透测试和漏洞研究奠定了坚实基础。