题目来源: 第七届全国工控系统信息安全攻防竞赛
CRCcode WriteUp
下载题目附件, 根据题目提示Modbus RTU, 查找该协议相关的数据帧格式资料. 据资料可知: (图源)
根据题目, 可以猜测本题解应当与CRC校验有关. 利用在线CRC计算工具, 手动尝试对附件中的Modbus RTU数据进行CRC校验, 附件中存在CRC校验不通过的数据.
在控制台中编写Javascript脚本, 利用该Web工具依次对附件中的数据包进行CRC校验, 可得到校验正确的数据.
将校验正确的数据复制并粘贴到Excel表格软件中, 利用Excel内置的"文本转换成表格工具(文本分列向导)" 将数据按照Modbus RTU协议帧的格式分开, 以便后续分析.
利用Excel的筛选功能, 可以根据设备id/功能码等不同字段的数据包分别进行分析. 最终发现, 在向设备ID为1的设备执行写操作时, 其负载数据可以正常解码:
过滤数据包 | 解码负载数据 |
---|---|
最终测试发现, 按照地址排序,提取出数据, 可得到flag
最后附上在Chrome控制台中执行的Javascript代码:
const _chr = chr;
chr = () => {
_chr();
return document.querySelector("#s4").innerText;
}
let arr = ["010548fda4bb519e", "..............."]; // 粘贴附件里的数据包.
let out = [];
arr.forEach(ele => {
document.querySelector("#input1").value = ele.substr(0, 12) ;
out.push(chr().toLowerCase());
});
let i = 0;
// let _csv = "";
arr.forEach(ele => {
if(ele.substr(12, 4) == out[i]) {
console.log(ele);
// _csv += `${ele.substr(0,2)},${ele.substr(2,2)},${ele.substr(4,4)},${ele.substr(8,4)},${ele.substr(12,4)}`;
}
i++;
});