机器学习认证挑战:Nullcon-HackIM CTF 2019 MLAuth-Misc(500)解题实录

Tl;dr

关于这个挑战已有大量解题报告,我撰写本文的原因是解题过程异常简洁——由于题目特殊构造方式,仅用四个步骤就完成了破解。😃

挑战描述

从Google Drive链接下载的压缩包中包含两个文件:get_prob.pykeras_model。文件命名暗示这是一个机器学习相关挑战,其中keras_model是预训练模型文件(通过file命令确认其采用分层数据格式)。get_prob.py文件既包含问题描述,也提供了使用给定模型在本地验证特征向量真实性的代码。

问题描述如下:
某组织部署了准确率达99.9%的机器学习认证系统"mlAuth"。每位员工的档案由784个十六进制值组成的字符串表示,系统通过训练这些档案来预测员工真实性概率。仅当预测概率高于0.99时才授予访问权限。目标就是构造能欺骗该系统的伪造档案。

解题过程

作为机器学习新手,我首先搜索了Keras模型可视化方法。使用Python keras库的plot_model函数输出了模型结构图,但随后陷入困境——特征向量要求输入784个十六进制字符(取值范围0x0-0xff)。

通过打印脚本变量,发现程序将十六进制转换为长度785的列表(索引从0开始),经查证这些就是模型的特征参数。最终系统会根据训练模型给出评分,我们需要构造使评分>0.99的十六进制档案才能从服务器获取flag。

四步破解法

灵光一现后,我决定尝试以下组合方案(队友同时编写暴力破解脚本):

  1. 全最小值测试
    profile = hex(0)*784
    认证概率结果:0.0

  2. 全最大值测试
    hex(255)*784
    认证概率提升至:0.9240912

  3. 半半混合测试
    hex(0)*392 + hex(255)*392
    概率继续上升至:0.95876306

  4. 四等分交替测试
    hex(0)*196+hex(255)*196 重复两次
    最终获得完美概率:0.9999167

胜利成果

将第四步构造的特征向量提交服务器后,成功获取flag:
hackim19{wh0_kn3w_ml_w0ould_61v3_y0u_1337_fl465}

我们团队dark_phoenix最终排名第38位,这次CTF经历让我获益良多。下次挑战再见! 😃
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码

posted @ 2025-08-06 16:18  qife  阅读(16)  评论(0)    收藏  举报