ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹해킹 1주차 - 웹
    해킹 2021. 1. 1. 11:19

    해킹 : 본래 의도와는 다른 행위를 발생시키는 것

    (예를 들어 스택 오버플로우를 이용하여 의도적으로 작동 이상 일으키기)

    ->이를 위해 설계/운영의 약점을 찾아야 함(더 높은 이해도 요구)

    월드 와이드 웹(WWW,W3): World Wide Web, HTTP 이용 서비스 제공 대상: 웹 서버, 서비스 받는 사용자: 웹 클라이언트

    웹의 역사: 저장된 문서 내용 출력/제공

    -> 사용자의 입력과 수행에 따른 다양한 기능 제공

    -> 보안의 중요성이 커짐

    -웹 브라우저: 웹에 접속하기 위해 사용되는 소프트웨어(크롬, 엣지 등)

    -웹 리소스: 웹에 있는 모든 콘텐츠(HTML,CSS,PDF,JS 등)

    -URI(URL): 리소스를 식별하기 위한 식별자

    -(식별자: 데이터 항목에 이름을 부여하여 일시적으로 규정하거나

    데이터의 어떤 특성을 표시하기 위해서 사용하는 기호 또는 기호의 집합.)

    -HTTP:웹을 이용하기 위한 통신 규약(프로토콜)

    ->암호화 하여 쓰이는 것이 HTTPS

    -프로토콜: 컴퓨터가 상호 접속할 때 오류를 최소화 하기 위해 쓰이는 규칙

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

    (사용자가 본 내용, 상품 구매 내역, 신상 정보 등이 저장

    ->이를 이용하여 맞춤 광고등을 보여줌)

    -Session: 서버에 저장하는 데이터

    (추가설명: 일정 시간[서버에 접속하는 시간을 구간별로 나누어서

    구분] 동안 저장하는 데이터-시간 지나면 세션이 만료했습니다 라고뜸)

    -도메인 네임: 웹상에서 서버 컴퓨터를 식별하는 이름(www.naver.com 등)

    -서버: 넷상에서 사용자에게 서비스를 제공하는 컴퓨터

    웹 서버- 웹 브라우저와 HTTP를 이용하여 통신하는 서버

    -어플리케이션: 앱, 기능을 하는 소프트 웨어

    -DB: 데이터베이스, 데이터 저장하는 장소

    웹 브라우저: 웹을 사용하기 위해 사용하는 툴,

    1.HTTP를 통해 인터넷 상에서 통신을 하고

    2.서버로부터 전달받은 웹 리소스들을 가공해 웹을 사용하도록 도움

    ->사용자 입력 값은 웹 브라우저를 통하기 때문에 브라우저를 알아야 함

    -네트워크 프로그램: 웹을 사용하기 위해서는 웹 서버가 이해하는 HTTP

    형태로 직접 작성해야함

    -CLI 프로그램(curl,wget): 서버가 주는 데이트 출력만 함

    -웹 브라우저: 주소를 입력하면 웹 브라우저가 알아서 다 해줌

    웹 리소스: 웹에서 사용하는 콘텐츠

    ->주소를 입력하면 거기에 해당하는 리소스에 대해 요청을 수행함

    그 주소->URL이라고 함. 추상화된 경로의 개념으로 사용하기 시작함

    -HTML: 웹 문서의 뼈대를 구축하기 위한 마크업 언어 / 태그와 속성 지정하여

    문서를 구성

    -CSS: HTML이 표시되는 방법을 정의하는 스타일 시트 언어 / 출력 시 스타일

    을 결정

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

    -scheme: 웹서버 접속시에 어떤 프로토콜을 이용할지에 대한 정보를 가짐

    -Host: Authority의 일종, 웹 서버의 서버 주소에 대한 정보

    -Port: Authority의 일종, 웹 서버의 포트에 대한 정보

    -Path: 웹 서버의 경로에 대한 정보, '/'로 구분됨

    -Query: 웹 서버에 전달하는 파라미터(추가정보), ? 뒤에 붙음

    -Fragment: 메인 리소스 내에 존재하는 서브 리소스에 접속할때 이를

    식별하기 위한 정보, # 뒤에 붙음

    http:// example.com /path ?search=1 #fragment

    scheme Host Path Query Fragment

    Encoding: 기호나 문자의 정보와 형태를 표준화/보안을 위해 다른 형태로 바꾸는 처리/방식 <-> 디코딩

    -Encoding: 알고리즘이 공개되어서 모두가 원래 정보로 복원 가능

    -Encryption: 양방향 암호 알고리즘, 키가 있어야 원래 정보로 복원 가능

    -URL 인코딩: 예약어(구분자)를 전송하고자 사용, 입력된 문자를 HEX로 변환

    후 %를 붙임

    -HTML entity 인코딩: 문서 내 사용되는 문자열을 태그들의 문자로 인식되지

    않도록 사용 &#x를 붙이거나 Entity name 사용

    HTTP: Scheme에 해당함 ,HTTP, HTTPS가 있음

    TCP나 TLS(암호화)를 사용하고 각각 80,443 포트를 사용함(톰캣은 8080)

    Request(사용자가 서버에 요청) - Response(요청에 대한 서버의 응답) 로

    나뉘어짐

    HTTP Request: 사용자가 서버에게 요청하는 것.

    줄바꿈은 CRLF(Carrage Return, Line Feed로 왼쪽/아래로 이동하는 문자열)

    가장 첫 줄에는 수행하고자 하는 동작인 Method, 경로인 Path, HTTP 버전인

    Version으로 구성

    두번째 줄 부터는 Header(이름: 값) ->끝부분에는 CRLF 호출하여 끝 표시

    // 추가정보 전달, 상호작용을 위한 정보를 담음

    마지막 줄에는 사용자 데이터를 담는 Body

    -Method: 목적을 두고 설계되었지만 설정 방식/ 웹 앱 처리 방식때 따라 수행

    방식이 다르게 사용됨

    =OPTIONS: 요청하는 리소스가 허용하는 메소드 목록을 반환

    =GET: 리소스를 요청함(게시물 보기, 이미지 등)

    =HEAD: GET 메소드에서 body만 떼놓고 받음(서버 상태 확인 등)

    =POST: 리소스 생성/ 데이터 추가를 위해 값을 제출할 때 사용(게시글 생성)

    =PUT: 특정 리소스 내용을 보낸 값으로 설정

    =PATCH: PUT에서 key만 변경

    =DELETE: 삭제

    =TRACE: 요청받은 값을 Body로 다시 클라이언트에 돌려줌

    -Header

    =Host: 데이터 보내는 서버의 주소

    =Cookie: 사용자 식별위해 사용하는 정보

    =User-Agent: 사용자가 쓰는 프로그램 정보

    =Referer: 이전 URI의 정보

    =Content-Type: 사용자가 전달하는 데이터 처리 방식을 나타냄

    -> 사용자와 서버가 일치해야함

    HTTP Response: 사용자의 요청에 대한 서버의 응답

    줄바꿈은 CRLF

    첫 줄은 Version(HTTP의 버전)과 Status code(사용자 요청에 의한 서버

    처리 결과)로 구성

    두번째 줄은 Header 마지막 줄은 Body

    해킹에서 중요한 부분

    -Status code

    =200번 영역: 사용자 요청 처리 성공을 의미

    =300번 영역: 리소스가 다른 경로로 변경됨 -> Response Header에

    있는 Location 헤더 값으로 리다이렉션

    =400번 영역: 사용자가 요청하는 구조/데이터의 오류

    (400 Bad Request - 데이터/구조의 문법 오류,

    403 Forbidden-권리 오류, 404 Not Found-경로 오류,

    405 Method Not Allowed)

    =500번 영역: 서버 자체의 에러

    (500 Internet Server Error, 503 Service Unavaliable-서버 준비x)

    -Header

    =content-Type: 서버 응답 데이터를 웹 브라우저에서 처리할 방식/형식

    나타냄

    =content-Length: 데이터의 길이

    =Server: 서버의 소프트웨어 정보

    =Allow: 허용하는 Method 목록을 알려줌

    =Location: 300번 영역 응답 코드 사용 시 변경된 리소스 주소 나타냄

    =Set-Cookie: 사용자에게 쿠키 발급할 때 사용 ->웹 브라우저가 저장함

    Cookie: 많은 사용자에게 서비스되어야 하는 웹 특성상 연결 상태 유지는

    너무 과부화

    ->connectionless 속성 가짐 (하나 요청-하나 응답, 네트워크 끝)

    ->HTTP/1.1부터는 keep-alive를 해서 계속 연결 맺기도 함

    ->stateless 속성은 연결 끝맺을 때 상태를 유지하는 것

    => 요청마다 새로 연결하기 때문에 불편

    쿠키는 인증 상태를 포함할 수 있음, 사용자의 브라우저에 저장 됨

    Session: 데이터를 서버에 저장하고 접근할 수 있는 유추 불가능한 랜덤

    문자열 키(세션 ID)를 만들어 응답

    ->세션 ID는 쿠키에 저장하고 요청이 오면 인증 상태를 이로 확인

    웹 서버 어플리케이션: 사용자의 요청을 동적으로 처리할 수 있도록

    만들어진 앱

    ->웹 앱 언어가 사용됨(PHP,NodeJS,Python,Java 등)

    ->서버와 직접적으로 연결되어 있기 때문에 구현체에 취약점이 있으면

    더 큰 영향이 끼쳐짐

    -DBMS: 데이터베이스 내의 데이터를 쉽게 처리하도록 돕는 서버 앱

    (MySQL,MS-SQL 등)

    ->SQL Query를 통해 제어되는데 입력값을 그대로 쓰면 SQL로 공격당함

    웹해킹: 본래 의도와는 다른 동작을 일으키도록 하거나, 정보를 뺏고 변경하는

    행위가 웹에서 일어나는 것

    웹에서 다양한 기능 수행 -> 다양한 앱의 필요성 -> 수많은 문제점 발생

    -Client-side: 사용자와 서버간의 통신 부분

    =이 부분을 공격하는 것은 사용자에 대한 공격

    =대표적으로 웹 서버가 제공하는 데이터를 변조하여

    웹 브라우저 렌더 과정에서 취약점 발생시킴

    -Server-side: 서버 내에서 사용자의 요청을 처리하는 부분

    =이 부분을 어택한느 것은 서버에 대한 공격

    =서버의 앱 코드나 정보 유출, 서버 탈취등의 공격이 가능

     

    리뷰 틀린 부분 - HTML은 뼈대를 구축하기 위한 '마크업' 언어

    HTTPS 포트 번호는 '443'

    '해킹' 카테고리의 다른 글

    웹해킹 7주차 - Linux  (0) 2021.01.11
    웹해킹 6주차 - CSRF  (0) 2021.01.06
    웹해킹 5주차 - XSS  (0) 2021.01.04
    웹해킹 3주차 - JAVASCRIPT  (0) 2021.01.04
    웹해킹 2주차 - HTML  (0) 2021.01.01
Designed by Tistory.