본문 바로가기

#CTF 2020

CSAW CTF 2020 #Web - Widthless

반응형

금요일, 11 9 2020, 20:00 UTC — 일요일, 13 9 2020, 20:00 UTC

 

[그림1. 문제]

 

 

web.chal.csaw.io:5018/ 사이트에 들어가면 아래와 같은 페이지가 나온다.

 

 

[그림2. 웹페이지]

 

뭔가 sign up에 적으면 다른 페이지가 넘어가는 것 같다.

F12를 눌러 페이지 소스를 보았다.

 

 

[그림3. 페이지 소스]

 

주석으로 zwsp is fun!이라고 적혀 있고, 밑에 알 수 없는 코드가 있다.

zwsp는 Zero Width Space 너비가 0인 공간을 말한다. 

 

x='​​​​‎‏‎​​​​‌‍‏​​​​‎‍‏​​​​‎‍‍​​​​‏‏​​​​​‏‎‌​​​​‎​‍​​​​‍‏‍​​​​‎​‎​​​​‌‏‎​​​​‎‍‎​​​​‏‏‍​​​​‍‏‏​​​​‏​‍​​​​‎​‍​​​​‍​‌​​​​‏‍‌​​​​‍‍‌​​​​‌‍‏'
x.replace('&#8203;', '<200b>').replace('&zwnj;', '<200c>').replace('&zwj;', '<200d>').replace('&lrm;', '<200e>').replace('&rlm;', '<200f>')

코드를 유니코드로 바꾸어 보았다.

 

더보기

'<200b><200b><200b><200b><200e><200f><200e><200b><200b><200b><200b><200c><200d><200f><200b><200b><200b><200b><200e><200d><200f><200b><200b><200b><200b><200e><200d><200d><200b><200b><200b><200b><200f><200f><200b><200b><200b><200b><200b><200f><200e><200c><200b><200b><200b><200b><200e><200b><200d><200b><200b><200b><200b><200d><200f><200d><200b><200b><200b><200b><200e><200b><200e><200b><200b><200b><200b><200c><200f><200e><200b><200b><200b><200b><200e><200d><200e><200b><200b><200b><200b><200f><200f><200d><200b><200b><200b><200b><200d><200f><200f><200b><200b><200b><200b><200f><200b><200d><200b><200b><200b><200b><200e><200b><200d><200b><200b><200b><200b><200d><200b><200c><200b><200b><200b><200b><200f><200d><200c><200b><200b><200b><200b><200d><200d><200c><200b><200b><200b><200b><200c><200d><200f>'

 

구글에 검색하니 이런 비슷한 문제들이 있었다. unicode_steganography 라이브러리를 사용한다고 한다.

unicode_steganography.js
0.01MB

 

 

[그림4. js 디코딩]

자바 스크립트로 디코딩을 해보았다.

 

 

[그림5. 출력결과]

숨겨진 문자가 나왔다. base64 디코딩을 해보았다.

 

import base64
encoded = 'YWxtMHN0XzJfM3o='
data = base64.b64decode(encoded)
data

출력결과 b'alm0st_2_3z'가 나왔다.

플래그 형태는 아닌 것 같다. 

나온 결과를 아까 sign up에 입력해보았다.

 

[그림6. sign up]

 

또다른 주소가 나온 것 같다. pwd는 입력한 값인 것 같다. 

web.chal.csaw.io:5018/ahsdiufghawuflkaekdhjfaldshjfvbalerhjwfvblasdnjfbldf/alm0st_2_3z

페이지로 이동해보니 오른쪽으로 취우친 sign up 화면이 나왔다.

다른 pwd가 있나보다.

 

import requests 
import zwsp_steg
data = requests.get ("http://web.chal.csaw.io:5018/ahsdiufghawuflkaekdhjfaldshjfvbalerhjwfvblasdnjfbldf/alm0st_2_3z").content.decode()
decoded=zwsp_steg.decode(data)
print(decoded)

 

구글에 검색해보니 간편한 HTTP 요청처리를 위해 사용하는 모듈인 requests를 사용하면 url를 갖고 와서 zwsp-steg 디코딩을 할 수 있다고 한다.

출력결과 755f756e6831645f6d33가 나왔다.

이번 결과는 base64형태가 아니다. 헥스값인 것 같다. ascii to hex 사이트에서 변환해보았다.

u_unh1d_m3가 나왔다. 이 문자를 sign up에 입력해보았다.

 

[그림7. sign up1]

pwd1은 아까 구한 alm0st_2_3z이고, pwd2는u_unh1d_m3이다.

 

web.chal.csaw.io:5018//19s2uirdjsxbh1iwudgxnjxcbwaiquew3gdi/alm0st_2_3z/u_unh1d_m3

사이트로 가보니 플래그가 나왔다.

 

 

[그림8. flag]

 

답 : flag{gu3ss_u_f0und_m3}

반응형