본문 바로가기
Misc

[Square CTF] Stegasaurus

by L3m0n S0ju 2021. 8. 18.

Name

Stegasaurus - Treasure hunt

Points

10 points

Type

Grace - Reverse

Description

We captured this image from an old database filled with messages from the first robot spies. Most of these took the form of dinosaur or dragon action figures. This one was sent in by a dinosaur bot, with the note "Stegasauruses are like Onions: they have layers, and like hiding in grass. Replace spaces with dashes and prepend "flag-" to the flag."

 

우리는 첫 번째 로봇 스파이의 메시지로 가득 찬 오래된 데이터베이스에서 이 이미지를 캡처했습니다. 이들 대부분은 공룡이나 드래곤 액션 피규어의 형태를 취했습니다. 이것은 공룡 봇에 의해 보내졌습니다. "스테가사우루스는 양파와 같습니다. 층이 있고 풀밭에 숨어 있는 것과 같습니다. 공백을 대시로 바꾸고 깃발 앞에 "플래그-"를 붙입니다."

 

stegasaurus.png

See also

Work_at_Square(1), Privacy_policy(1), Code_of_conduct(1)

 

 

 

 


이번 문제는 이름에서 힌트를 얻어올 수 있습니다. 스테가사우르스에서 스테가는 스테가노그래피를 의미하고 스테가노그래피는 숨기고자 하는 메시지 또는 정보를 암호화시키지 않고 특정 물체 속에 숨기는 기술입니다.

 

 

 

 

 

 

 

 

 

 

 

png파일에서 문자열을 추출하면 의미있는 문자열은 보이지 않습니다.

 

 

 

 

 


zsteg라는 툴을 이용하겠습니다. zsteg는 PNG, BMP 파일에 숨겨진 데이터가 있는지 확인하는 도구입니다. 명령어를 실행하면 문자열에 import sys\nk=int(sys.argv[1]);print(\"\".join(chr(ord(c)^k) for c in \"Fpvgpa8'M,m&!s,!\")) 라는 문자열이 출력됩니다. 이스케이프 처리, 개행문자를 제거하고 코드를 정렬하면 아래와 같은 코드가 됩니다. 

 

import sys
k=int(sys.argv[1]);
print("".join(chr(ord(c)^k) for c in "Fpvgpa8'M,m&!s,!")

 

인자로 문자형 숫자를 대입하면 int형으로 k에 저장되고 k와 c를 xor 연산 후 다시 문자형으로 변환하여 문자열에 추가합니다. 따라서 아래 코드와 같이 브루토포싱으로 모든 경우의 수를 관찰합니다.

 

for k in range(127):
    print("".join(chr(ord(c)^k) for c in "Fpvgpa8'M,m&!s,!"))

 

 

 

 

결과


Fpvgpa8'M,m&!s,!
Gqwfq`9&L-l' r- 
Drterc:%O.o$#q.#
Esudsb;$N/n%"p/"
Btrcte<#I(i"%w(%
Cusbud="H)h#$v)$
@vpavg>!K*k 'u*'
Awq`wf? J+j!&t+&
Nx~oxi0/E$e.){$)
Oynyh1.D%d/(z%(
Lz|mzk2-G&g,+y&+
M{}l{j3,F'f-*x'*
J|zk|m4+A a*- -
K}{j}l5*@!`+,~!,
H~xi~o6)C"c(/}"/
Iyhn7(B#b).|#.
V`fw`q(7]<}61c<1
Wagvap)6\=|70b=0
Tbdubs*5_>43a>3
Ucetcr+4^?~52`?2
Rdbsdu,3Y8y25g85
Secret-2X9x34f94
Pf`qfw.1[:{07e:7
Qgapgv/0Z;z16d;6
^hnhy ?U4u>9k49
_io~ix!>T5t?8j58
\jl}j{"=W6w<;i6;
]km|kz#<V7v=:h7:
Zlj{l}$;Q0q:=o0=
[mkzm|%:P1p;<n1<
Xnhyn&9S2s8?m2?
Yoixo~'8R3r9>l3>
fPVGPA▒m
        MS

LRWFQ@l
dRTERC▒oOQ
eSUDSBNP
bTRCTEIW
cUSBUDh HV
`VPAVGk
KU

aWQ@WFj
       JT

nX^OXIeE        [
oY_NYHdZ
gG\MZK

  Y

m[]L[J
      fF
X

j\ZK\M
      aA
_
k][J]L
`@

  ^

h^XI^O  c]
i_YH_bB \
v@FW@}]C
wAGVAP  |\B
tBDUBS
_A
uCETCR
      ~^@
rDBSDU
      y▒YG▒
xXFRET
pF@QFW{▒[E▒
qGAPGVzD
HN_HYuUK
IO^IXtT▒J▒
|JL]J[wW
KM\KZvV▒H▒
zLJ[L]Q▒O
{MKZM\▒pP
xNHYN_sS▒M
yOIXO^▒rRL
l-fa3la
17&1 yf
       m,g`2m`
24%2#zen/dc1nc
35$3"{do.eb0ob
42#4%|c h)be7he
53"5$}i(cd6id
60!6'~a
       j+`g5jg
71 7&`
k*af4kf
8>/8)pod%ni;di
9?.9(qne$oh:eh

:<-:+rmf'lk9fk
;=,;*slg&mj8gj

<:+<-tk`!jm?`m

=;*=,uja kl>al
>8)>/vib#ho=bo
        ?9(?.whc"in<cn
 &7 1hw|=vq#|q
!'6!0iv}<wp"}p
"$5"3ju~?ts!~s
#%4#2kt>ur r
$"3$5lsx9ru'xu
%#2%4mr▒y8st&yt
& 1&7nq;pw%zw
'!0'6op▒{:qv${v
(.?(9`t5~y+ty
)/>)8a~u4x*ux
*,=*;b}v7|{)v{
+-<+:c|w6}z(wz
▒,*;,=d{p1z}/p}
+:-<ezq0{|.q|
▒.(9.?fyr3x-r
/)8/>gxs2y~,s~
FALAL
'YF,M
     G@M@
$ZE/NDCNC
%[D.OEBOB
"\C)H   BEHE
#]B(CDID
 ^A+J
     @GJG
!_@*K
AFKF
.▒▒     PO%DNI
              I
QN$EOH▒EH
▒▒
 RM'FLKFK
-

L&GMJ▒GJ
*▒
TK!@JM@M
+

J AKLAL
(▒      VI#BHOBO
WH"CINCN
6HW=\VQ\Q
7IV<]WP]P
4JU?^TS^S
5KT>_UR_R
2LS9XRUXU
3MR8Y▒STYT
0NQ;ZWZW
1OP:[▒QV[V
@_5T^Y
      TY
?               ▒A^4U_X
UX
<


]7V\[   V[
=

▒C\6W]WZ
:



[1PZ]P]
;
EZ0Q[\Q\
R_3RX_
^[[?1;2c    

 

 

 

 


중간에 의미있는 문자열을 발견했습니다. Secret-2X9x34f94 앞에 flag-를 붙여서 flag-Secret-2X9x34f94 플래그를 찾았습니다.

'Misc' 카테고리의 다른 글

[DIMI CTF] reader  (0) 2021.08.22
[DIMI CTF] dimi-math  (0) 2021.08.19
[Square CTF] 🍎🍌🍍🤔😱😭  (0) 2021.08.13
[DIMI CTF] keychecker  (0) 2021.08.05
[DIMI CTF] dimi-contract  (0) 2021.08.05

댓글