클라이언트와 서버 사이의 웹 문서를 송수신해주는 프로토콜
https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=kbs
# 요청 라인
POST /dvwa/login.php HTTP/1.1
# 요청 헤더(header)
Host: 192.168.10.60 # 요청이 전송되는 서버의 도메인
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0 # 요청을 생성한 클라이언트의 정보
# 클라이언트가 수신할 수 있는 미디어 타입, 언어, 인코딩 형식
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
# 요청 본문 미디어 타입, 길이
Content-Type: application/x-www-form-urlencoded
Content-Length: 44
Origin: http://192.168.10.60
Connection: close
Referer: http://192.168.10.60/dvwa/login.php
Cookie: security=high; PHPSESSID=16fac79f111d3bb1fc9c1bc82a31310c
Upgrade-Insecure-Requests: 1
# 공백라인
# 요청 메세지 본문(body)
username=admin&password=password&Login=Login
POST /dvwa/login.php HTTP/1.1
# Method URI HTTP ver
URI의 /
표시는 index.html
요청을 의미
GET
: 일반 데이터를 요청할 때 사용, URI에 표시됨POST
: 일반 데이터를 요청할 때 사용, Body부분에 데이터를 넣어서 요청PUT
: POST와 유사, 지정된 위치에 파일을 서버에 올릴 때 사용DELETE
: 지정된 위치의 파일을 삭제할 때 사용HEAD
: GET 방식과 동일, 서버의 상태 확인할 때 사용HEAD
와 OPTIONS
는 공격자가 공격을 하기 전 서버 상태와 허용되는 메소드를 확인할 때 사용할 수 있다.OPTIONS
: HEAD보다 구체적으로 서버의 상태를 확인할 때 사용TRACE
: 프록시를 이용해서 서버에 접속할 때 몇 개의 프록시를 경유해서 서버에 도착하는지 확인 가능CONNECT
: 클라이언트가 프록시 서버를 통해 다른 네트워크 서비스에 직접 연결을 요청할 때 사용PATCH
: 리소스 일부를 수정하는 경우 사용# 해당 IP가 열어둔 Methods 확인 가능
$ nmap --script http-methods 192.168.10.60
# HEAD 메소드를 보내는 명령어
$ curl -I 192.168.10.60
$ curl -v -X OPTIONS 192.168.10.60
# 192.168.10.60에 80포트로 접속
$ telnet 192.168.10.60 80
# Method * HTTP/1.1 입력 후 Enter 2번
$ curl -v -X TRACE http://192.168.10.60
Host: 192.168.10.60 # 어느 사이트에 접속했는지 알려주는 호스트
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0
# text는 html 형식의 파일을 받을 수 있고, application은 xhtml과 xml을 받아들일 수 있다.
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 44
Origin: http://192.168.10.60
Connection: close
Referer: http://192.168.10.60/dvwa/login.php
Cookie: security=high; PHPSESSID=16fac79f111d3bb1fc9c1bc82a31310c
Upgrade-Insecure-Requests: 1
개행문자 CR+LF
username=admin&password=password&Login=Login
# 상태라인
HTTP/1.1 200 OK
# 응답헤더(header)
Date: Thu, 25 Jan 2024 02:41:09 GMT
Server: Apache/2.4.41 (Ubuntu)
Last-Modified: Mon, 23 Jan 2024 13:46:26 GMT
ETag: "45b6-5c7e8b346b800"
Accept-Ranges: bytes
Content-Length: 17814
Vary: Accept-Encoding
Content-Type: text/html
# 공백라인
# 메세지 본문(body)
<!DOCTYPE html>
<html>
<head>
<title>Welcome to My Website!</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>Welcome to my website. Here you can find a lot of interesting content. Enjoy your stay!</p>
</body>
</html>
HTTP/1.1 200 OK
# HTTP버전 요청실행결과코드
Date: Thu, 25 Jan 2024 02:41:09 GMT # 응답 생성 날짜와 시간
Server: Apache/2.4.41 (Ubuntu) # 응답을 생성한 웹 서버 정보
Last-Modified: Mon, 23 Jan 2024 13:46:26 GMT # 문서가 마지막으로 변경된 날짜와 시간
ETag: "45b6-5c7e8b346b800" # 문서 버전을 나타내는 식별자
Accept-Ranges: bytes # 서버가 받아들일 수 있는 범위 요청
Content-Length: 17814 # 본문 길이(byte)
Vary: Accept-Encoding # 캐시서버가 요청 헤더를 기반으로 캐시된 응답을 선택하는 방법을 표시
Content-Type: text/html # 응답 본문의 미디어 타입
개행문자 CR+LF
<!DOCTYPE html>
<html>
<head>
<title>Welcome to My Website!</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>Welcome to my website. Here you can find a lot of interesting content. Enjoy your stay!</p>
</body>
</html>
서버와 클라이언트 간의 요청과 응답을 중계하는 역할을 수행하는 서버(프로그램)
이 외 여러가지 목적으로 사용
해킹할 때는 멀티레이어 웹 프록시를 사용
💡 < 프록시 서버를 사용하고 있는지 알 수 있는 2가지 방법 >
1. Request 메소드가 Connect면 프록시를 경유해 들어왔음을 알 수 있다.
2. URI에 프로토콜부터 전체 주소가 보여지면 프록시를 사용했음을 알 수 있다.