드림 핵 웹해킹

웹 기초 지식

web browser(웹 브라우저)

: 웹에 접속하기 위해 사용하는 소프트 웨어

-> HTTP를 통해 통신 & 웹 리소스 가공

image

-> 브라우저별 HTML/CSS/JS 해석 및 실행을 차별화하기 위해 노력

  • 웹 브라우저로 접속시 이루어지는 통신

    image

web Resource

: 웹 상에 존재하는 모든 콘텐츠 (HTML, CSS, JS, PDF, PNG 등)

ex) http://dreamhack.io/index.html은 dreamhack.io에 존재하는 /index.html 리소스에 대한 요청

URI(URL)

:Uniform Resource Identifier의 약자로, 리소스 를 식별하기 위한 식별자

  • URL

    -> 리소스의 위치를 식별하기 위한 URI의 하위 개념

  • URI 구성요소

    • Scheme

      웹 서버에 접속할 때 어떤 체계(프로토콜)를 이용할지에 대한 정보

    • Host

      Authority의 일부로써 접속할 웹 서버의 호스트(서버 주소)에 대한 정보

    • Port

      Authority의 일부로써 접속할 웹 서버의 포트에 대한 정보

    • Path

      접속할 웹 서버의 경로에 대한 정보를 가지고 있으며, / 문자로 구분

    • Query

      웹 서버에 전달하는 파라미터 (추가적인 정보)이며, URI에서 ? 문자 뒤에 붙음

    • Fragment

      메인 리소스 내에 존재하는 서브 리소스에 접근할 때 이를 식별하기 위한 정보를 담고 있으며, URI에서 # 문자 뒤에 붙음

      image

Encoding

: 표준화, 보안 등의 목적으로, 문자 또는 기호 등의 정보나 형태를 다른 형태나 형식으로 변환하는 처리

  • Decoding

    -> 변경된 결과

    • Encoding (인코딩) : 알고리즘 모두 공개 & 키와 같은 요소가 포함되어 있지 않아서 모두가 원래의 정보로 복원이 가능

    • Encryption (인크립션) : 양방향 암호 알고리즘 & 일치한 알고리즘과 유효한 키를 가지고 있다면 원래의 정보로 복원이 가능

  • URL Encoding(percent encoding)

    ->URI 구조내에서 예약어(구분자)로 사용되는 문자들을 전송하고자 할 때 사용

    • 예약어 : URI 구조내에서 문법적으로 중요한 의미를 가지고 있기 때문에 문법적으로 사용하지 않을 경우에는 반드시 인코딩해 사용해야 함

    image

  • HTML entity Encoding

    -> HTML 문서 내에서 사용하는 문자열들이 HTML에서 사용하는 태그로 인식하지 않도록 하기 위해 사용

    image

HTTP(HyerText Transfer Protocol)

:웹을 이용하기 위한 통신 규약

-> URI의 Scheme(Protocol)에 해당

  • Protocol(프로토콜)

    컴퓨터 내부 혹은 컴퓨터 사이에서 어떻게 데이터를 교환할지를 정의하는 규칙 체계

  • HTTPS

    HTTP의 문제점인 데이터의 평문 전송을 보완하기 위해 등장

  • 데이터 구조

    1. 사용자가 서버에 요청을 하는 Request

    • request 구성요소

      • Method

        서버에 요청 시 수행하고자 하는 동작을 나타냅니다.

      • Path

        사용자가 서버에 요청하는 웹 리소스의 경로입니다.

      • Version

        HTTP의 버전을 나타냅니다.

      • Header

        서버에 추가 정보를 전달하는 데이터 부분입니다. 사용자가 입력한 데이터를 전달하기 위한 부분보다는 사용자와 서버가 상호작용하기 위한 정보를 담는 부분으로 사용됩니다.

        e.g. 사용자 데이터의 처리 방식 및 형식에 대한 정보, 서버에서 사용자를 식별하기 위한 쿠키 정보 등

      • Body

        사용자가 입력한 데이터가 서버에 전달 시 데이터를 담는 부분입니다.

    2. 사용자의 요청에 대한 서버의 응답인 Response

    • Version

      HTTP의 버전을 나타냅니다.

    • Status code

      사용자의 요청에 대한 서버의 처리 결과를 나타냅니다.

    • Header

      사용자와 상호작용하기 위한 데이터를 담는 부분으로 사용됩니다.

      e.g. 사용자(웹 브라우저)에서 서버의 응답 데이터를 처리하는 방식 및 형식에 대한 정보, 서버에서 사용자를 식별하기 위한 쿠키 발급 정보 등

    • Body

      서버가 사용자에게 응답하는 데이터를 담는 부분입니다.

    image

: 웹 브라우저에 저장하는 데이터

-> HTTP 요청마다 새로운 커넥션을 열기 때문에 사용자 인증을 다시 한다는 단점을 보안(인증 상태를 포함)

Session

: 서버에 저장하는 데이터

-> 쿠키로 사용자가 임의 사용자로 인증된 것 처럼 요청 조작을 방지

=> 유추할 수 없는 랜덤한 문자열 키를 만들어 응답하며, 이를 보통 Session ID라고 부름

Domain Name

: 인터넷 네트워크상에서 컴퓨터 식별하는 이름

=> Host가 웹 브라우저를 어디에 연결할 지 정할 때 사용

Server

: 인터넷상에서 사용자에게 서비스를 제공하는 컴퓨터 -> 웹 서버는 사용자(웹브라우저)와 HTTP를 이용하여 통신하는 서버

Application

: 서버에서 설정한 특정 기능들을 수행하는 소프트웨어

  • 웹 어플리케이션

    사용자가 요청한 내용을 동적으로 처리하기 위해 Web Application Language가 사용

    • 웹 어플리케이션 언어

      ex) PHP, NodeJS, Python, Java

    • 프레임워크

      ex) Python의 django, flask / Java의 spring

DataBase (DB)

: 데이터를 저장하기 위해 사용하는 데이터 저장소(★보완 중요!)

  • DataBase Management System (DBMS)

    데이터베이스 내의 데이터 조회/수정/삽입을 용이하게 할 수 있도록 도와주는 서버 어플리케이션

    ex) MySQL, MS-SQL

웹 해킹 공격

Client-side Attack

: 서비스 사용자에 대한 공격

=> 웹 서버가 제공해주는 데이터가 공격자에 의해 변조되었을 경우 웹 브라우저에서 렌더되는 과정에서 취약점이 발생하는 경우가 대표적

Server-side Attack

: 서비스 운용하는 서버에 대한 공격

=> 운영되는 서비스의 구조와 특징에 따라 위협의 형태가 달라짐

Review

image image image image