Jaeseo's Information Security Story

UTCTF2020 - [NETWORKING]Nittaku-3-Star-Premium 본문

Write UP/UTCTF2020

UTCTF2020 - [NETWORKING]Nittaku-3-Star-Premium

Jaeseokim 2020. 3. 9. 17:11

이번에도 네트워킹 문제로 패킷을 분석을 해야 하는 것으로 보입니다. 문제의 제목을 검색해보니 탁구 즉 PIng Pong에 대해 힌트를 주는 것으로 봅니다.

그래서 이번에는 ICMP 패킷을 위주로 체크를 해봤습니다.

일단 Request는 모두 동일하게 35.188.185.68에게 48byte의 null 값을 보내고 있습니다.

그러면 서버에서는 1024byte라는 무지막지한 응답 값을 보내 주는 모습을 볼 수 있습니다.

응답 (hex)

483473494349414c566c344141325a73595763756347356e414f32365a31525458524d326e4951616b5a5a59364455424261524b6b3661415145434b494e4b624b4b68306b434951494a42620a6268536b535a4d6d43694b396777694567496946456b57617449516d6e644154434f5539334d2f2f372f76312f6e745a5a7932797a7470375a732b656d577575326676456d5a6e6f733537680a4f514d43675668524272726d4942416b436751435032526d424e35386c5465384466786a7647656b7277757941433242666d74787579464249434551537666476e5a437874636e67562f63740a6d367333697a2f76494a78685a3132534c74336d717232766579663658364562353571354f426875497235624a6e324950705043304d7a4d61486272306e4e36426a424b357877392b4476330a733675464c6d365a673054426c6f50737436486b30674354584f2f536c6e79697266746b574e6a796174764b6f4e2f6b43502f555251517135662f374752516643366348666f42753051387a0a706a4f4e59574b6a786a484b34566542567a4539394b52627a6a772f48514c6147484e41556e4f7577447365766d36364a6a31492b39674b6d374f66594159434e594150396e3947716c72340a644835784b786d51794f7170504d634d6173484d6874384868744f4e55783544577666785a666834585a414b33507248567a4655796c586642416762597a386a6d33414f524d425968664d770a5135636a4a4472524f41565245766b454841736575524e646a5a744b5647594d55594b424e466d6c5a676a4377446f704a6958514c726256574d314559553057716c386b4779716c454266730a5a637978787958734575426b4b38634a637351794b41496d485579776932424737365a46656f684b515755636f574e3377656d4d313477574b656b473756555131795055365a6a68612f68780a5263796f496c5a43494a6854346d6d76574d3763576e4d65493034336f433651435a62506350684b4b7736424d6963756739346e796667344b52656b6b7a754e643171306b64586c586854430a4d514977446b312b41774754314a322f69394552736b58582b7355474f644f424b594932326234626f6a34674b6746326f486e313131344233694353353353783047504862397a55507246560a5476744b374c475632423177334b34433638647a6f3578636630325267496d74442f345676312b4a65323856335a614b6f5a506f474a58487a6f2f583275634b4c783565724b375579674b450a2b2b56696b524e366d4a4866534b59774f512b777a774f7548685a736a43697747676d537833326e72636e33677431316443364e4e622b736359756d3471695556305156353863692b452f630a6d54664a793378484c68716b494f32386a6a75676a3056

응답 (string)

H4sICIALVl4AA2ZsYWcucG5nAO26Z1RTXRM2nIQakZZY6DUBBaRKk6aAQECKINKbKKh0kCIQIJBb
bhSkSZMmCiK9gwiEgIiFEkWatIQmndATCOU93M//7/v1/ntZZy2yztp7Zs+emWuu2fvEmZnos57h
OQMCgVhRBrrmIBAkCgQCP2RmBN58lTe8DfxjvGekrwuyAC2BfmtxuyFBICEQSvfGnZCxtcngV/ct
m6s3iz/vIJxhZ12SLt3mqr2veyf6X6Eb55q5OBhuIr5bJn2IPpPC0MzMaHbr0nN6BjBK5xw9+Dv3
s6uFLm6Zg0TBloPst6Hk0gCTXO/SlnyirftkWNjyatvKoN/kCP/URQQq5f/7GRQfC6cHfoBu0Q8z
pjONYWKjxjHK4VeBVzE99KRbzjw/HQLaGHNAUnOuwDsevm66Jj1I+9gKm7OfYAYCNYAP9n9Gqlr4
dH5xKxmQyOqpPMcMasHMht8HhtONUx5DWvfxZfh4XZAK3PrHVzFUylXfBAgbYz8jm3AORMBYhfMw
Q5cjJDrROAVREvkEHAseuRNdjZtKVGYMUYKBNFmlZgjCwDopJiXQLrbVWM1EYU0Wql8kGyqlEBfs
ZcyxxyXsEuBkK8cJcsQyKAImHUywi2BG76ZFeohKQWUcoWN3wemM14wWKekG7VUQ1yPU6Zjha/hx
RcyoIlZCIJhT4mmvWM7cWnMeI043oC6QCZbPcPhKKw6BMicug94nyfg4KRekkzuNd1q0kdXlXhTC
MQIwDk1+AwGT1J2/i9ERskXX+sUGOdOBKYI22b4boj4gKgF2oHn1114B3iCS53Sx0GPHb9zUPrFV
TvtK7LGV2B1w3K4C68dzo5xcf02RgImtD/4Vv1+Je28V3ZaKoZPoGJXHzo/X2ucKLx5erK7UygKE
++VikRN6mJHfSKYwOQ+wzwOuHhZsjCiwGgmSx32nrcn3gt11dC6NNb+scYum4qiUV0QV58ci+E/c
mTfJy3xHLhqkIO28jjugj0V

응답 값을 base64 Decoding 결과

V^flag.pnggTS]6X5J@@ қ(t" [nI&
"E&={Yg-{fϞkę賞9XQ $
?df|7
cg-~kq!A !JƝW-7? ag].檽{'_皹8n"[&}>hvsz0J=;.nD췡\Җ|dXjʠE*~n33ab1WW1=[<?s@Rs;n&=H
`5FZt~q+<j̆ӍSCZex]
W1TUc?#pDX0C#$:8Q]JTfQ4Yf:)&%.XDaM_$*e̱%d+    r2(&L`FEzJAecw׌)U#kqĘ"VB SiXZs#N7.    pJ+2'.'8);wZ^10M~ԝE9Ӂ)6پ> *vy^ tco>UNJ챕pܮs\M_{oݖΏ
/^bzH09l(    }ut.5q⨔WD"Oܙ7|G. ;E

내용중 flag.png 라고 보이고 응답값의 맨 앞에 hex 값을 검색 한 결과 gz의 형식의 파일로 보입니다.

그다음 패킷의 응답값을 base64로 이어서 연결하여 decoding 한 결과 압축파일이 미완성이라서 flag.png가 정상적으로 압축이 해제가 안되고 중간 flag가 손상 되었습니다.

패킷을 ping을 보내서 이어서 받아야 하는 것으로 보이는데 일단 해당 IP로 ping을 보내도 응답이 안오는 것을 확인 했습니다.

한번 다시 패킷을 분석 해보니 그 전 문제 Do Not Stop에서 처럼 도메인에 질의를 하고 그 IP를 가져다가 ping을 날리는 것을 확인 했습니다.

이제 pingable.tk에게 ping을 날려서 패킷을 이어서 받겠습니다.

한번 평범하게 ping을 날려보니 아래와 같이 null로 가득한 1024byte의 응답을 받았습니다.

그래서 다시한번 패킷을 분석해 보니 sequnce 번호가 일정하게 상승 하고 있다는 것을 발견하고 scapy 을 이용하여 패킷을 제작 하여 보내봤습니다.

이제 이것을 스크립트로 만들어서 응답값을 전부 받고 base64decoding까지 하여 파일로 만들어주는 스크립트를 제작 합니다.

from scapy.all import *
import base64
import time

data = ""

for i in range(1,17):
  try:
    res = sr1(IP(dst="3.88.183.122")/ICMP(type=8, seq=i, length=48 )/("\x00"*48))
    data = data + res.getlayer(Raw).load.decode("ascii")
    time.sleep(1)
  except Exception:
    print(Exception)
    exit(1)


zipfile = base64.b64decode(data)
f = open('flag.gz','wb');
f.write(zipfile)
f.close()

이제 압축을 해제 하여 FLAG를 확인 합니다.

utflag{p1Ng@b13_f1aG$}

'Write UP > UTCTF2020' 카테고리의 다른 글

UTCTF2020 - [NETWORKING]Do-Not-Stop  (0) 2020.03.09
UTCTF2020 - [WEB]Shrek-Fans-Only  (0) 2020.03.09
UTCTF2020 - [WEB] spooky-store  (0) 2020.03.09
Comments