Writeup | 某省工業互聯網安全技術技能大賽
協議分析
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,所以這里打個斷點,調試就能看到正確秘鑰和用戶輸入秘鑰了
得到密碼:mym0r3secur3_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
將下載好的rtph264extractor.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}