목록전체 글 (120)
또 뭐하지
풀이 제공된 파일에는 chall1.c 파일과 chall1 바이너리 파일이 있다. chall1.c의 코드를 보면 적절한 비밀번호를 입력을 하면 복호화가 되는 것을 알 수 있다. 위 코드를 보면 입력된 비밀번호와 KEY를 XOR한 값을 JOKER와 대조하여 일치하면 올바른 비밀번호로 인식되는 것을 알 수 있다. 따라서 JOKER와 KEY를 XOR 연산하여 원하는 비밀번호 값을 얻을 수 있다는 것을 알 수 있다. (∵ a = b^c 이면 a^b = c) jocker = "\x40\x53\x06\x03\x43\x52\x54\x3b" key = "023661dd4" tmp = "" for i in range(8): tmp += chr(ord(key[i])^ord(jocker[i])) print(tmp) 위와 같은..
풀이 제공된 파일에는 DyingMessage 파일이 들어있다. filepath = "D:/dreamhack/SingleByteXor/DyingMessage" with open(filepath, 'r') as f: Msg = f.read() def XOR(msg, i): l = len(msg) p = "" for j in range(0,l-2,2): tmp = int('0x'+msg[j:j+2],16)^i p = p+chr(tmp) return p for i in range(0,256): print("i = ", i, " ", XOR(Msg, i)) 단일 바이트와 XOR 했다는 힌트가 문제에 제공되어있다. 이를 바탕으로 다잉메시지를 바이트 단위로 떼어서 브루트포스 공격을 시행하는 코드를 작성하였다. 실행결..
풀이 문제에 제공된 Roman emperor's cipher는 시저암호를 의미한다. 제공된 파일에는 암호문이 들어있다. file_path = "D:/dreamhack/Basic_Crypto1/encode.txt" with open(file_path, 'r') as f: cipher_s = f.read() L = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" def c_dec(C,K): p = "" for i in C: if i == ' ': p += '_' continue idx = L.find(i) idx = (idx-K)%26 p = p+(L[idx]) return p for i in range(0,26): tmp = c_dec(cipher_s,i) print("Key=",i," ",tmp) 시..
풀이 제공된 파일에는 암호화된 encfile과 암호화 코드인 rot128.py 파일이 포함되어있다. rot128 코드를 살펴보면 시저암호와 유사한 원리로 각 바이트를 16진수 값으로 표현하고, 해당 값을 128만큼 밀어서 새로운 값을 만들어내는 것을 알 수 있다. hex_list : 0부터 255까지의 각 숫자에 대한 16진수 표현을 담은 리스트 plain_list : plain_s에서 읽은 파일 내용을 각 바이트별로 16진수로 변환하여 저장 암호화 방식 : plain_list의16진수 값의 인덱스를 hex_list에서 찾아내고, 이를 +128만큼 이동 hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)] file_path = "D:/dreamh..
풀이 주어진 문제 파일 중 about.html에 들어갔다. 해당 페이지에서 개발자 도구를 실행해 전체 파일 검색 (ctrl+shift+f)를 통해서 flag를 검색해봤다. 원하는 flag 형식의 결과가 나오지 않았다. 다음에는 flag 형식인 DH를 검색해봤더니 원하는 flag 값을 얻을 수 있었다.
풀이 문제파일에 주어진 html 파일 살펴봤다. 클릭해야하는 호박을 볼 수 있다. js 코드를 살펴보니 counter를 100으로 나눈 나머지가 0이 될 때마다 어떤 연산이 일어나는 걸 알 수 있다. 다양한 방법이 있지만 for문을 통해 click을 만번하는 코드를 작성하기로 했다. console에 $('#jack-target').click()를 입력해보면 click이 한 번 된 것을 확인할 수 있다. 이를 for문을 통해 10000번 수행하게 하면 flag를 얻을 수 있다. for (var i=0; i
Sever-Client 웹 서버에 있는 리소스를 클라이언트가 받아 보려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야 함. 이때, 서버는 해당 요청을 이해하고 대응되는 동작을 통해 클라이언트에게 리소스 반환함. Cookie 클라이언트의 정보 기록과 상태 정보를 표현하는 용도로 사용 정보 기록 : 웹 서버는 각 클라이언트의 팝업 옵션을 기억하기 위해 사용 상태 정보 : 웹 서버는 클라이언트를 식별할 수 있는 값을 저장하여 사용 HTTP 하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신 connectionless 속성 : 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것 stateless 속성 : 네트워크가 연결이 끝맺을 때 상태를 유지하지 않는 것 위..
Level 0 SSH(Secure Shell) : 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜 접속 명령어 ssh [USER]@[HOSTNAME] -p [PORT] 명령어와 문제에 나온 패스워드를 입력하여 서버에 접속했다. Level 0 → Level 1 readme 파일 안에 패스워드가 있다. ls : 현재 디렉토리의 내용 나열 cd : 디렉토리 변경 cat : 파일 내용 표시 file : 파일의 유형 확인 du : 디스크 사용량 보고 find : 파일 및 디렉토리 검색 홈 디렉토리 안에 readme 파일이 있고, 해당 파일을 열어 패스워드를 확인할 수 있다. Level 1 → Level 2 '-'라는 이름을 가진 파일 안에 패스워드가 있다. `cat -`으로 입력하면 옵션으로 인식되..