ECW - Puzzle
Posted on mer. 16 octobre 2019 in CTF
File : puzzle.pcap
GUI
SCADA/Modbus
Bon, n'ayant (pour l'instant) aucune connaissance sur ModBus ou SCADA, on commence par suivre le flux TCP (ce protocole utilisant TCP) afin d'avoir un visu sur l'ensemble des données qui ont été enregistrées.
On sait également que le flag respecte la nomenclature suivante : ECW{64 char hexa}
.
On peut donc chercher tout les {
dans cet échange par exemple :
........N)...................N#.5..................Y...........Y...........b.....................N*....................n.v.........n.v.........a...........a...........d...........d... .......s... ..........
.......p...
..................n............v...........6...........6.
.......c.m.
.......c.m.........k.X.........k.X.........V............v........N(....................s.2.........s.2.........O.4.........O.4........._............C.........c...........c..........N,.S.................N&....................d...........d...........c.3.........c.3........N2....................B.C.........B.C.........R......................`.4.........`.4.........s...........s.............7...........7.........i............k. .......q... ........U.!.......o.2.!.......o.2.".......V...".......V...#.......l.7.#.......l.7.$.......z.8.$.......z.8.%.......W...%........V.&.......U.1.&.......U.1.'.......k.f.'.......k.f.(.......a...(..........).......I.d.).......I.d.*......N0...*........+......._.1.+......._.1.,.......b.e.,.......b.e.-.......X...-.......X...........]...........].../......N3.../........0......N-...0........1.......g.b.1.......g.b.2.......t.8.2.......t.8.3.......r.f.3.......r.f.4.......o.*.4.......o.*.5......._.a.5......._.a.6......N..F.6........7......N!...7........8.......\...8.......\...9......N2...9........:.......U...:..........;.......Z...;.......Z...<.......}.b.<.......}.b.=.......c...=.......c...>.......Y...>.......Y...?.......r...?........q.@.......h...@.......h...A.......r...A.......r...B.......j.+.B.......j.+.C......N#...C........D......N*...D........E.......t...E..........F.......Q...F.......Q...G.......V.1.G.......V.1.H.......q...H........U.I.......[...I..........J......._...J......._...K......N(.`.K........L.......b.K.L.......b.K.M.......d. .M.......d. .N......N!...N........O......N&...O........P.......l...P........l.Q.......n.c.Q.......n.c.R.......W.`.R.......W.`.S.......q.2.S.......q.2.T.......i...T.......i...U.......A.E.U.......A.E.V.......|.6.V.......|.6.W.......a...W.......a...X......N&...X........Y.......Z...Y..........Z.......].3.Z.......].3.[......N(...[........\.......Z...\..........]......N2...]........^......N4...^........_.......u.a._.......u.a.`.......V...`.......V...a......N-...a........b.......S...b........h.c......N-...c........d.......X.a.d.......X.a.e.......^...e........3.f.......^.f.f.......^.f.g.......i.3.g.......i.3.h.......`.5.h.......`.5.i.......h.e.i.......h.e.j......N4...j........k.........2.k.........2.l.......W...l.......W...m.......o.O.m.......o.O.n.......\.a.n.......\.a.o.......a...o..........p......N!...p........q.........1.q.........1.r.......d...r........ .s.........}.s.........}.t.........7.t.........7.u.......b.B.u.......b.B.v......N2.V.v........w......N%...w........x.......o...x.......o...y.......Y.0.y.......Y.0.z.......b...z........K.{.......[...{.......[...|.......d...|.......d...}......N*...}........~.......T.4.~.......T.4.........b............B........N2....................p......................a.n.........a.n.........M.a.........M.a.........].....................N0.F..................x.4.........x.4.........a......................~.6.........~.6........N$....................d.c.........d.c........N....................N#....................X......................b............B.........d.9.........d.9.........e......................t......................a...........a..........N/.c..................E.e.........E.e.........w.7.........w.7.........{.c.........{.c........N%...................N%....................Z......................f.3.........f.3.........c......................\.(.........\.(.........Q.6.........Q.6.........W......................P.5.........P.5........N*....................N.f.........N.f.........j.3.........j.3...........3...........3.........m............\.........m.5.........m.5.........C.W.........C.W.........d............c........N.....................e......................p.....................N0....................K.0.........K.0........N/....................\...........\...........a.a.........a.a.........y.2.........y.2........N'....................r......................i......................m...........m...........`............5.........p.8.........p.8........N*....................l...........l..........N%....................i...........i...........F.a.........F.a.........e.0.........e.0.........\.D.........\.D.........r...........r...........b...........b...........R.....................N2....................R.Q.........R.Q.........d............c.........n............v.........f............F.........R.0.........R.0.........r...........r..........N$.R..................H.4.........H.4.........U......................Y.....................N"....................U.{.........U.{........N#....................v.0.........v.0.........Z.7.........Z.7.........Y...........Y...........J.b.........J.b........N2.2..................[.9.........[.9.........D.{.........D.{.........U............{........N)....................G.6.........G.6.........W.1.........W.1........N2.N..................m.....................N#....................b.....................N*....................T...........T..........N0....................`...........`...........S.0.........S.0.........e......................L.8.........L.8
On compte 9 occurrences en tout. Pour chacune d'entre elles, on peut donc regarder le caractère correspondant à l'échange précédent et voir si c'est un W
.
Afin de savoir comment les échanges se font avec ModBus, on regarde la partie ModBus de WireShark :
On voit un Transaction Identifier
et Reference Number
qui pourrait nous donner l'ordre des trames. En regardant le guide d'implémentation, on lit l'information suivante :
- Transaction Identifier : 2 Bytes - Identification of a MODBUS Request / Response transaction - Initialized by the client - Recopied by the server from the received req
Hum, c'est pas super concluant. On peut essayer avec l'autre champ du coup. On cherche alors les références des paquets avec le caractère '{' en tant que data, soit :
- 50005
- 40004
On regarde les paquets ayant pour références 50004 et 40003 :
YEAH ! On a donc le W{
du flag. On remonte donc deux autres trames en arrière et on poursuit jusqu'à l'obtention de }
indiquant la fin du flag.
Le début commence à la référence 40001
et se termine à 40069
: les 64 caractères du flag et la nomenclature.
CLI
$ tshark -r puzzle.pcap -O Modbus/TCP -T fields -e modbus.reference_num -e modbus.data | sort -u | awk -F ' ' '{print $2}' | sed ':a;N;$!ba;s/\n//g' | xxd -r -p
���5�R����`�
��ScF�2NV�ECW{ea64db08af456004111a079a3fa4ae3903be33f75c282f28a07428c6b6727631}�Q�{��`�������(D���5��K� ��n��Bmc���+X�v*O�����%
On a donc notre flag en clair au milieu du reste : ECW{553d8f4dfb452545515a47da7ae1ee7d649d97ddada0a520288a20461e707cb9}
.
Référence
https://en.wikipedia.org/wiki/Modbus http://jamod.sourceforge.net/kbase/protocol.html http://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf