-
드림핵 웹해킹 stage 1, stage 2-웹 기본상식보안/WEB HACKING 2024. 3. 14. 20:08
STAGE 1
0. 서론
- 웹은 우리의 삶과 밀접한 핵심 기술 중 하나이다.
- 웹 기술에 대한 의존성이 높아진 만큼 웹 서비스를 안전하게 구현하고 관리하는 것이 중요하다.
- 강의의 목표는 웹 해킹의 기초적인 지식과 기술을 전달하는 것이다.
STAGE 2
웹 기본 상식 - Background: HTTP/HTTPS
0. 서론
- 언어에서의 약속을 잘 지켜야 한다.
1. 인코딩
- 컴퓨터의 모든 데이터는 0과 1로 수겅된다,
-> 인코딩 표준 - 아스키, 유니코드
- 아스키: 7비트 데이터에 대한 인코딩 표준
알파벳과 특수 문자 등을 표현할 수 있음. ex. A = 1000001
컴퓨터 개발 초기에는 문자권마다 고유의 인코딩 표준을 사용했지만 호환성 측면에서 부담이 되었고,
인코딩 호환이 되지 않는 문제가 발생했다.
----> 유니코드 라는 표준이 만들어졌다.
- 유니코드
- 목적: 모든 언어의 문자를 하나의 표준에 담겠다는 목표로 제정
- 특징: 한 문자는 최대 32개의 비트로 표현된다.
문자를 표현할 수 있는 공간이 매우 넓어 이모지도 유니코드에 포함되고 있다.
인코딩을 이용하면 우리의 문장을 컴퓨터에 저장하고 표현할 수 있다.
네트워크를 이용하면 인코딩한 정보를 다른 사람들과 쉽게 교환할 수 있다.
2. 통신 프로토콜
웹 서버에 있는 리소스를 클라이언트가 받아보는 방법
1. 클라이언트는 웹에게 특정 리소스를 지정해 제공해달라고 요청한다.
2. 서버가 해당 요청을 이해하고 대응되는 동작을 통해 클라이언트에게 리소스를 반환한다.
- 요청(Request): 클라이언트의 행위
- 응답: 서버의 행위
- 프로토콜: 위와 같이 규격화된 상호작용에 적용되는 약속
컴퓨터와 통신할 때는 엄격한 프로토콜을 사용해야 한다.
이유: 컴퓨터가 해석의 융통성을 발휘하게 하는 것은 매우 어렵고 이 과정에서 오히려 통신 오류가 발생할
가능성을 높일 수 있기 때문이다.
--> 컴퓨터 통신 프로토콜은 각 통신 주체가 교환하는 데이터를 명확히 해석할 수 있도록 문법을 포함한다.
문법에 어긋나는 메시지는 잘못 전송된 것으로 취급하며 무시된다.
현재까지 제정된 표준 통신 프로토콜: 네트워크 통신의 기초가 되는 TCP/IP
웹 애플리케이션에 사용하는 HTTP
파일을 주고받을 때 사용하는 FTP
3. HTTP(Hyper Text Transfer Protocol)
: 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response)형식으로 정의한 프로토콜
팀 버너스 리와 그의 팀이 제정함
현대 웹 서비스의 바탕이 되는 프로토콜로 자리잡음
- HTTP의 기본 메커니즘
클라이언트가 서버에게 요청하면 서버가 응답한다.
1. 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킨다. (포트는 TCP/80 또는 TCP/8080)
2. 클라이언트가 서비스 포트에 HTTP 요청을 전송하면 이를 해석하여 적절한 응답을 반환한다.
- 네트워크 포트(Network Port)
: 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소
- 클라이언트가 서버의 포트에 접근하여 데이터를 내려놓고 서버가 클라이언트에 보낼 데이터를 실어서
돌려보내는 것과 같다.
- 네트워크를 설명하는 맥락에서는 네트워크를 생략해 "포트" 라고만 부르기도 한다,
- 서비스 포트(Service Port)
: 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트
ex. HTTP가 80번 포트를 점유하고 있으면 HTTP의 서비스 포트는 80번 포트이다.
- 포트로 데이터를 교환하는 방식은 전송 계층(Transport Layer)의 프로토콜을 따른다.
대표적으로 TCP, UDP가 있다.
- 서비스 포트를 표기할 떄는 서비스가 사용하는 전송 계층 프로토콜을 같이 표기하기도 한다.
- 포트의 개수는 운영체제에서 정의하기 나름이다. 현대에는 0부터 65535번까지 총 65536개의 같은 수의
네트워크 포트를 사용한다.
- 잘 알려진 포트(Well-known port)/특권 포트(Privileged port): 포트 중 0번부터 1023번 포트
ex. 22번 포트: SSH, 80번 포트: HTTP, 443번 포트: HTTPS
- 잘 알려진 포트에 서비스를 실행하려면 관리자 권한이 필요하다.
왼쪽부터 차례대로 HTTP Method, request URL, HTTP version, request header
왼쪽부터 차례대로 HTTP version, return code, response header, response body
- HTTP 메시지
HTTP 메시지에는 HTTP 요청( 클라이언트가 전송)
HTTP 응답( 서버가 반환)
크게 보면 둘은 HTTP 헤드와 바디로 구성된다는 공통점이 있다.
- HTTP 헤드
- 각 줄은 CRLF로 구분되고 첫 줄은 시작 줄(Start-line), 나머지 줄은 헤더(Header)라고 한다. 헤드의 끝은
CRLF 한 줄로 나타난다.
- 헤더는 필드와 값으로 구성되고 HTTP 메시지/바디의 속성을 나타낸다.
- 하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있다.
- HTTP 바디
: 헤드의 끝을 나타내는 CRLF 뒤 모든 줄을 말한다.
클라이언트/서버에게 전송하려는 데이터가 바디에 담긴다.
http 메시지
- HTTP 요청
: 서버에게 특정 동작을 요구하는 메시지
서버는 해당 동작이 실현 가능한지, 클라이언트의 동작을 요청할 권한 여부 등을 검토하고 처리
- 시작 줄
HTTP 요청의 시작 줄은 메소드(Method), 요청 URL(Request-URL), HTTP 버전으로 구성, 각각 띄어쓰기로
구분
- 메소드 : URL가 가리키는 리소스를 대상으로 서버가 수행하길 바라는 동작을 나타냄
HTTP 표준에 정의된 메소드는 8개
- GET: 리소스를 가져오라는 메소드
이용자가 브라우저에 웹 서버의 주소를 입력/ 하이퍼링크 클릭하려면
새로운 페이지를 렌더링하기 위해 리소스가 필요하다.
이때 브라우저는 GET 요청을 서버에 전송하여 리소스를 받아온다.
- POST: 리소스로 데이터를 보내라는 메소드
전송할 데이터는 보통 HTTP 바디에 포함된다.
로그인할 때 입력하는 ID, 비밀번호, 게시판에 작성하는 글 등이 POST로
서버에 보내진다.
- 요청 URL : 메소드의 대상
- HTTP 버전: 클라이언트가 사용하는 HTTP 프로토콜의 버전
GET 요청의 구조, 파란색: request url, 빨간색 HTTP version, 나머지 request header
- HTTP 응답
: HTTP 요청에 대한 결과를 반환하는 메시지
요청 수행 여부, 이유와 같은 상태 정보(Status), 클라이언트에게 전송할 리소스가 포함된다.
- 시작 줄의 구성(각각 띄어쓰기로 구분)
- HTTP 버전: 서버에서 사용하는 HTTP 프로토콜의 버전
- 상태 코드(Status Code): 요청에 대한 처리 결과를 세 자릿수로 나타낸다.
HTTP 표준인 RFC2616은 40여개의 상태코드 정의, 각각 첫 번째 자릿수에
따라 5개의 클래스로 분류된다.
- 처리 사유(Reason Phrase): 상태 코드가 발생한 이유를 짧게 기술한 것
상태코드설명예시1xx요청을 제대로 받았고 처리가 진행 중임2xx요청이 제대로 처리됨200: 성공3xx요청을 처리하려면 클라이언트가 추가 동작을 취해야 함302: 다른 URL로 갈 것4xx클라이언트가 잘못된 요청을 보내어 처리에 실패함400: 요청이 문법에 맞지 않음403: 클라이언트가 리소스에 요청할 권한이 없음404: 리소스가 없음5xx클라이언트의 요청은 유효하지만 서버에 에러가 발생하여 처리에 실패함500: 요청을 처리하다가 에러 발생함503: 서버가 과부하로 인해 요청을 처리할 수 없음
4. HTTPS (HTTP over Secure socket layer)
: HTTP 사용 시 누군가 가로채면 중요한 정보가 유출될 수 있는데, TLS(Transport Layer Security) 프로토콜을
도입하여 보완한 것
- HTTPS 제정 초기에는 민감한 데이터를 취급할 때 주로 사용했지만 현재는 규모에 상관없이 사용한다.
- 웹 서버의 URL이 http:// 이면 HTTP
https:// 이면 HTTPS 프로토콜을 사용한다.
- TLS: 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화한다. 공격자가 중간에 메시지를 탈취해도
해석이 불가능하고 HTTP 통신이 도청과 변조로부터 보호된다.
키워드
HTTP(HyperText Transfer Protocol): 웹 서버와 클라이언트가 리소스를 교환하기 위해 사용하는
프로토콜. 클라이언트가 요청하면, 서버가 응답하는 방식.
HTTP 메시지: HTTP 서버와 클라이언트가 교환하는 데이터. 헤드와 바디로 구성되며,
각 줄은 CRLF로 구분됨.
- 헤드: 메시지에 대한 정보. 헤드의 끝에는 CRLF가 한 줄 있음.
- 바디: 클라이언트가 서버에게, 또는 서버가 클라이언트에게 전달할 데이터
HTTP 요청(Request): 클라이언트가 서버에게 특정 동작을 요청하는 메시지
- 메소드(Method): 요청 URI가 가리키는 리소스에 대해, 서버가 수행했으면 하는 동작을 지정
- 요청 URI(Request-URI): 메소드의 대상이 되는 리소스를 지정
HTTP 응답(Response): 요청을 처리한 결과 및 이유, 그리고 클라이언트에 전송할 웹 리소스를 포함하는
메시지
- 상태 코드(Status Code): 요청을 처리한 결과
- 처리 사유(Reason Phrase): 상태 코드가 발생한 이유
HTTPS(HTTP on Secure socket layer): TLS를 이용하여 HTTP의 약점을 보완한 프로토콜
STAGE 2
웹 기본 상식 - Background: Web
0. 서론
World Wide Web, W3, Web 은 현대 정보 통신을 대표하는 통신 수단 중 하나이다.
웹: 인터넷이라는 통신망을 활용하여 구현된 전 지구적 정보 공간
시간과 장소에 구애받지 않고 인터넷 접속만 할 수 있다면 웹에서 정보를 구하거나 공유할 수 있음
정보의 흐름이 거미줄 같다고 하여 웹으로 이름 붙여짐
과거현대통신목적의사 소통 (정보 교환, 감정 표현 등)의사 소통 (정보 교환, 감정 표현 등)수단찾아가기, 봉화 신호전화, 인터넷특징시간과 거리의 제약이 있음시간과 거리의 제약이 거의 없음1. 웹
: 인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스
정보를 제공하는 주체를 웹 서버 (Web Server), 정보를 받는 이용자를 웹 클라이언트 (Web Client)라고 한다.
- 웹의 발전과 웹 보안의 중요성
웹을 통한 정보의 교환 과정에서 민감한 정보가 유출되거나 악용되지 않도록 보호하는 웹 보안의 중요성이 나타나기 시작했다.
- 웹 서비스, 프론트엔드, 백엔드
현재는 능동형 서비스에 가깝다.
- 프론트엔드(Front-end): 이용자의 요청을 받는 부분, 이용자에게 직접 보여지는 부분
웹 리소스(Web resource)로 구성
- 백엔드(Back-end): 요청을 처리하는 부분
+ 웹 리소스: 웹에 갖춰진 정보 자산
모든 웹 리소스는 고유의 Uniform Resource indicator (URL) 을 가지고 이를 이용해 식별된다.
ex. https://aa/index.html 의 주소 입력하면 aa에 있는 /index.htm 경로의 리소스를 가져오라는 의미
+ 웹의 프론트엔드를 구성하는 대표적인 웹 리소스
- Hyper Text Maqrkup Language (HTML) : 웹 문서의 뼈와 살. 태그와 속성을 통한 구조화된 문서 작성 지원
- Cascading Style Sheets (CSS) : 웹 문서의 생김새 지정. 웹 리소스들의 시각화 방법을 기재한 스타일 시트
글자의 색, 모양, 배경 색, 이미지 크기, 위치 등을 지정
- JavaScript (JS) : 웹 문서의 동작을 정의. ex. 버튼 클릭 시 반응, 데이터 입력 시 전송 위치 등을 구현한다.
이용자의 브라우저에서 실행되는데 클라이언트가 실행하는 코드라고 하여
Client-Side Script 라고도 한다.
- 그 외 : 문서, 이미지, 동영상, 폰트 등
- 웹 클라이언트와 서버의 통신 과정
1. 클라이언트) 이용자가 브라우저를 이용하여 웹 서버에 접속한다.
2. 클라이언트) 브라우저는 이용자의 요청을 해석하여 HTTP 형식으로 웹 서버에 리소스를 요청한다.
3. 서버) HTTP로 전달된 이용자의 요청을 해석한다.
4. 서버) 해석한 이용자의 요청에 따라 적절한 동작을 한다. 리소스를 요청한다면 탐색하고 복잡한 동작을
요구할 경우 내부적으로 필요한 연산을 처리한다.
5. 서버) 이용자에게 전달할 리소스를 HTTP 형식으로 이용자에게 전달한다.
6. 클라이언트) 브라우저는 서버에게 응답받은 HTML, CSS, JS 등의 웹 리소스를
시각화하여 이용자에게 보여준다.
키워드
통신: 정보를 전하는 것. 현대에는 전화, 인터넷 등의 통신 수단을 이용하여 과거보다 시간과 공간의 제약을 받지 않고 이뤄짐.
웹: 인터넷이라는 통신망을 활용하여 구현된 전 지구적 정보 공간
웹 클라이언트: 웹에서 정보를 요구하는 주체
웹 서버: 웹에서 정보를 제공하는 주체
웹 리소스: 웹 서버가 제공하는 정보 자원(e.g. HTML, Javascript, CSS 등)
웹 서비스: 웹 상에서 제공되는 서비스 (e.g. SNS, 온라인 쇼핑몰 등)
'보안 > WEB HACKING' 카테고리의 다른 글
드림핵 웹해킹 stage 3-cookie&session (1) 2024.03.14 드림핵 웹해킹 stage 2-웹 브라우저 (2) 2024.03.14 XSS game 05, 06 (8주차) (0) 2024.03.14 XSS game 03, 04 (7주차) (1) 2024.03.14 XSS game 01, 02 (6주차) (0) 2024.03.14