일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 국가정보원
- 도구모음
- 화학물질안전원
- 불법유통
- 프로젝트
- 정보보안
- UKPT level
- 연구모임
- 국정원
- codeup
- HTML
- PHP
- 국가기록원
- 12기
- Service
- Los
- webhacking
- 대외활동
- 경기팀
- 여행
- 화학물질
- 불법유통근절
- 화학물질불법유통온라인감시단
- nurisec
- MITRE ATT&CK
- 웹 해킹 입문
- UKPT
- 기타정보
- 파이썬
- suninatas
- Today
- Total
agencies
HTTP란? 본문
HTTP는 Hyper Text Transfer Protocol(하이퍼 텍스트 트랜스퍼 프로토콜)의 약자로 웹을 구현하기 위한 네트워크 프로토콜입니다.
* 프로토콜은 : 송신 호스트와 수신 호스트 즉 클라이언트와 서버가 서로 통신을 하기 위한 일종의 규약 같은 것입니다.
우리가 웹 사이트의 주소를 입력할 때 http와 같이 웹사이트의 주소 앞에 http라는 것을 덧붙이는데 이것이 HTTP 프로토콜을 사용하는 것을 의미합니다. 만약 우리가 http:// 없이 사이트 주소만 입력한다고 하더라도 웹 브라우저는 일반적으로 자동으로 http://를 붙여서 요청을 전송합니다.
경우에 따라서는 (특히 로그인과 같이 중요한 정보가 통신될 때) 암호화 통신을 위해 http:// 대신 https://를 붙여서 HTTPS로 접속하기도 합니다.
HTTP 통신은 요청과 응답 두 가지로 구성됩니다.
클라이언트 영역에서 서버 영역으로 HTTP 요청을 전송하고, 웹 서버는 해당 요청을 처리한 후 HTTP 응답을 통해 그 결과를 반환합니다.
※ HTTP 요청/응답 메시지
POST /dvwa/login.php HTTP/1.1 Host : 192.168.56.106 User-Agent : Mozilla/5.0(windows nt 10.0;win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language : en-US, en;q=0.5 Accept-Encoding: gzip, deflate Referer: http://192.168.56.106/dvwa/login.php Content-Type : application/x-www-form-urlencoded Content-Length : 88 Cookie : security=impossible; PHPSESSID=2d0e~~~~ Connection : close Upgrade-Insecure-Requests : 1 username=admin&password=password.... |
HTTP/1.1 200 OK Date : Tue, 02 Jan 2018 09:50:50 GMT Server : Apache/2.2.8(ubuntu) DAV/2 mod_fastcgi/2.4.6 PHP/5.2.4-2ubuntu5 with Suhosin-Patch mod_ssl/2,2,8 OpenSSL/0.9 X-Powered-By : PHP/5.2.4-2ubuntu5 Expires : Tue, 23 Jun 2009 12:00:00 GMT Cache-Control : no-cache, must-realidate Pragma : no-cache Content-Length : 7389 Connection : close Content-Type : text/html; charset=utf-8 <!docu~~~~ 생략 |
* HTTP 메시지에는 줄 바꿈을 나타내기 위해서 CR(Carriage Return)과 LF(Line Feed)라는 특수문자가 사용되는데
CRFL와 같이 두 개의 문자가 함께 사용됩니다.
CRLF는 메시지의 각 라인이 끝임을 알려주는 중요한 구분자가 됩니다.
특히 헤더와 바디가 구분될 때 빈 줄이 있는데, 이 경우 CRLFCRLF처럼 CRLF가 두 번 사용됩니다.
참고로 CRLF를 강제로 전송하여 의도치 않은 결과를 초래하도록 만드는 CRLF 인젝션,
HTTP 응답 스플리팅(HTTP response splitting)과 같은 웹 공격 기법도 있습니다.
HTTP 요청 메시지의 처음은 HTTP 메소드로 시작한다.
메소드는 서버에게 어떤 명령을 실행할지 알려주는 역할을 합니다.
HTTP 메소드 | 설명 |
GET | 지정된 리소스 요청 |
POST | 클라이언트 데이터를 서버에 전달 |
PUT | 지정된 리소스에 데이터 저장 |
DELETE | 지정된 리소스 삭제 |
HEAD | 지정된 리소스의 응답 헤더만 요청 |
OPTIONS | 지원되는 메소드 표시 |
GET 메소드는 지정된 리소스(html jpg 등 이미지 파일 js등 스크립트 파일)를 요청하는 메소드입니다.
웹 페이지나 각종 이미지 파일들의 내용을 가져올 때 사용됩니다.
POST 메소드는 클라이언트 쪽에서 데이터를 서버 쪽으로 전달할 때 사용하는 메소드입니다.
주로 게시판에 글을 쓰거나 특정한 데이터를 전달할 때 사용됩니다.
PUT 메소드는 지정된 리소스에 데이터를 저장하는 메소드입니다. 데이터를 덮어쓰기 때문에 리소스를 수정할 때도 종종 사용됩니다.
DELETE 메소드는 지정된 리소스를 삭제하는 메소드입니다.
이 4개의 메소드는 데이터 관리를 위해 직접적으로 사용되는 메소드입니다.
하지만 과거의 웹 사이트는 대부분 GET과 POST 메소드 위주로 구현되었습니다.
PUT과 DELETE를 사용할 수 없는 것은 아니었지만 POST 메소드에 추가 파라미터를 이용해서 데이터를 수정하거나 삭제하는 것을 선호했습니다. 하지만 최근에는 REST API 구현을 위해 PUT과 DELETE 메소드도 많이 사용하고 있습니다.
이와 같이 데이터 관리를 위해 사용되는 GET, POST, PUT, DELETE 메소드를 CRUD HTTP 메소드라고도 합니다.
CURD란?
Create + Read + Update + Delete 의 앞 글자를 딴 것을 의미합니다.
그 밖에도 HEAD OPTIONS 등의 HTTP 메소드가 있습니다.
HEAD 메소드는 응답 헤더의 정보들만 확인하고자 할 때 사용합니다.
데이터는 전송되지 않기 때문에 대용량의 파일을 다운로드 하기 전 데이터의 길이를 확인하는 용도로 사용할 수 있습니다.
OPTIONS 메소드는 특정 리소스가 어떤 메소드를 처리할 수 있는지 확인할 때 사용합니다.
요청 헤더(Header)
요청 메시지의 둘째 줄부터 빈 줄이 나타날 때까지는 헤더를 통해 추가적인 정보가 전달됩니다.
헤더 중에는 요청 메시지와 응답 메시지 양쪽 모두에서 사용하는 헤더가 있는 반면 한쪽에서만 사용되는 헤더도 존재합니다.
요청 메시지에 사용된 헤더를 요청 헤더라고 하고, 응답 메시지의 헤더를 응답 헤더라고 부릅니다.
헤더는 리스트의 형태로 여러 개가 전송될 수 있으며 각 헤더는 아래와 같은 단순한 형식을 가집니다.
헤더이름 : 헤더 값
HOST (호스트 헤더는) 서버의 도메인 이름과 포트를 명시합니다.
포트 번호는 생략될 수 있으며 이때는 일반적으로 웹 서비스에서 사용되는 80번 포트를 의미합니다.
포트 번호를 포함하게 되면 host.com:port 형식과 같이 표시됩니다.
User-Agent (user-agent 헤더는 클라이언트 소프트웨어를 식별할 수 있는 헤더)입니다.
대표적으로 웹 브라우저를 예로 들면, 웹 브라우저의 이름과 버전이 표시되며 웹 브라우저가 실행중인 시스템의 환경, 브라우저가 사용하는 플랫폼 정보 등이 추가로 포함될 수 있습니다.
웹 브라우저 이외에도 검색 엔진의 웹 로봇, 모바일 애플리케이션 등 웹 요청을 수행하는 클라이언트들은 User-Agent에 자신의 정보를 보내어, 웹 애플리케이션이 헤더의 내용을 확인하고 헤더에 따라 다르게 동작할 수 있도록 해줍니다.
* User-Agent 헤더에 따라 서버의 동작이 달라지는 경우 어떤 앱들을 호환성을위해 다른 User-Agent 정보를 사용하기도 합니다. 악성 봇들이나 자동화 프로그램도 가짜 User-Agent 헤더를 사용하는 경우가 많으며 이와 같이 User-Agent를 조작하는 것을 유저 에이전트 스푸핑이라고 합니다. (User agent spoofing)
Accept (Accept-Language , Accept-Encoding) 헤더는 클라이언트가 어떤 컨텐트 타입을 처리할 수 있는지 서버에게 알려줍니다. 위의 예제를 보면 여러 개의 값이 전달되는 것을 알 수 있는데, 서버에서는 이 헤더에 지정된 타입 중에서 하나를 정하여 응답을 하게 됩니다.
이와 마찬가지로 Accept-Language 헤더는 클라이언트가 어떤 언어를 처리할 수 있는 지 서버에게 알려주는 데 사용하며
Accept-Encoding 헤더는 클라이언트가 처리할 수 있는 인코딩 방식이나 압축 알고리즘에 대한 정보를 알려줍니다.
Referer (레퍼러 헤더는) 이전 웹 페이지의 주소를 알려줍니다. 만약 우리가 웹 페이지의 링크를 눌러 새로운 페이지를 요청하는 경우, 새로운 페이지의 주소가 요청 URI가 되고, 링크를 제공한 페이지의 주소가 레퍼러 헤더를 통해 표시됩니다.
따라서 레퍼러 헤더를 참조하면, 요청이 웹 사이트 내부에서 요청된 것인지, 외부에서 요청된 것인지 알 수 있습니다.
이로 인해 CSRF 공격의 대응 방법 중의 하나로 래퍼러 헤더의 값을 검사하기도 합니다.
Content-Type, Content-Length
바디가 존재하는 경우 바디의 종류와 길이를 알려주는 헤더입니다.
요청 메시지와 응답 메시지 둘 다에서 사용할 수 있습니다.
요청 메시지에서 Content-Type 헤더는 주로 다음과 같은 값 중 하나를 가집니다.
application/x-www-form-urlencoded : 위 예제와 같이 파라미터 = 값의 형태(username=admin)로 아스키문자로 표현할 수 있는 데이터를 전송할 때 사용됩니다. 여러 개의 데이터를 보낼 때는 &로 구분합니다.
multipart/form-data : 파일 등의 바이너리 데이터를 전송할 때 사용됩니다.
application/json : json 데이터를 전송할 때 사용합니다.
text/xml : XML 데이터를 전송할 때 사용합니다.
Content-Length 헤더는 바디의 전체 길이를 알려주는 헤더입니다.
Cookie
쿠키를 전달하는 헤더로 (쿠키는 변수의 값과 쌍으로 구성된 집합으로 여러 요청에 걸쳐 클라이언트에서 동일한 데이터를 전달할 필요가 있을 때 사용합니다)
HTTP 응답코드!
응답 코드 종류 | 자주 쓰이는 응답 코드 및 텍스트 | 설명 |
1xx | 101 Switching Protocols | 프로토콜이 변경됨 주로 웹 소켓 사용시 발생 |
2xx | 200 OK 200 Create |
요청이 정상적으로 완료됨 리소스 생성이 완료됨 |
3xx | 301 Moved Permanently 304 Not Modified |
Location헤더에 정의된 URL로 이동 캐시된 사본과 동일로 리소스 변경 없음 |
4xx | 401 Unauthorized 403 Forbidden 404 Not Found |
인증에 실패함 리소스에 대한 권한이 없음 해당 리소스가 존재하지 않음 |
5xx | 500 Internal Server Error | 요청 처리 중 예상치 못한 서버 에러 발생 |
'Ⅲ. 정보보안' 카테고리의 다른 글
bWAPP 실습 진행 (0) | 2024.12.27 |
---|---|
칼리리눅스 다운로드 및 한글 설정하는 방법 (0) | 2024.12.27 |
파이썬 해킹 입문(기본 준비) (2) | 2024.12.08 |
CTF XOR 문제 만들기 (0) | 2024.11.25 |
cvedetails에서 description 가지고 오기 (0) | 2024.11.13 |