[Webhacking Study](Introduction of Webhacking) #study note(3.27)#week 1

JunhyukPark(박준혁)·2021년 3월 27일
0

Webhacking

목록 보기
1/2
post-thumbnail

- 서론 -

학교에서 진행중인 스터디를 통해 웹 개발을 할 때 보안 쪽을 신경쓰고 싶어 해킹 스터디에 가입해 공부해보기로 했다. 1주차에서는 웹이 어떻게 돌아가는지, 웹이 어떻게 구성되는지에 대해서 dreamhack.io라는 사이트를 통해서 공부해볼 수 있었다. 스터디 차원에서 공부한 것을 블로그에 정리해서 올리는 것을 과제로 내주셔서 복습도 할 겸 학습 노트를 작성하려고 한다.

Q. 웹 해킹에서 기본적으로 필요한 것은 무엇인가?

A. 웹 해킹을 하기 위해서는 기본적으로 웹에 대한 이해가 필요하다. 해킹이란 단어가 사회적으로 부정적인 의미를 포함하고 있기는 하지만, 기능적인 측면에서 이야기하면 기존의 기능과 다른 역할을 하게 하는 것이라고 볼 수 있다. 아인슈타인은 상대성이론을 발견한 인물로 알려져 있는데, 대학시절부터 물리학, 수학에 상당한 수준의 이해도가 있었다고 한다. 그가 물리학을 이해하는 수준이 뉴턴역학을 넘어서면서, 기존 법칙에서 허점을 발견해 상대성이론을 발견한 것은 기존 지식에 대한 이해가 있었기 때문이라고 볼 수 있다. 이처럼 웹 해킹에서 가장 중요한 것은 웹에 대한 이해라고 볼 수 있다.

-웹의 기초 지식-

  • Web Browser (웹 브라우저)

    웹에 접속하기 위해 사용하는 소프트웨어입니다.
    웹 브라우저는 HTTP를 통해 통신을 하며, 웹 리소스를 모르더라도, 가공해 사용자가 웹의 HTTP의 동작 원리를 모르더라도 사용할 수 있게 해줍니다(일종의 컴파일러(해석기)). 대표적인 예로, 지금 이 글을 작성하고 있는 Chrome 브라우저, 윈도우에 기본적으로 내장된 Edge 브라우저가 있습니다.
    웹을 이용하기 위해서는 웹브라우저 말고도 네트워크 프로그램, CLI 프로그램을 이용할 수 있습니다.

  • Web Resource

    웹 상에 존재하는 모든 콘텐츠를 의미합니다. (HTML, CSS, JS, PDF, PNG 등)

  • URI (URL(Uniform Resource Locator))

    웹 리소스를 가리키는 주소는 URI라고 합니다 URI는 Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자입니다. 초기 웹에서는 경로가 실제 서버 내에 존재하는 파일의 실제 위치와 동일한 경우가 많았으나, 최근 들어 웹 브라우저의 본래 목적인 추상화된 경로를 사용하고 있습니다.

    • URI는 Scheme, Authority(UserInfo,Host,Port), Path,Query, Fragment의 구성요소를 가집니다.

      EXAMPLE

      http://jparkdevblog.com/path?list=1#fragment 이라는 주소가 있다고 가정해봅시다(설명하기 위해 만든 가상의 주소입니다.)
      - http:// - 웹 브라우저가 어떤 통신 규약을 쓸지 지정합니다 이 경우에는 http 프로토콜을 쓰겠죠!
      - jparkdevblog.com - 웹 브라우저가 어디를 연결할지 정하는 호스트 주소입니다. 호스트에는 도메인이나 ip address가 들어갈 수 있습니다
      - /path - 웹 브라우저가 연결하고자 하는 리소스에 대한 경로입니다. 이 경로는 사이트에 따라 다른데 제가 작성하고 있는 이 velog 사이트를 보면,
      이 path 부분이 write로 바뀐 걸 볼 수 있습니다
      - ?list=1 - 웹 서버에 전달하는 추가적인 정보이고, 이는 ? 문자 뒤에 붙습니다.
      - #fragment - 웹 브라우저만 가지고 있는 데이터입니다! 주로 메인 리소스 외의 이차적인 리소스를 사용할 때 # 표시 뒤에 사용해줍니다.
  • HTTP (HyperText Transfer Protocol)

    인터넷 서비스에서는 서비스 대상 간 통신 규약(Protocol)(어떻게 데이터를 교환할지)을 지정하여 통신합니다. HTTP는웹을 이용하기 위한 통신 규약입니다.이 통신 규약은 URI의 Scheme 부분에 들어가게 됩니다. TCP혹은 TLS(암호화된 TCP)를 사용해 통신하고 기본 포트로 80(HTTP), 443(HTTPS)포트로 사용합니다. 여기서 HTTPS가 나와서 당황할 수도 있는데, HTTPS는 HTTP의 취약점을 보완하고, 핵심구조 및 동작 원리가 HTTP와 같기 때문에, HTTP로 통칭해서 표현하기도 합니다.

    • HTTP는 RequestResponse로 나뉘어집니다.
      Request 와 Response 모두 CRLF로 줄바꿈이 이루어져야 합니다.
      1. HTTP Request
        • 구성요소
          • Method
            • 서버에 요청시 수행하고자 하는 동작
            • 메소드에는 간단하게 설명하자면, GET, POST 말고도 OPTIONS, HEAD, PUT, PATCH, DELETE, TRACE 등이 있다.
          • Path
            • 사용자가 서버에 요청하는 웹 리소스의 경로
          • Version
            • HTTP의 버전을 나타낸다.
          • Header
            • 서버에 추가 정보를 전달하는 데이터 부분
            • 사용자가 입력한 데이터를 전달하기 위한 부분 X
            • 사용자가 서버가 상호작용하기 위해서 필요한 정보를 담는 부분 O
            • EX) 사용작 데이터의 처리 방식 및 형식에 대한 정보, 서버에서 사용자를 구별하기 위해서 사용하는 쿠키 정보
            • Header의 구성요소 -> HOST, Cookie, User-Agent
          • Body
            • 사용자가 입력한 데이터가 서버에 전달시 데이터를 담는 부분
          • Header과 데이터를 담는다는 공통점이 있지만, 구분이 확실하다.
      2. HTTP Response
      • 구성요소
        • Version
          • HTTP 버전을 나타냅니다
        • Status code
          • 사용자의 요청에 의한 서버의 처리 결과를 의미(숫자)
        • Header
          • 사용자와 상호작용하기 위해 담은 정보들을 담아둔다.
        • Body
          • 서버가 사용자에게 응답하는 데이터를 보관한다.
  • Cookie
    HTTP는 connectionless, stateless 프로토콜입니다. 쉽게 말하면, 연결 상태가 지속적이지 않고, 일시적이라는 것입니다. 이는 서버 부하를 막기 위해서 이런 프로토콜을 설계했는데, 치명적인 단점이 있었습니다. 매번 새로운 연결을 시도해야 했기에, 로그인을 했다면 인증을 하기 위해서 매번 연결할 때마다 인증을 해야 한다는 것입니다. 이를 해결하기 위해 쿠키라는 것이 등장했습니다. 웹 브라우저는 HTTP Response의 Set-Cookie Header나 Javascript document.cookie를 통해 데이터를 쿠키에 저장합니다. 데이터는 key = value; 꼴로 저장을 하고, ; 뒤에는 만료 시간을 지정해서 저장할 수 있습니다.
    로그인 할 때 쿠키를 어떻게 활용하는지 생각해보면, 서버는 로그인 시 쿠키를 사용자에게 전달하고, 매번 요청을 할 때마다 쿠키를 전송하면, 사용자임을 인증하여 로그인 상태를 유지할 수 있도록 합니다. 그런데 만약에 다른 사용자가 로그인을 하지 않았는데 동일한 쿠키 정보를 가지고 서버를 전송한다면, 기존 사용자는 로그인을 하지 않았는데 다른 사람이 로그인을 할 수 있는 상황이 벌어집니다. 이를 막기 위해서 아래 Session이라는 것이 등장하게 되었습니다.

  • Session
    위에서 설명하는 것을 막기 위해서, 서버에 저장하는 데이터인 Session이 등장하게 되었습니다. 세션은 필요한 정보를 랜덤 키를 이용해서 저장하고, 이를 세션 ID라고 부릅니다. 브라우저는 이 키를 쿠키에 value로 저장을 하고, 이후에 이를 이용해 HTTP요청을 보내면 value에 있는 값을 이용해 Session ID에 접근해, 데이터를 가져오게 됩니다.

  • Domain Name
    인터넷(웹) 네트워크상에서 컴퓨터를 식별하는 이름입니다. (e.g. www.naver.com은 네이버의 서버 컴퓨터를 식별하는 이름입니다.) 도메인 네임은 DNS에 도메인의 IP 주소를 요청해 등록된 IP 주소를 받아와 사용하게 됩니다.

  • Server
    서버는 인터넷상에서 사용자에게 서비스를 제공하는 컴퓨터입니다.
    그 중 웹 서버는 사용자의 HTTP 요청을 해석하여 처리한 후 응답하여 주는 역할을 합니다. 사용자로부터 받는 요청을 웹 서버 자체적으로 처리할지, 들어온 요청에 알맞은 내부 서비스로 연결할지를 정할 수 있습니다.

-웹 해킹의 개요-

해킹이란, 본래의 의도와는 다른 동작을 일으키거나 주어진 권한 이상의 정보를 접근하거나, 수정하거나, 추가하는 것을 의미합니다. 이러한 행동은, 의도에 따라 범죄로 이어지고 있어, 취약점을 연구하고 막는 방법을 연구해야 합니다.
웹 해킹의 방향은 두 가지가 존재합니다
1. Client-side Attack
서비스 사용자에 대한 공격을 의미합니다.
2. Server-side Attack
서비스를 운용하는 서버에 대한 공격을 의미합니다.
다양한 공격 형태가 존재하며, 공격자가 공격에 성공하게 되면 서버의 어플리케이션 코드 또는 다른 사용자의 정보 유출, 서버 탈취 등으로 이어질 수 있습니다

0개의 댓글