분류 전체보기
[Network] IP Header 구조
IP(Internet Protocol)란? - 인터넷에 연결된 모든 장치들을 식별할 수 있도록 장비마다 부여되는 고유 주소이다. (각 장치의 주민등록번호와 같은 역할) - IPv4와 IPv6가 있으며 현재는 IPv4를 사용한다. - 32비트 방식으로 8비트씩 4자리, 각 자리는 온점으로 구분한다. IP 헤더 구조 1. Version - 4bit - 현재는 IPv4를 사용한다. -> 4 2. IHL(Header Length) - 4bit - 32비트 단위로 IP 헤더의 길이를 나타낸다. 최소 5부터 15까지의 값이다. - 대부분의 IP 헤더의 길이는 20byte(4 * 5 = 20)이다. 3. Type of Service (TOS) - 16bit - 패킷의 우선 순위를 제공한다. 4. Total Lengt..
[Network] Ethernet II 프레임 구조
ethernet 이란? - 컴퓨터 기술의 하나로, LAN에서 가장 많이 활용되는 기술 규격. - OSI Layer 1(물리 계층)에서 신호와 배선, OSI Layer 2(데이터 링크 계층)에서 MAC패킷과 프로토콜의 형식을 정의한다. - IEEE 802.3 규약으로 표준화되었다. Layer 2 : 데이터 링크 계층 (Date-Link Layer) - 패킷 맨 앞에 14byte - 물리적으로 같은 네트워크이며, IP의 서브넷마스크가 동일하면 무조건 통신이 가능하다. Ethernet Type II Frame 1. 목적지 MAC 주소 (Destination MAC Address) - 6byte - 수신자의 MAC 주소를 나타낸다. 2. 출발지 MAC 주소 (Source MAC Address) - 6byte -..
[Network] ARP Header 구조
ARP(Address Resolution Protocol)란? - IP주소(OSI Layer 3)를 MAC주소(OSI Layer 2)로 변환해주는 프로토콜 - 동일 네트워크(LAN)에서 통신하기 위해 IP주소를 이용해서 MAC주소를 알아온다. ARP 헤더 구조 1. 하드웨어 타입 (Hardware type) - 2byte - 사용중인 하드웨어 주소의 타입을 나타내는 필드이다. - ethernet : 1 / IEEE 802(Wi-fi) : 6 / HDLC : 17 2. 프로토콜 타입 (Protocol type) - 2byte - 상위 프로토콜을 정의 한다. (IPv4 : 0x0800) 3. 하드웨어 주소 길이 (Hardware Address Length) - 1byte - MAC 주소의 크기를 나타낸다. ..
[C, C++] #pragma pack의 개념과 사용방법
#pragma pack의 사용이유와 사용방법에 대해서 알아볼 것이다. 먼저 일반적인 구조체 선언 코드를 보자.#includetypedef struct test{ char a; // 1byte int b; // 4byte}test;이때 구조체 변수 a는 char형이므로 1byte일 것이고, 변수 b는 int형으로 4byte일 것이다.하지만 구조체의 크기 할당에는 크기가 가장 큰 자료형을 기준으로 배수만큼 커지게 된다. 실제로 구조체의 크기를 출력하는 코드를 통해서 직접 확인해보자.#includetypedef struct test{ char a; int b;}test;int main(){ test s1; printf("s1.a size : %d byte\n",sizeof..
[LOS] Level3 goblin 풀이
Level3 : goblin 쿼리문을 보면 id는 guest로 고정이고, no값을 GET 방식으로 가져온다. 아래 if문에서 조회된 id가 있으면 'Hello [id]'가 출력되고, 다음 if문에서 그 id가 admin이라면 문제가 풀린다. no값을 1로 주었는데 Hello guest라는 값이 나왔다. 쿼리문을 보면 and연산이므로 db안에서도 guest의 no값이 1이기 때문에 문자열이 나타난 것이다. no값을 2로 준다면 저 문자열은 나타나지 않는다. admin의 no값은 1이 아닌 모든 수 중에 하나이지만, 이 값을 찾는건 말이 안된다. 그래서 no값은 guest(1)가 아닌 아무 숫자나 넣고, or연산을 통해서 id='admin' 조건을 넣어준다. ?no=2 or id='admin' 이러한 결과가..
[LOS] Level2 cobolt 풀이
Level2 : cobolt GET 방식으로 id와 pw를 입력받고, db에서 id와 pw가 각각 일치하는 레코드의 id를 select 한다. 이때, select 된 id가 admin이면 문제가 풀린다. id 부분은 admin을 입력해주면 되면 쉽게 True를 만들 수 있지만, admin에 해당하는 pw는 알 수 없다. mysql에서 한줄 주석은 '#' 이기 때문에 id를 입력 후 싱글쿼터로 닫고, 그 뒤 구문을 다 주석처리 하는 것이다. 그러면 pw를 몰라도 pw의 조건식을 무효화 시킬 수 있고, id값만 인증하면서 문제를 풀 수 있다. '?id=admin'#' '#'를 입력했지만 쿼리문에서는 '#'문자가 사라지는 것을 보면 필터링을 거치는 것 같다. '#'가 인코딩 되면 ASCII로 %23이기 때문에..
[LOS] Level1 gremlin 풀이
LOS(Lord of SQL Injection) : https://los.rubiya.kr/gate.php SQL Injection 공격에 대해 공부할 수 있다. Level1 : gremlin php 코드가 나온다. 빨간 박스를 보면 id와 pw를 GET 방식으로 받아오는 것을 알 수 있고, 초록 박스에서 query를 db에 질의하여 결과값이 있다면 문제를 해결할 수 있을 것으로 보인다. 먼저, GET방식으로 아무 값이나 넣어본다. 다음 사진과 같이 URL 주소 맨 뒤에 '?id=1&pw=1'를 입력한다. * ?는 URL주소 뒤에 변수를 지정할 수 있도록 구분하고, &는 변수와 또 다른 변수의 값을 넣어줄때 변수를 구분해준다. 엔터를 누르면 쿼리문의 where에 GET 방식으로 값이 입력된 것을 알 수 ..
(Baekjoon) 백준 11729 - Python - 하노이 탑 이동 순서
def hanoi(n, a, b, c): if n == 1: print(a, c) return hanoi(n-1, a, c, b) print(a, c) hanoi(n-1, b, a, c) n = int(input()) print(2**n-1) hanoi(n, 1, 2, 3) * 코드는 간단하지만, 알고리즘 이해는 좀 걸린 것 같다.