某省工业互联网安全技术技能大赛Writeup
作者:末初 编辑:白帽子社区运营团队
"白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)
"
协议分析
S7协议分析
0300002402f080320100000003000e00050501120a100200010000830000000004000801。
请解读以上协议内容,并准确的拿到此报文返回值,flag即为返回值。提交格式:flag{xxx}。
写入报文的数据分析
03 00 报文头
00 24 数据总长度: 36
02 f0 80 32 固定长度: 4
01 命令类型: 发
00 00 00 03 标记序列号: 3
00 0e 固定长度: 2
00 05 有效数据长度: 5(从偏移量后第一位开始计算)
05 命令起始符号
01 写入数据块个数: 1
12 0a 10 固定长度: 3(返回数据前缀)
02 写入方式: 01按bit写入; 02按byte写入
00 01 写入数据个数: 1(byte方式可以写入多个,bit只能写入单个)
00 00 写入数据块编号: 0
83 写入数据类型: M
00 00 00 写入地址偏移量: 0
00 04 写入方式: 03按bit写入; 04按byte写入
00 08 写入bit的个数
01 写入的值: 1
写入报文的返回值
03 00 报文头
00 16 数据总长度: 22
02 f0 80 32 固定长度: 4
03 命令类型: 收
00 00 00 03 标记序列号: 3
00 02
00 01
00 00
05 01
ff 表示写入正常
flag{0300001602f0803203000000030002000100000501ff}
工控流量分析
用科来诊断数据包时发现几个TCP非法校验的包
查看数据包编号为3397
、3398
的包,发现这些包都带有data
字段
然后在wireshark中分析3397
、3398
时发现了端倪
观察前后几个包,发现.34
给.99
发的包长度都为64
,唯独3399
的长度包为103
;查看发现3399
包被直接附加了一段data字段之外的数据。发现一段连续的字符串,提取出来base64解码
flag{tq2ysds66}
异常流量分析
大部分为HTTP
协议流量,但是查看http流和导出文件都没有发现flag的线索。继续查看少部分的Modbus
协议
发现一个非法校验和的包,查看发现尾部附加了一段字符串
syntvfguvfZbqohffffff
经验比较丰富的手可能一眼就能看出来synt
是字符flag的rot13
编码
flag{flagisthisModbussssss}
OPC流量分析
使用科来网络分析系统
分析流量包
科来网络分析系统下载地址
打开之后发现很多非法校验的包,点击诊断
之后点所有诊断
;然后点击源IP地址
排序,发现了唯一的192.168.0.46
给192.168.0.43
发的包PS:点击排序不了的,取消勾选超过2000不排序
查看包的内容,发现很明显是十六进制的ASCII码
53554E54616E68414D6A41794D513d3d
>>> from binascii import *
>>> hexdata = "53554E54616E68414D6A41794D513d3d"
>>> unhexlify(hexdata)
b'SUNTanhAMjAyMQ=='
>>>
>>> base64_data = unhexlify(hexdata)
>>>
>>> from base64 import *
>>>
>>> b64decode(base64_data)
b'ICSjx@2021'
>>>
flag{ICSjx@2021}
应急处置
图片的秘密
secret.jpg
根据文件名猜测为OurSecret
隐写下一步就是获取密码程序逻辑有比较用户输入和内部秘钥的函数strcmp
,所以这里打个断点,调试就能看到正确秘钥和用户输入秘钥了得到密码:my_m0r3_secur3_pwd
肉眼分辨不出来什么编码,对着我之前写的:收录CTF中MISC常用的在线工具网站
里面的编码一个个试,发现是XXencode
flag{0nly_u5_Kn0w_17_D0nO7_T3l1_o7hers}
现场数据采集
根据题目意思猜测可能为视频流量数据,发现流量包中含有大量h264
协议的包
H264 编解码协议详解
搜索引擎查阅发现可以Wireshark加载lua脚本提取出h264
数据流,然后利用Elecard StreamEye
分析
https://github.com/volvet/h264extractor
Elecard StreamEye Basic 4.4
将下载好的rtp_h264_extractor.lua
脚本放入WireShrak的目录中修改init.lua
,在最后面添加一行:dofile(DATA_DIR.."rtp_h264_extractor.lua")
重启WrireShark,打开流量包;工具->Extract h264 stream from RTP
会在流量包的当前路径生成一个dump.264
使用Elecard StreamEye
打开它
PS:这里使用的版本是
Elecard StreamEye 4.7
,算是比较新的版本,之前用2.9
的版本打开发现看不清楚
flag{GOODFORYOU}
应急恢复
DiskGenius
一把梭;磁盘->打开虚拟磁盘文件->选中磁盘点击恢复文件
flag{73D3DA963F7505E9}
文件分析
010 Editor
打开,看到IDAT
、IEND
字样从而确定这应该是一张png
图片
开头的这几个字节很明显应该是PNG图片的长宽位置,或者对比其他的PNG图片;不难发现该文件缺少了PNG开头的十六个字节
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
保存为what.png
,发现图片貌似长宽显示不完全,再次用010 Editor
打开发现CRC校验报错,修改高度高度任意修改,能看到flag就行,或者使用脚本去爆破原来的宽高
flag{welcome@2021}
组态编程
探索组态密码
上位监控软件密码破解20190510.PCZ
,利用北京力控组态软件ForceControl V7.0
打开
北京力控组态软件ForceControl V7.0(低版本只适配Windows7)
然后点击开发
选择忽略
选择功能->用户管理
设置登登陆方式
选择本地方式
;发现一个admin
的系统管理员
发现admin
账户的密码,但是是星号,看不到,可以利用网上的星号密码查看器
星号密码查询器
得到密码:elexadmin
flag{elexadmin}
恶意程序
恶意app分析
将spyNote_client_easy2.apk
改为spyNote_client_easy2.zip
解压,然后直接在目录下用grep
全局找
root@mochu7-pc:/mnt/c/Users/Administrator/Desktop/工业互联网附件/恶意程序/恶意app/spyNote_client_easy2# ls
AndroidManifest.xml com javamail.charset.map javamail.default.providers javamail.pop3.provider javamail.smtp.provider mailcap.default mimetypes.default res
classes.dex dsn.mf javamail.default.address.map javamail.imap.provider javamail.smtp.address.map mailcap META-INF org resources.arsc
root@mochu7-pc:/mnt/c/Users/Administrator/Desktop/工业互联网附件/恶意程序/恶意app/spyNote_client_easy2# grep -rn '@.*\.com' ./*
grep: ./classes.dex: binary file matches
root@mochu7-pc:/mnt/c/Users/Administrator/Desktop/工业互联网附件/恶意程序/恶意app/spyNote_client_easy2# strings classes.dex | grep -E '@.*\.com'
CONTACT javamail@sun.com
hahaha_wtf@163.com
testmail0917@163.com
root@mochu7-pc:/mnt/c/Users/Administrator/Desktop/工业互联网附件/恶意程序/恶意app/spyNote_client_easy2#
找出来的三个邮箱,第二个就是对的
flag{hahaha_wtf@163.com}
恶意程序分析
给了一个exe
和jpg
jpg
用010 Editor
打开啥也看不出来,猜测应该是被exe
文件处理过的
ida
打开exe
文件
跟进主函数下做处理的sub_401302()
函数,看到了对原图每个字节做异或0x61
处理
使用010 Editor
打开sc.jpg
;然后工具->十六进制运算->二进制异或
异或出来的内容,从末尾看已经看出来有flag字样的十六进制字符
E8 FF FF FF FF C0 5F B9 57 03 02 02 81 F1 02 02
02 02 83 C7 1D 33 F6 FC 8A 07 3C 02 0F 44 C6 AA
E2 F6 E8 02 02 02 02 5E 8B FE 81 C6 16 01 02 02
B9 03 02 02 02 FC AD 01 3C 07 E2 FA B9 8D 10 B7
F8 E8 4D 02 02 02 68 22 01 02 02 FF D0 B9 9E 78
78 CD E8 3C 02 02 02 6A 02 68 44 01 02 02 68 2D
01 02 02 6A 02 FF D0 33 C0 C3 53 56 8B F1 33 D2
EB 12 0F BE CB C1 CA 0D 80 FB 61 8D 41 E0 0F 4C
C1 03 D0 46 8A 1E 84 DB 75 E8 5E 8B C2 5B C3 8D
41 F8 C3 55 8B EC 83 EC 14 53 56 57 89 4D F4 64
A1 30 02 02 02 89 45 FC 8B 45 FC 8B 40 0C 8B 40
14 8B F8 89 45 EC 8B CF E8 D2 FF FF FF 8B 3F 8B
70 18 85 F6 74 4F 8B 46 3C 8B 5C 30 78 85 DB 74
44 8B 4C 33 0C 03 CE E8 8E FF FF FF 8B 4C 33 20
89 45 F8 03 CE 33 C0 89 4D F0 89 45 FC 39 44 33
18 76 22 8B 0C 81 03 CE E8 6D FF FF FF 03 45 F8
39 45 F4 74 1C 8B 45 FC 8B 4D F0 40 89 45 FC 3B
44 33 18 72 DE 3B 7D EC 75 9C 33 C0 5F 5E 5B C9
C3 8B 4D FC 8B 44 33 24 8D 04 48 0F B7 0C 30 8B
44 33 1C 8D 04 88 8B 04 30 03 C6 EB DF 20 02 02
02 33 02 02 02 38 02 02 02 75 73 65 72 33 32 2E
64 6C 6C 02 66 6C 61 67 7B 34 39 62 61 35 39 61
62 62 65 35 36 65 30 35 37 7D 02 79 6F 75 20 67
6F 74 20 69 74 21
flag{49ba59abbe56e057}
固件分析
丢失的密码
Squashfs filesystem
unsquashfs takeme.bin
可直接解压
解压后得到一个squashfs-root
文件夹,下面有很多文件;还是老方法
grep -rn '^password.*' ./*
ifconfig.cfg
文件很明显是配置文件,提交flag
flag{WldOb2J5NWllV1YwZER4}
工业固件分析
修改后缀为zip
解压,在\firm\Web\wwwroot\classes
发现一堆jar
文件
使用jd-gui
之类的反编译软件来反编译jar
包
https://github.com/java-decompiler/jd-gui/releases
一个个看看吧,我也不知道有什么技巧这里,找出来了的在SAComm.jar
包发现了ftp的账户和密码
flag{sysdiag+factorycast@schneider}