[SK shieldus Rookies 16기][클라우드기반 시스템 운영 및 구축] Web 구조

Jina·2024년 1월 9일
0

SK shieldus Rookies 16기

목록 보기
53/59
post-thumbnail
post-custom-banner

1. HTTP

1.1. 정의

클라이언트와 서버 사이의 웹 문서를 송수신해주는 프로토콜

1.2. 3-Tier Web System Architecture

  1. Front Server (Web Server)
  2. Application Server
  3. DB Server

1.3. URL 구조

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=kbs

  • 도메인 : search.naver.com
  • uri : /search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=kbs
  • DB질의조건 : ?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=kbs

1.4. Version

  • HTTP 1.0 : 텍스트용 세션을 맺고 close 했다가 이미지용 세션을 다시 맺고 close한다. ⇒ 각 요청마다 새로운 세션을 생성하고 종료하는 방식(단기 커넥션)
  • HTTP 1.1 : 텍스트 전송부터 이미지 전송까지 한 번의 세션에 끝난다. ⇒ 여러 요청을 한 번의 세션에서 처리하는 방식(영속적인 커넥션)

2. Request 구조

# 요청 라인
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

2.1. 요청라인

POST /dvwa/login.php HTTP/1.1
# Method 	URI		 HTTP ver

URI의 / 표시는 index.html 요청을 의미

< Method 종류 >

  • GET : 일반 데이터를 요청할 때 사용, URI에 표시됨
  • POST : 일반 데이터를 요청할 때 사용, Body부분에 데이터를 넣어서 요청
  • PUT : POST와 유사, 지정된 위치에 파일을 서버에 올릴 때 사용
  • DELETE : 지정된 위치의 파일을 삭제할 때 사용
  • HEAD : GET 방식과 동일, 서버의 상태 확인할 때 사용
    HEADOPTIONS 는 공격자가 공격을 하기 전 서버 상태와 허용되는 메소드를 확인할 때 사용할 수 있다.
  • OPTIONS : HEAD보다 구체적으로 서버의 상태를 확인할 때 사용
  • TRACE : 프록시를 이용해서 서버에 접속할 때 몇 개의 프록시를 경유해서 서버에 도착하는지 확인 가능
    • Request 헤더에 Maz-Forwards 라는 항목이 표시되는 것을 확인할 수 있음
  • CONNECT : 클라이언트가 프록시 서버를 통해 다른 네트워크 서비스에 직접 연결을 요청할 때 사용
  • PATCH : 리소스 일부를 수정하는 경우 사용

< nmap으로 서버 스캔하기 >

# 해당 IP가 열어둔 Methods 확인 가능
$ nmap --script http-methods 192.168.10.60
# HEAD 메소드를 보내는 명령어
$ curl -I 192.168.10.60

< curl을 이용해 특정 IP에 OPTIONS 요청 >

$ curl -v -X OPTIONS 192.168.10.60

< telnet을 이용해 특정 IP의 특정 포트로 원격접속 >

# 192.168.10.60에 80포트로 접속
$ telnet 192.168.10.60 80
# Method * HTTP/1.1 입력 후 Enter 2번

< curl을 이용해 특정 URL에 TRACE 요청 >

$ curl -v -X TRACE http://192.168.10.60

2.2. 요청헤더

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

2.3. 공백라인

개행문자 CR+LF

2.4. 메세지 본문

username=admin&password=password&Login=Login
  • Post 방식으로 요청한 경우에만 나타난다.
  • Body가 있으면 반드시 Response에 Content-type이나 Content-Length가 나타난다.

3. Response 구조

# 상태라인
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>

3.1. 상태라인

HTTP/1.1 200 OK
# HTTP버전	요청실행결과코드

< Response 코드 >

  • 2xx : 성공
  • 3xx : 리다이렉션(방향 재지정) - Location 확인 가능
    • 301 : 영구적 이동
    • 302 : 일시적 이동
    • 304 : 리소스 변경X 로컬 캐시의 복사본 사용
      ✅ 200과 300의 공통점 : 요청 성공
      ✅ 200과 300의 차이점 : 300은 지연시간이 발생
  • 4xx : 클라이언트측 에러
    • 400 : 문법적 오류
    • 401 : 인증 실패
    • 403 : 접근 권한이 없는 리소스를 요청
    • 404 : 존재하지 않는 리소스를 요청
  • 5xx : 서버측 에러
    • 500 : 소프트웨어상(애플리케이션) 오류
    • 501 : 웹에서 요청한 메소드가 서버에서 허용하는 것이 아닐 경우
    • 502 : 서버와 클라이언트를 중계해주는 프록시에 문제가 발생할 경우
      ✅ 웹에서 게이트웨이는 프록시를 의미
    • 503 : 하드웨어상(RAM,CPU) 오류

3.2. 응답헤더

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 # 응답 본문의 미디어 타입

3.3. 공백라인

개행문자 CR+LF

3.4. 메세지 본문

<!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>

4. Proxy Server

4.1. 정의

서버와 클라이언트 간의 요청과 응답을 중계하는 역할을 수행하는 서버(프로그램)

4.2. 목적 및 기능

  1. 트래픽 분산 : Load Balancer 로 사용됨
  2. 캐시 서버로 이용
  3. 보안 :
    • Forward Proxy
      1. 실제 서버 또는 클라이언트의 IP를 숨김
      2. 들어오는 IP의 주소를 변환 시킴 ⇒ 차단된 사이트 접속
    • Reverse Proxy
      1. 서버 쪽에서 생성
      2. 내부 서버의 안정성을 보장하기 위해 서비스 제공 서버의 IP를 변환 시킴

이 외 여러가지 목적으로 사용
해킹할 때는 멀티레이어 웹 프록시를 사용

💡 < 프록시 서버를 사용하고 있는지 알 수 있는 2가지 방법 >
1. Request 메소드Connect면 프록시를 경유해 들어왔음을 알 수 있다.
2. URI에 프로토콜부터 전체 주소가 보여지면 프록시를 사용했음을 알 수 있다.

profile
공부 기록
post-custom-banner

0개의 댓글