티스토리 뷰

write up

2018 OtterCTF Hopity Hop

slyfizz 2018. 12. 11. 22:02

시험기간에 OtterCTF 라는 ctf에 참여했다.



reversing 275점짜리 한문제를 풀었다.



문제를 늦게 잡고 중간에 삽질해서 11번째로 풀었었는데 대회가 끝나고나니 총 25명이 푼 문제이다.



binary를 처음 열었을때 방대한 크기의 문자열을 보고 당황했었는데 문자열 중간에 '{' , '}','_'등이 있는것을 보고 아래 연산에 해당하는 인덱스의 문자열을 뽑아서 출력해주면 되겠다고 생각하였다.



xmmword_140028f0을 v5에 넣는것이니 v5에는 역순으로 [0x94 ,0x6d,0x38,0x25,0x88   ,0x7e   ,0x40   ,0x65 ,0x6b  ,0x4c   ,0x55   ,0x6e,0x5d   ,0x27   ,0x56   ,0x98]로 들어가게 된다.(gdb를 이용해 확인 가능)


그리고 위에 v6은 v5와 이어져있고 v6=0x2697 때문에 v5의 최종 배열은 [0x94 ,0x6d,0x38,0x25,0x88   ,0x7e   ,0x40   ,0x65 ,0x6b  ,0x4c   ,0x55   ,0x6e,0x5d   ,0x27   ,0x56   ,0x98, 0x97, 0x26]이 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
v0=0
table="fuOoLtJVxzVohfuwStKPGeYjeaeENjBUtrNFCQSUgfyNoGrkdgYFZNRywRxTWYzisAjBsbkbEqszyMbwkAadGdmZldjBfOiEuHzzxYEkVQvbgQTleRaxUpzNJORxNyAsoWYsyOoLwCflAMFVNIQFolWoOXqgKazCBwgrJRtYCVtJiUSKUkAOLnQCkGpvmGLPlstMQktpFvufSLggiIWqwIUXDBUpnINCuJWOOXZqyikyGjYpkBcvrypECQPKmTNGldBaVvawjQFuLckhDXSSRhQVhuXbufswQeXcriPkdzHsyVPZkBsrhAieOXLQgZVrolvhAzGZBWtmUDbRthQNwTvpXfBUtarFIN{GQzMcUqkyLnQHAfZpHUVCFyKDRRDqKHuEPVfcqsqlZIuoLQmcpHluJTSYBtydPTmvLAVCGoDnGAAeNllVupsANgRVMpKrlyHezDMVKAMLHBpJcDrwMcvswSxKzJBcgNjSLzTFOthHWduYXvmIHcHfpWomvcLkVnKuhgZCrpGfheEcUlcImXsVhAXdDnMjZtvDRZrDsnNDxIAxMuQuxKrdnzJMwmALPCsVliwoHHEuqGwgSqqMGEOLQqsvAcbZqNbSMqSthI0wCsursoXxuxNfTcJNUsLGrBdSQmnRcCtXQPSOKVAVnwHoGlAgbecalSBckiOGmEnphbhmumFvHpoekMTvhQeeqAJdBWjUtVHmlsGfLCuqpbiQVcmmPfPIJFqsxbnCiDtkWFPwLIGKEBliEDCtPrpgnAMXsKCSMDidQFzCu_mPMtRAVjqCoibPJboLEIYOTiDchrDDmYeFYYoeKVDckfJhfsjYvUqRaVrPygANsCtVTOpxFyPCmljFIbkJotORLEeOvTVofAsSWbYGHtYxFNHSvTuSOmqnUkZHeqpWUReHwwsgPetpMFYiDfhUxnBeIkzGMPyBqVPseJWnTPILENAsOkkycUHsvJ0fodiCfMRPSUKaTFBZPHfkXgwJvEJTESfdLSoHzEqrJWulXkhNYrCFWBLHxIOmDghAamJoGdMushfqvOEJzYaIpcJcGUbDwwvWXCMNAaMIGSqTrTQTLtKQhJTWROvkGnIDcGvTkCDwSFRVEVVVnOlLFIoZDjcGAMIjEBrYZWlWJaHHPTEapZbJQBBUIKPsHafYnGK_QCblKSryqzVTikKFUatKRiKTDwbFAUNNfbZggpgzlYnLAIhsqGapwprPrwVGauySbRjofNnrbiqccvOkaGVoQZDRPqeSFDffSJvmFMaKJwmwMcxgUcUBPcQySMmKhldhQSUZg0RrCZtJmicWDpDpFOyPepJzLBGrrhSyumaujkVxVbyEkdfueBUvfQqcAQIQPiBiwNOkCyxpVKEMiEbGeScaBIVSpPabyLmHNOMsdbHQmPuJYuaIwmdEyEdfVZffKbYJoRYFcLGxsQXjvImQrIqYTwrzrAKIzzlzBHagRUXqGjwHnrPqSocOYDzvohnXrtKiTsmbIrovrowuUeAGSAGwiRXZCamkwLVGwBMGYRYgkqZnZpvHN3fhMAjZLOlRdCmYILiFCXLZVFkGlhreNfPrwQzfHdsIegqOkfnWmzQRyQcPStDtBBxinzqlNKeRTsySXlhQLkremIhGJnwiGLAYpbzQFKmJtCFbufTUFROMsXjgGlaxorwBefXNssXejQWMYwnfvInpQ}qMCOoKCqKyJbUFOQoSPjQgNgEogfQQAPrtixyi"
v5=[0x94 ,0x6d ,0x38 ,0x25 ,0x88 ,0x7e ,0x40 ,0x65 ,0x6b ,0x4c ,0x55 ,0x6e ,0x5d ,0x27 ,0x56 ,0x980x970x26]
v2 = 0x94
for i in range(len(v5)):
    print(table[v0],end="")
    if v5[i]==v5[len(v5)-1]:
        break
    v3 = v2
    v1 = v5[i+1]
    v2= v1
    v0 += v3 +1
cs


연산 그대로 코드를 짰었는데 중간에 v1=v5[i+1]을 계속 v1=v5[i]로 두고 코드를 짜서 삽질을 많이했었다.


 if v5[i]==v5[len(v5)-1]:
        break


를 하는 이유는 저렇게 해주지 않으면 문자열 크기보다 연산의 결과가 더 크게 나와서 list index out of range 오류가 뜨기 때문이다.



플래그: flag{H0p_N0p_D0p3}


교훈:분석을 더 집중해서 하자.......


'write up' 카테고리의 다른 글

제 2회 rootctf  (0) 2018.12.26
x-mas ctf Endless Christmas  (0) 2018.12.24
BSides Delhi CTF 2018  (0) 2018.10.27
picoCTF 2018  (0) 2018.10.13
제 18회 하계 해킹캠프 What is END?  (0) 2018.09.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함