728x90

 

문제의 압축을 풀면 위와 같이 두가지가 주어진다. 일단 miro저기서 .cer파일을 추출해야된다.

 

 

 

그럼 pcap으로 바꿔주자. 바꾸는 방법은 간단하다. pcap파일이 아닌것같다. 그럼 pcap으로 바꿔주자. 바꾸는 방법은 간단하다.

 

 

와이어샤크로 miro를 열어주고 Save As를 클릭해준다.

 

 

 

저장할때 두번째 pcap을 선택해주고 이름을 바꾸어 저장한다.

 

 

그걸 넣으면 잘 들어가는걸 볼수있다. 이제 저걸 한번 보자. 우클릭해서 폴더열기를 하면 볼수있다.

 

 

인증서를 준다. 저걸 공격해서 풀어보자.

 

 

공개키가 주어져있다. 인증서를 공격하는 가장 완벽한 방법은 저걸 소인수분해 하는 것이다.

 

 

일단 yafu라는 소인수분해 툴을 쓸거라서 중간 공백을 없애주었다. 앞에 30부터 81은 공개키가 아니고 뒤에 02부터 01까지도 공개키가 아니다. 수업시간에 배웠는데 일단 뭔지는 기억이 안난다. 하여튼 그부분을 빼고 중간 공백을 없애주었다.

 

 

yafu를 이용해 흔히 말하는 p랑 q를 구해주었다. 이제 저 p랑 q를 이용하여 개인키를 만들어 주자.

 

from socket import *
from ssl import *
import time

def recv_until(s, string):
    result = ''
    while string not in result:
        result += s.recv(1)
    return result

client_socket=socket(AF_INET, SOCK_STREAM)
tls_client = wrap_socket(client_socket, ssl_version=PROTOCOL_TLSv1_2, cert_reqs=CERT_NONE)

print "[+] Connecting with server.."

tls_client.connect(('ch41l3ng3s.codegate.kr',443))

print "[+] Connect OK"

while 1:
    data = recv_until(tls_client, "Input : ")
    print data
    #message
    user_input = raw_input()

    if user_input == "u":
        tls_client.send("9de133535f4a9fe7de66372047d49865d7cdea654909f63a193842f36038d362\n")
    elif user_input == "d":
        tls_client.send("6423e47152f145ee5bd1c014fc916e1746d66e8f5796606fd85b9b22ad333101\n")
    elif user_input == "r":
        tls_client.send("34660cfdd38bb91960d799d90e89abe49c1978bad73c16c6ce239bc6e3714796\n")
    elif user_input == "l":
        tls_client.send("27692894751dba96ab78121842b9c74b6191fd8c838669a395f65f3db45c03e2\n")
    else:
        print "Invalid input!"
        exit()   

client_socket.shutdown(SHUT_RDWR)
client_socket.close() 

 

그리고 위의 코드를 돌리면 나온다고 한다. 물론 지금은 서버가 닫혀서 확인해볼수는 없었다.

 

 

'ctf write-up > Codegate CTF 2018' 카테고리의 다른 글

BaskinRobins31 - pwn  (0) 2018.02.09
RedVelvet - reversing  (0) 2018.02.09

+ Recent posts