목록自習 (33)
학사 나부랭이
들어가기 앞서, 해당 포스트는 UNIST의 Marco Comuzzi 교수님이 강의하신 Blockchain Systems를 해시넷 위키를 참조해 재해석한 글입니다. 돈 거래를 하려는 거의 모든 사람이 생각하는 가치가 비슷한, 원하는 개체와 교환가능한 매개체입니다. 예를 들어, 삼겹살 300g과 조기 한 마리를 바꾸려는 도축업자와 어부에서, 도축업자 입장에서 삼겹살은 돈이고 어부 입장에서 조기는 돈이죠. 역사상으로 조개껍질, 금, 은 등 해당 사회에서 보편적인 가치를 인정받은 것들(보통 적당히 구하기 어려워야 단위 당 가치가 높아 거래할 때 편리하기에)이 돈으로 사용되었죠. 그리고 1970년대, 미국이 금본위제를 폐지함으로 이런 실물기반 화폐는 사라졌죠. 그럼 현재 돈은 어떻게 돌아가느냐? 바로 Fiat m..
피싱 사이트를 막는 방법 중에서 브라우저 딴에 URL을 검사해 확인, 가중치가 높으면 스캠 아니면 정상을 판단하는 방법이 있다. 예를 들어 접속자 수가 많은 URL은 스캠일 가능성이 낮으니 제외, 주소가 p1atinum.tistory.com-ru/... 처럼 도메인 중에 혓바닥이 긴 친구가 있거나 p1atinum.tist0ry.com 이렇게 유명한 URL을 악용한 주소일 경우 스캠이라고 판단하는 가중치를 높이는 방식이다. 그런데 이는 사전에 실행해 DB에 해당 사이트가 스캠인지 아닌지 결정이 되어 있어야 쾌적한 UX를 제공할 수 있을 것이다. 그러니 이런 문제가 생긴다. 아마 MS의 데이터베이스에는 스캠이라고 확정이 나있는데 Google과 Brave는 자체 데이터베이스에 해당 사이트가 확정이 안 났는가 ..
암호화 동작 코드가 다 나와있는 문제예요. key="???????" flag="cce2021{??????????????????????????????????}" def encrypt(plain): res="" for _ in range(len(plain)): res+=chr(ord(key[_%7])^ord(plain[_])) return res open("enc","wb").write(encrypt(flag).encode("base64")) 암호화 소스 코드.py Bg0PXUlMTx46AgYKIRcWMR4HHCENDAMaAxwNCjoBBAomPRELCRgODQ1fGA== enc 파일 (암호문) 일단 구동 방식부터 보면 enc 파일을 열어서, flag(cce2021{xxx})를 encrypt 함수로 암호화하..
이 문제는 TCP/UDP 프로토콜을 사용해 네트워크에 연결, 데이터를 읽고 쓰는 리눅스 명령어인 nc(NetCat)이 필요해요. 먼저, 터미널에서 nc 20.xxx.123.97 11111을 입력해 20.xxx.123.97의 11111포트에 접속해야죠. 그럼 stage 0부터 시작해 주어진 수식에 들어갈 연산자를 서버에 송신해야하며, stage 100까지 풀면 키가 나오고 한 문제를 푸는데 시간 제한도 있어요. 즉, 자동화하는 프로그램을 짜서 stage 100을 돌파하라는, 의도가 훤히 보이는 문제죠. import socket import re def run(): #소켓 선언, with로 객체의 라이프사이클 관리(자동 생성, 자동 소멸) #AF_INET: IPv4(xxx.xxx.xxx.xxx), SOCK_..
HTTP Protocol OSI 7 Layer 중 7계층에 위치한 HTTP를 이용해 웹에서 정보를 주고받기 위해 개발된 프로토콜이에요. 최근에는 HTTP/3.0이 UDP에서 구현된 QUIC(Quick UDP Internet Connection) 프로토콜 기반으로 논의되고 있어요. URI&URL URI(Uniform Resource Identifier)는 서비스 애플리케이션에서 리소스를 식별하는 식별자이고 URL(Uniform Resource Locator)은 리소스의 위치를 식별하는 URI의 하위 개념인데 요즘은 혼용하는 경우가 많아요. ://:@:/;?# Scheme은 애플리케이션에 접속할 때, 어느 서비스나 프로토콜을 이용할 건지 나타내요. 웹 브라우저에서는 일반적으로 http 또는 https를 이용..
인터넷에서 거미줄처럼 연결되어 서로의 정보를 공유하는 컴퓨터 공간인데, 웹은 HTML으로 작성된 페이지를 웹 브라우저 엔진을 통해 해석하며 이용해요. 웹 페이지는 HTML, JS, CSS 언어를 통해 3가지 요소로 우리에게 표시되어요. 웹 브라우저 웹 서버 WAS DB 파이어폭스 오페라 엣지 NGINX Apache IIS NodeJS JSP PHP Django MySQL MariaDB PostgreSQL MongoDB CouchDB GraphQL 웹 브라우저 웹 서버에서 응답받아 사용자에게 HTML 문서를 출력해주는 응용 프로그램이에요. HTML, JS, CSS 언어를 해석할 줄 알아야 하며, 이들을 어떻게 해석하느냐에 따라 같은 소스 코드의 페이지가 다르게 보일 수도 있어요. IE의 경우, 업데이트가 ..
# server(Attacker) import socket def setSock(ip, port): # gives socket stream to use TCP socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((ip, port)) s.listen(1) conn, addr = s.accept() return conn, addr def command(conn, addr): # send command to client print("[+] Connected to", addr) while True: command = input(">") if c..
이전에 본 것처럼 패킷은 전송 도중 유실되거나 오차가 있을 수 있는데, 이는 당연히 네트워크의 신뢰성에 문제가 생길 수 있죠. 여기서, TCP는 이러한 패킷 전달에서 신뢰성을 보장하기 위해 고안된 프로토콜이에요. 통신 전에 항상 세션을 성립시키며, 패킷을 전송한 후, 패킷을 받은 측에서 패킷이 잘 도착했다고 알리죠. 그러니 속도가 상대적으로 느려요. 그에 비해 라이브 방송, 게임과 같은 약간 내용이 깨지는 정도는 감수하더라도 실시간 통신이 중요한 때가 있겠죠? 이렇게 속도가 정확도보다 중요한 경우 UDP를 사용해요. TCP UDP 연결형 서비스 비연결형 서비스 高 신뢰성 低 신뢰성 低 속도 高 속도 수신 여부 확인 수신 여부 확인 X 전송 순서 보장 전송 순서 보장 X TCP 헤더 위는 TCP 헤더 구조..