티스토리 뷰
시험기간에 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 ,0x98, 0x97, 0x26] 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]로 두고 코드를 짜서 삽질을 많이했었다.
를 하는 이유는 저렇게 해주지 않으면 문자열 크기보다 연산의 결과가 더 크게 나와서 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 |