[ISITDTU 2018] Baby Write-up
2018. 7. 30. 18:14
CTF가 끝나고 한 번 풀어본다.
CTF 기간 중에는 팀원님이 아주 빠르게 풀어주셨다...
나는 RSA문제에 막혀서 ㅠㅠㅠ
아직 서버가 살아있어서 nc로 접속하면 아래와 같이 사용자로 부터 숫자입력을 받고, 뭔가를 출력해준다.
소스파일도 주어졌으므로 먼저 소스파일을 보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def hash(self, m): f = int(flag.encode("hex"),16) x = sha512(str(f | m )).digest().encode("hex") self.request.sendall(x+"\n") def check(self): while True: self.request.sendall("********************Hello World********************\n") self.request.sendall("***************************************************\n") self.request.sendall("Number: ") try: number = int(self.request.recv(BUFF_SIZE).strip()) except: break self.request.sendall(str(number)+"\n") self.hash(number) | cs |
사용자로부터 Number를 입력받은 후
number와 flag를 or하여, 그 값을 sha512해시값으로 해서 출력해준다.
이 flag의 값은 변하지않고, 사용자는 Number를 써서 flag과 or한 결과값을 계속 얻을 수 있으므로 0과 flag를 OR한 값과 다른 bit들을 비교하여 공격하면된다.
즉 bit flipping하여 1bit씩 브루트포싱하는 것이다.
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 socket flag_hash = "2c7b44d69a0f28798532e4bb606753128969e484118bd0baa215c6309ce6dc016c9a5601471abf4c556c0dc5525eb4144078a761a6456c919d134be8a10c64a0" def recv_until(s, string): result = '' while string not in result: result += s.recv(1) return result def get_hash(num): sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('35.185.178.212', 33337)) recv_until(sock, ':') sock.send(str(num)+"\n") recv_until(sock, '\n') hash = recv_until(sock, '\n') sock.close() return hash[:-1] flag = "" c=0 while(True): onebyte = 0 for i in range(8): num = (1<<i) hash = get_hash(num<<(8*c)) if flag_hash==hash: onebyte+=num c+=1 flag = chr(onebyte)+flag if "ISITDTU{" in flag: break print(flag) print("FLAG : " + flag) | cs |
성공
'Write-up > Crypto' 카테고리의 다른 글
[ISITDTU 2018] XOR Write-up (0) | 2018.07.30 |
---|---|
[ISITDTU 2018] Simple RSA Write-up (0) | 2018.07.30 |
[MeePwnCTF 2018] bazik (0) | 2018.07.25 |
[MeePwnCTF 2018] esor (easy) (0) | 2018.07.16 |
[MeePwnCTF 2018] esor (hard) (0) | 2018.07.16 |