机器学习认证挑战:Nullcon-HackIM CTF 2019 MLAuth-Misc(500)解题实录
Tl;dr
关于这个挑战已有大量解题报告,我撰写本文的原因是解题过程异常简洁——由于题目特殊构造方式,仅用四个步骤就完成了破解。😃
挑战描述
从Google Drive链接下载的压缩包中包含两个文件:get_prob.py
和keras_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。
四步破解法
灵光一现后,我决定尝试以下组合方案(队友同时编写暴力破解脚本):
-
全最小值测试
profile = hex(0)*784
认证概率结果:0.0 -
全最大值测试
hex(255)*784
认证概率提升至:0.9240912 -
半半混合测试
hex(0)*392 + hex(255)*392
概率继续上升至:0.95876306 -
四等分交替测试
hex(0)*196+hex(255)*196
重复两次
最终获得完美概率:0.9999167
胜利成果
将第四步构造的特征向量提交服务器后,成功获取flag:
hackim19{wh0_kn3w_ml_w0ould_61v3_y0u_1337_fl465}
我们团队dark_phoenix最终排名第38位,这次CTF经历让我获益良多。下次挑战再见! 😃
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码