https://ctf.oddcoder.com/
주말에 CTF가 두개씩이나 있어서 이거 문제를 풀다가 다른 CTF로 넘어갔다.
리버싱 50
리버싱 50점은 그냥 보면 보였고
리버싱 100
리버싱100점은 C++로 제작되었는데
이 부분이 배열값에서 정해진 리스트대로 값을 뽑는부분인데
어셈코드는 이렇다
위에 aL3t_me~~~~이 문자 배열에서 밑에 저 리스트 0x36 0x65등등 이런값으로 값을 불러온다
근데 잘 안되가지고 일일이 하나씩 찾았다.
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 31 32 33 34 35 | a = "L3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t" result = "" result += a[0x24] result += a[0x00] result += a[0x05] result += a[0x36] result += a[0x65] result += a[0x07] result += a[0x27] result += a[0x26] result += a[0x2d] result += a[0x01] result += a[0x03] result += a[0x00] result += a[0x0D] result += a[0x56] result += a[0x01] result += a[0x03] result += a[0x65] result += a[0x03] result += a[0x2d] result += a[0x16] result += a[0x02] result += a[0x15] result += a[0x03] result += a[0x65] result += a[0x00] result += a[0x29] result += a[0x44] result += a[0x44] result += a[0x01] result += a[0x44] result += a[0x2B] print result | cs |
ALEXCTF{W3_L0v3_C_W1th_CL45535}
리버싱 250
이문제는 파이썬 pyc 파일이 주어진다.
디컴파일을 하면 아주 간단한 소스가 나오는데
내가 입력한 문자를 5자리씩 끊어서 md5로 인코딩하고 16진수로 바꿔서 md5s와 비교한다.
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 31 32 33 34 35 36 | import md5 md5s = [174282896860968005525213562254350376167, 137092044126081477479435678296496849608, 126300127609096051658061491018211963916, 314989972419727999226545215739316729360, 256525866025901597224592941642385934114, 115141138810151571209618282728408211053, 8705973470942652577929336993839061582, 256697681645515528548061291580728800189, 39818552652170274340851144295913091599, 65313561977812018046200997898904313350, 230909080238053318105407334248228870753, 196125799557195268866757688147870815374, 74874145132345503095307276614727915885] for x in range(len(md5s)): print str(hex(md5s[x])).replace("0x", "").replace("L","") print len("68cb5a1cf54c078bf0e7e89584c1a4e") result = "" result += "ALEXC" result += "TF{dv" result += "5d4s2" result += "vj8nk" result += "43s8d" result += "8l6m1" result += "n5l67" result += "ds9v4" result += "1n52n" result += "v37j4" result += "81h3d" result += "28n4b" result += "6v3k}" print result | cs |
ALEXCTF{dv5d4s2vj8nk43s8d8l6m1n5l67ds9v41n52nv37j481h3d28n4b6v3k}
코딩 100
다음은 코딩 100점이다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | from socket import * from time import sleep s = socket(AF_INET, SOCK_STREAM) s.connect(("195.154.53.62", 1337)) data = s.recv(1024) for x in range(501): data2 = data.split(":")[1].strip() print data2 data3 = eval(data2.replace("=", "").strip()) data3 = str(data3) print data3 s.send(data3+"\n") data = s.recv(1024) print data.split(":")[0].strip() | cs |
처음에 100번 했는데 안나와서 1000번했더니 500번만에 플래그를 알려주었다.
'CTF > Write-up' 카테고리의 다른 글
BSidesSF Reversing (0) | 2017.02.14 |
---|---|
codegate 2017 angrybird (2) | 2017.02.11 |
BITSCTF Riskv and Reward (0) | 2017.02.05 |
insomnihack CTF bender_safe (0) | 2017.01.22 |
Plaid ctf prodmanager (0) | 2017.01.16 |