Writeup 4 2020-之江杯-异常的工程文件
一、题目信息
-
题目名称:异常的工程文件
-
题目类型:文件取证 / 工控组态工程
-
附件:一个被黑客攻击修改过的工程文件包
-
Flag 格式 :
flag{} -
最终 Flag :
flag{854P_l5q2_9Y4a_30Yw}
二、解题思路概览
- 解压附件,观察工程文件目录结构。
- 用
grep -r全目录搜索关键字flag,定位可疑文件。 - 对二进制文件用
strings提取可打印字符串,得到 flag。
三、详细的解题过程
1. 观察工程文件结构
解压后目录如下:
1/
├── bgr/
├── drw/
│ └── untitled.drw
├── dsm/
└── 若干 $FT 后缀文件
其中:
-
dcloadgp.ini是工程配置入口文件,内容为:[BA_DL] GroupNum=0 -
bgr、drw、dsm是典型的工控组态软件目录:drw:画面文件目录(Draw)bgr:背景文件目录dsm:数据/组态文件目录
-
$FT后缀文件是组态软件的临时或缓存文件。
2. 全目录搜索 flag
直接对整个工程目录递归搜索关键字:
bash
root@Rambo:/异常的工程文件# grep -r "flag" ./
输出:
bash
grep: ./1/drw/untitled.drw: binary file matches
root@Rambo:/异常的工程文件#
命中目标文件:./1/drw/untitled.drw。
注意 :grep 对二进制文件只提示"匹配",不显示具体内容。
3. 从二进制文件中提取字符串
用 strings 提取可打印字符串,再过滤 flag:
bash
root@Rambo:/异常的工程文件# strings -n 4 ./1/drw/untitled.drw | grep -i flag
输出:
bash
flag{854P_l5q2_9Y4a_30Yw}
flag
root@Rambo:/异常的工程文件#
成功得到 flag。
四、关键点总结
| 步骤 | 操作 | 结论 |
|---|---|---|
| 1 | 解压并观察目录结构 | 确认为工控组态工程文件 |
| 2 | grep -r "flag" ./ |
定位到 ./1/drw/untitled.drw |
| 3 | `strings -n 4 ... | grep -i flag` |
技术要点
grep -r是文件取证的第一步:它能快速在大量文件中定位包含关键字的文件,即使是二进制文件也会提示匹配。grep对二进制默认不显示内容 :需要配合strings提取可打印字符串。strings -n 4的-n参数:表示只输出长度不小于 4 的字符串,避免输出大量碎片。- flag 被明文嵌入在画面文件里:属于比较基础的藏法,说明黑客直接在组态画面文件里写了 flag。
五、经验与技巧
以后遇到"工程文件被篡改""文件取证"类题目,可以按这个顺序操作:
bash
# 1. 先看文件类型
file 目标文件
# 2. 全目录搜关键字(最快定位)
grep -r "flag" ./
grep -ri "flag" ./
# 3. 对命中的二进制文件提取字符串
strings -n 4 命中文件 | grep -i flag
# 4. 如果 flag 被编码,看十六进制
xxd 命中文件 | grep -i "666c6167" # "flag" 的 hex
常见藏 flag 的位置
| 位置 | 说明 |
|---|---|
| 工程配置文件(.ini) | 常被直接写入明文 |
| 画面文件(.drw) | 文本框、注释、隐藏控件 |
| 脚本文件(.psc/.vbs) | 变量拼接、简单编码 |
| 数据库文件(.dbf/.db) | 寄存器值、历史记录 |
| 二进制文件 | 直接 strings 提取 |
| 文件元数据 | 修改时间、作者、版本号 |
六、最终 Flag
flag{854P_l5q2_9Y4a_30Yw}
Rambo
2026年9月29日