ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • HTTP packet
    Web 2024. 6. 7. 21:57

    Request

    # example
    [Request]
    Method URI HTTP_Version
    HEADER
    Body
    
    # header
    [Request]
    POST /somerequest HTTP/1.1
    Host: a.com
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 100
    User-Agent: Mozilla/5.0(Windows NT 10.0; Win64; x64) AppleWebKit/537.36(KHTML, like Gecko)
    Chorom/114.0.0.0 Safari/537.36
    Referer: <https://a.com/>
    Cookie: session=somesessionvalues
    
    param1=parameter     # body
    

    method

    1. GET : URL 쿼리를 통해 파리미터를 담아 요청
    2. POST : HTTP Body를 통해 파라미터를 담아 요청
    3. PUT : 서버에 리소스를 생성(업로드) 하거나 수정
    4. DELETE: 서버의 리소스를 삭제
    5. PATCH : 서버의 리소스를 일부 수정
    6. HEAD : Response에 Content 없이 헤더 부분만 요청
    7. OPTIONS : 서버에서 지원하는 메서드 종류를 열거

    What is REST API

    • 정해진 코드가 아닌 개발자끼리의 약속
    • 사용자가 요청하는 목적에 따라 메소드를 나누어 전송하자 ⇒ REST pull
    1. GET : 리소스 조회
    2. POST : 리소스 생성 요청
    3. PUT / PATCH : 리소스 업데이트
    4. DELETE : 리소스 삭제

    URI

    https://id:pw@www.example.com:port/somereq.html?someparam1=value&someparam2=value2#hash

    • Protocol : 서버 리소스에 접근하기 위해 사용되는 프로토콜
    • Host : 서버의 도메인 이름이나 IP 주소. 접속하기 위한 id:pw, 도메인명 / IP와 포트로 구성되어 있음. HTTP에선 id:pw는 거의 사용하지 않지만, 지원하고 있기 때문에 여러 우회기법에 사용됨 ⇒ SSRF
    • Path : 서버 내의 리소스의 위치를 지정하는 경로. /..%2f , /..;/ 등 웹서버 및 로드밸런서가 경로를 해석하는 방식의 차이를 이용한 우회기법 등이 존재
    • Query String : 파라미터를 전달하는데에 사용. someparam1[key]=value와 같이 Dict 형태로 전송될 수 있음
    • hash : 서버 전달 x 브라우저 클라이언트 단에서만 동작 크롬에 scroll to text 를 이용하여 DOM영역 내부 정보를 빼내는 Xss Leak에 사용

    HTTP version

    • HTTP/1.0 : 1996년에 출시된 첫번째 버전. 하나의 연결에 하나의 요청과 응답만 처리가 가능
    • HTTP/1.1 : 여러 개의 요청과 응답을 하나의 TCP 연결에서 처리 가능. Keep-Alive 연결을 통해 연결 재사용, 캐시 등 기능 또한 도입됨
    • HTTP/2 : 2015년에 출시된 버전. 요청과 응답을 작은 프레임 단위로 분할하여 전송
    • HTTP/3 : 2020년에 출시됨. QUIC 프로토콜을 기반으로 TCP가 아닌 UDP를 사용하여 지연시간을 낮춤

    Header

    • Host : 요청하는 호스트(도메인 / IP)의 이름
    • Content-Type : 요청하는 POST Body 데이터의 형식을 지정
      • applicatioin/x-www-form-urlencoded : param=value 형식을 가지고, value는 url encoding을 지원
      • application/json : json 형식
      • application/xml : xml 형식
    • Content-Length : 요청하는 POST Body 데이터의 길이
    • User-Agent : 요청하는 클라이언트의 정보. 브라우저 버전 등이 적힌다.
    • Referer : 요청 패킷이 어디서부터 흘러왔는지 알려주는 정보
    • Cookie : 사용자 세션 정보 등과 같이 유지하고자 하는 정보 등이 적혀있음

    <aside> 📖 Cookie

    • 어떠한 정보를 저장할 때 브라우저에 저장. 매 요청시마다 전송 Session
    • 어떠한 정보를 저장할 때 서버에 저장(메모리, 파일, 데이터베이스 등), 서버에서 관리

    </aside>

    <aside> 📖 Cookie 속성 secure

    • https로만 전송 only
    • 브라우저 js에서 접근 불가

    </aside>

    Response

    # example
    [Response]
    HTTP_Version Status_code
    HEADER
    Body
    
    # header
    [Request]
    HTTP/1.1 200 OK
    Server: nginx
    Content-Type: application/json;charset=UTF-8
    Set-Cookie: sessio=newsessionvalue; expires=Mon, 24 Jul 2023 13:18:29 GMT; path=/; doamin=.a.com
    Content-Length: 100
    
    {"response":"resp!"}
    

    Status Code

    • 200 OK : 정상 응답
    • 301 Moved Permanently : 리소스가 다른곳으로 영구적으로 이동됨
    • 302 Found : 리소스가 일시적으로 다른 위치로 이동됨. 보통 Location 헤더를 통해 이동할 위치를 지정
    • 400 Bad Request : 요청이 잘못되었거나 서버가 이해할 수 없는 요청
    • 401 Unauthorized : 자격증명이 없어 인가되지 않은 요청
    • 403 Forbidden : 권한이 없어 인가되지 않은 요청
    • 404 Not Found : 없는 페이지
    • 500 Internal Server Error : 서버 내부 오류. 서버가 요청을 해석하여 서버단 언어로 해석 도중 에러가 생겼을 때

    Header

    • Server : 서버의 정보를 나타냄. 서버 정보, 버전 등의 정보를 제공
    • Content-Type : 응답 데이터의 content-type을 정의. Character set(인코딩)에 대한 정보도 전달 가능
      • Character set의 인코딩 방식을 이용하여 WAF 우회 가능
    • Set-Cookie : 쿠키 (세션 값 등) 정보를 세팅 가능. 만료와 적용 대상 path, domain 지정 가능
    • Content-Length : 응답 데이터의 길이

    'Web' 카테고리의 다른 글

    CGI / FAST CGI && WAS vs CGI vs Spring  (0) 2024.07.31
    Web Scanner / Fuzzer 차이  (0) 2024.07.15
Designed by Tistory.