이번 1월달 기본 목표였던 web hacking에 대해 전반적인 이해를 하는 것이 목표였다.
이에 무작정 인터넷 조사를 해본 결과 dreamhack 이란 사이트가 꽤나 잘 맞을 것 같아 배우면서 느낀 것들을 정리 해볼까 한다.
우선 web hacking에 대해서는 기본적으로 인터넷 구조에 대해서 이해를 요한다.
html, css, js, python 등 다양한 언어에 대한 전반적인 이해를 바탕으로 해야 한다.
나는 이 부분에서는 그럭저럭 이해를 하고 있다고 굳게 믿었다.
작년 8월 혼자공부하는 python 책을 독학하였고, 이번 web해킹에 대해 본격적으로 공부하기 전
이번년도 학생회 이벤트에 사용할 웹 사이트를 하나 만들어 보았기에 이 정도면 뭐 괜찮겠지 하고 기고 만장한 상태로 시작하였다.
내가 가장 먼저 수강 한 것은 webhacking 로드맵 1번이다.
하지만 더 중요한 개념을 먼저 잡고 넘어가고자 최근에 들은 커리큘럼부터 차근차근 리뷰해 나가겠다.
Introducetion of Webhacking (dreamhack 강의)
1.웹이란 무엇인가?
단순히 이 분야를 공부하기 전에는 nav**, goog**등과 같은 사이트를 의미한다고 생각하였다.
웹 해킹을 포함한 다양한 분야에서 해킹은 본래의도와는 다른 행위를 발생시키는 것을 의미한다. 그런 의도치 않은 행위르 발생시키기 위해 설계 또는 운영의 약점을 찾을 수 있어야 한다. 이러한 과정을 취약점 분석이라고 한다.
이를 위해 설계자 또는 운영자보다 해당 시스템에 대한 더 높은 이해도를 가지고 있어야 한다.
웹의 정확한 어원은 월드 와이드 웹(World Wide Web)이지만, 간단하게 웹으로 부르는 경우가 많다. 웹의 사전적 의미인
거미줄과 같이 인터넷상에서 각각의 이용자가 연결되어 서로 정보를 공유한다는 의미에서 유래된다.
인터넷상의 서비스 중 HTTP를 이용해 정보를 공유하는 통신 서비스를 웹, 서비스를 제공하는 대상을 웹 서버, 서비스를 받는 사용자를 웹 클라이언트라고 부른다.
웹은 웹 브라우저라는 소프트 웨어의 등장과 발전으로 인해 대중적인 접근성이 높아지게 되었으며, 다양한 형태의 서비스가 가능하다는 점 때문에 전 세계적으로 가장 많이 사용되는 인터넷 서비스가 되었다.
인터넷 서비스 중 손쉽게 접근 가능하다는 점에서 단순히 웹 사이트에 접속하는 형태 외에도 모바일 서비스, IoT장보의 관리 페이지 등 다양한 형태로 일상 곳곳에서 사용 되고 있다.
초기 웹은 저장된 문서의 내용을 출력해 사용자에게 제공하는 간단한 서비스에서 파생되었으며, 시간이 지나며 사용자의 입력과 입력에 따른 기능 수행이 추가되며, 다양한 분야에서 사용할 수 있도록 발전되었다.
과거에는 오프라인에서 진행되엇거나 물리적으로 저장되었던 정보들이 웹에서 접근 가능한 디지털 정보로 바뀌었고, 개인정보 및 기업의 자산 등이 웹에서 접근 가능해짐에 다라 웹 보안의 중요성이 강조된다.
2.웹 기초 지식
사용자는 컴퓨터 내에 존재하는 웹 브라우저를 실행한 후 주소창에 접속하고자 하는 사이트 주소를 입력해 접속하게 되지만 실제 컴퓨어와 네트워크에서는 많은 과정이 수행된다.
기본 용어 정리
Web Browserr(웹 브라우저) | 웹에 접속하기 위해 사용되는 *소프트웨어이다. |
Web Resource | 웹 상에 존재하는 모든 콘텐츠이다. (html, css, js, pdf, png 등) |
URI(url) | Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자이다. |
HTTP(HyperText Transfer Protocol) | 인터넷 서비스에서는 서비스 대상 간 통신 규약을 지정하여 통신한다. HTTP는 웹을 이용하기 위한 통신 규약이다 |
HTTPS(HyperText Transfer Protocol) | 기존 HTTP 데이터를 암호화 하여 통신한다. |
Cookie | 웹 브라우저에 저장하는 데이터이다. |
Session | 서버에 저장하는 데이터 |
Domain Name | 웹 네트워크상에서 컴퓨터를 식별하는 이름이다. (ex, e.g. www.naver.com은 은 네이버의 서버 컴퓨터를 식별하는 이름이다.) |
Server | 서버는 이너넷상에서 사용자에게 서비스를 제공하는 컴퓨터이다. 그중 웹서버는 사용자와 HTTP를 이용하여 통신하는 서버이다. |
Application | 서버에서 설정한 특정 기능들을 수행하는 소프트웨어이다. |
DataBase(DB) | 데이터를 저장하기 위해 사용하는 데이터 저장소이다. |
*Software, 특정 목적을 수행하기 위한 컴퓨터 프로그램입니다.
(1)Web Browser
문서 편집을 위해 워드 프로세서 소프트웨어를 사용하고 데이터 분석, 경리 및 회계 등의 계산을 위해 스프레드 시트 소프트 웨어를 사용한다. 웹 브라우저는 HTTP를 통해 인터넷 상에서 통신을 하며 서버로부터 전달받은 다양한 웹 리소스들을 가공해 사용자가 웹과 HTTP의 동작 원리를 알지 못하더라도 웹을 사용할 수 있게 해주는 소프트 웨어이다.
대중적으로 많이 사용되는 웹 브라우저는 Chrome, Edge, Safari 등이 있다. 각 브라우저들이 수행하는 기본적인 기능은 동일하지만 HTML/CSS/Js 해석 및 실행을 바르게 하거나 내장 로그인을 통해 브라우저를 사용하는 모든 디바이스 동기화 기능 등에 차별화를 더 사용자들이 자사의 브라우저를 사용하게끔 많은 노력을 하고 있다.
HTTP의 원리와 동작 방식을 몰라도 웹 브라우저를 통해 웹을 불편함 없이 이용할 수 있다. 다만 모든 취약점은 사용자의 입력 값에서부터 발생한다. 사용자의 입력 값은 웹 브라우저를 통해 전송되기 때문에 웹 해킹을 공부하기 위해 브라우저가 하는 행위를 필수적으로 이해하고 있어야 한다.
-네트워크 프로그램 : nc 또는 telnet가 같은 네트워크 프로그램을 통해 웹을 사용하기 위해서는 웹 서버가 이해하고 해석할 수 있는 형태의 데이터가 직접 작성하여 전송하여야 한다.
-CLI 프로그램 : curl, wget 같은 CLI 프로그램을 통해 웹을 사용하게 되면 서버가 응답하여 주는 데이터를 단순 출력하게 한다. 즉 html을 해석하여 화면에 출력하는 기능, css로 스타일을 입혖는 기능, 자바스크립트를 실행하는 기능을 포함하지 않는다.
-웹 브라우저 : 먼저 웹 브라우저에서 웹을 사용하기 이ㅜ해서는 주소창에 접속하고자 하는 주소를 입력한다. 웹 브라우저는 사용자가 요청한 주소를 대신 접속해 서버에서 응답한 데이터를 해석한 후 화면에 출력한다.
(2) Web Resource
웹 리소스는 웹에서 사용하는 콘텐츠를 의미한다. 웹 브라우저의 주소창에 https://junior-faust.tistory.com/+alpha를 입력하게 되면 https://junior-faust.tistory.com/ 에 존재하는 +alpha 리소스에 대해 요청을 수행하는 것을 의미한다.
웹 리소스를 가리키는 주소는 URL이라고 한다. 초기 웹에서는 경로가 실제 서버 내에 존재하는 파일의 실제 위치와 동일한 경우가 많았으나 최근 들어 웹 브라우저의 본래 목적인 추상화된 경로를 사용하고 있다.
*추상화란 소프트웨어에서 구현의 세부 사항을 숨기거나 실제 작동 방식과 다르게 보이도록 하는 것이다.
사용자가 웹 브라우저를 통해 보게 되는 페이지를 구성하는 대표적인 웹 리소스들을 아래와 같다.
- HTML(Hyper Text Markup Language): -웹 문서의 뼈대를 구축하기 위한 마크업 언어이다. 정해진 태그와 속성을 지정해 문서를 구성한다.
- CSS(Cascading Style Sheets): -HTML이 표시되는 방법을 정의하는 스타일 시트 언어이다. 이미지, 태그, 글자 등 다양한 웹 리소스들의 출력시 스 타일을 설정한다.
- JS(JavaScript): -HTML과 CSS는 화면에 출력되는 뼈대를 그리는 것이며, JS와 같은 Client Side Script를 이용해 페이지 내에어스이 행위들을 설정할 수 있따.
- ETC (문서 , 이미지, 동영상, 폰트 등)
(3)URI (URL)
URI는 Uniform Resource Identifier 의 약자로 리소스를 식별하기 위한 식별자이다. 우리에게 좀 더 친숙한 용어인 URL은 리소스의 위치를 식별하기 위한 URI의 하위 개념이다.
URI는 Schme, Authrity (Userinfo, Host, Port), Path, Query, Fragment의 구성요소를 지닌다.
Ex) foo: // example.com:8042/over/there?name=ferret#nose라는 URI가 있다면
Scheme = foo
-웹 서버에 접속할 때 어떤 체계를 이용할지에 대한 정보를 담고 있다. 즉 어떤 통신규약(프로토콜)을 사용할지 정한다. 보통 http/https를 사용한다. 이외에도 mailto, tel 을 통해 메일클라이언트나 연락처 프로그램을 열기도 한다.
Host = example~
-Authority의 일부로써 접속할 웹 서버의 호스트(서버 주소)에 대한 정보를 가지고 있다. 웹 브라우저가 어디에 연결하지 정하는 호스트 주소이다. 도메인이나 IP, Address가 호스트로써 사용가능하다.
-Port : Authority의 일부로써 접속할 웹 서버의 포트에 대한 정보를 가지고 있다.
Path= over/there
-접속할 웹 서버의 (리소스) 경로에 대한 정보를 가지고 있으며 / 문자로 구분된다.
Query = ?name=ferret
-웹 서버에 전달하는 파라미터(추가적인 정보)이며 URI에서 ?문자 뒤에 붙는다
Fragma= #nose
- 웹 브라우저만 가지고 있는 데이터 이다. 메인 리소스 내에 존재하는 서브 리소스에 접근할 떄 이를 식별하기 위한 정보를 담고 있으며 #문자 뒤에 붙는다 .
(4) Encoding
인코딩은 문자 또는 기호 등의 정보, 형태를 표준화, 보안 등의 목적으로 다른 형태나 형식으로 변환하는 처리 혹은 그 처리 방식을 말한다. 이렇게 변환된 형태를 원래 형태로 변경하는 것을 Decoding(디코딩)이라고 한다.
웨베서 사용하는 대표적인 인코딩은 URL과 HTML Entity가 있다.
●Encoding (인코딩): 알고리즘이 모두 공개되어 있고 키와 같은 요소가 포함되어 있지 않아서 모두가 원래의 정보로 복원이 가능합니다.
●Encryption (인크립션): 양방향 암호 알고리즘입니다. 일치한 알고리즘과 유효한 키를 가지고 있다면 원래의 정보로 복원이 가능합니다.
●URL Encoding(percent encoding)
URI 구조 내에서 예약어(구분자)로 사용되는 문자들을 전송하고자 할 때 사용한다. 예약어는 URI 구조 내에서 문법적으로 중요한 의미를 가지고 있기 때문에 문법적으로 사용하지 않을 경우에는 반드시 인코딩해 사용해야 한다.
Ex) GET 메소드로 a=?b, c=&d의 데이터를 보내기 위해서는 http://example.com/?a=3%fb&c=%26d의 의 형태로 전송되어야 서버에서도 정상적으로 해석하여 처리할 수 있다.
인코딩 방식으로 입력된 문자를 Ascii 테이블에 매칭되는 Hex 값 앞에 %문자를 붙이면 된다.
문자 | url 인코딩 |
? | %3F |
# | %23 |
& | %26 |
= | %3D |
●HTML entity Encoding
HTML 문서 내에서 사용하는 문자열들이 HTML에서 사용하는 태그로 인식하지 않도록 하기 위해 사용한다.
인코딩 방식은 입력된 문자를 ascii테이블에서 매칭되는 Hex값 앞에 &#x를 붙이거나, 주요한 문자들에 대해서 지정되어 있는 entity name을 사용하여 인코딩할 수 있다.
문자 | entity name encoding | entity numbeer encoding |
& | & | & |
> | < | < |
> | > | > |
(5)HTTP
웹 브라우저를 사용할 때 주소창에서 HTTP 또는 HTTPs라는 글자를 볼 수 있따. 예를 들어 웹 브라우저로 나의 tistoty 사이트에 접속하면 주소창에 https://junior-faust.tistory.com가 가 이렵되어 있는 것을 볼 수 있다.
HTTP 또는 HTTPS는 URI의 구성요소 중 Scheme (protocol)에 해당한다. Protocol은 컴퓨터 내부 혹은 컴퓨터 사이에서 어떻게 데이터를 교환할지를 정의 하는 규칙 체계이다. 즉, 나의 Tistroy 사이트는 HTTPS 방식으로 서버와 통신한다는 것을 의미한다.
HTTP, HTTPS는 웹에서 이루어지는 통신을 정의한 프로토콜이다. *TCP(transmission Control Protocol) 혹은 TLS(암호화된 TCP)를 사용해 통신하고 기본 포트로 80(HTTP), 443(HTTPS) 포트를 사용한다.
*TCP: 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 통신규약을 의미한다.
-포트 번호는 서버의 설정을 통해 변경 가능하다. 무조건 서버의 포트 번호가 80, 443으로 서비스 되는 것은 아니다. 예를 들어 웹 서버 중 많이 사용되고 있는 톰캣 서버의 기본 포트번호는 8080이다.
HTTPS는 HTTP의 문제점인 데이터의 평문 전송을 보완하기 위해 등장하였다 하지만 HTTP와 HTTPS의 핵심 구조 및 동작원리는 동일하기에 HTTP로 통칭하기도 한다.
HTTP는 사용자가 서버에 요청을 하는 Request와 사용자의 요청에 대한 서버의 응답인 Response로 나뉘어 진다
●HTTP Request
서버에 대한 요청을 의밓나다. 사용자와 서버가 서로 통신하기 위해서는 서로가 이해할 수 있는 데이터 구조를 전달해야 한다.
HTTP의 구조에서 각각의 줄은 *CRLF로 줄 바꿈이 이루어져야 한다.
*Carrage Return (CR) Line Feed(LF): 커서를 현재 행의 맨 좌측과 수직 아래로 이동시키는 문자열이다. 즉, 줄 바꿈을 의미한다. hex코드로는 0x0d, 0x0a이며, 아스키 코드에서 표현 방식은 "\r\n"이다.
HTTP Request 구조 중 가장 첫번쨰 줄에는 사용자가 서버에 요청 시 수행하고자 하는 동작인 Method, 요청하는 웹 리소스의 경로인 Path, 사용하는 HTTP의 버전을 나타내는 Version으로 구성된다.
두 번째 줄 부터는 Header 부분이다. header는 {이름:값} 형태로 이루어진다. Header는 상황에 따라 많은 데이터를 포함할 수 있기 때문에 Header 부분의 끝을 표시하기 위해 CRLF을 한 번 더 출력한다.
마지막으로 사용자의 데이터를 담는 부분인 Body가 있다.
-Method : 메소드들은 각각의 목적을 두고 설계되었지만, 서버에서 설정하는 방식이나 웹 어플리케이션의 처리에 따라 수행하는 방식이 다르게 사용될 수 있다.
method | 개념 |
OPTION | 요청하는 리소스가 허용하는 메소드 목록을 반환한다 예를 들어 /login 페이지가 OPTIONS, GET, POST 메소드만 허용하는 경우 OPTIONS, GET , POST가 반환된다 |
HEAD | GET 메소드와 동일하지만 Response의 Body 부분은 받지 않고, Header만 받습니다.(e.g. 서버의 상태 확인 등) |
GET | 리소스 요청 (e.g. 게시물/프로필 보기, 이미지 등) |
POST | 특정 리소스 생성 및 데이터 추가를 위해 값을 제출할 때 사용합니다. (e.g. 게시물/ 프로필 생성 등) |
PUT | 특정 리소스 내용을 보낸 값으로 설정한다. (e.g. 생성/업데이트) |
Patch | 특정 리소스의 내용 중 보낸 값의 key만 변경 (e.g. 게시글 업데이트 등) |
DELETE | 특정 리소스를 삭제한다. (e.g. 게시물 삭제 등) |
TRACE | 요청받은 값을 RESPONSE의 Body로 다시 클라이언트에게 되돌려 준다. |
-HEADER : https://developer.mozilla.org/ko/doce/Web/HTTP/Headers
●HTTP Response
사용자의 요청에 대한 서버의 응답을 의미한다. Response의 구조도 Request의 구조와 마찬가지로 각 줄은 CRLF로 줄 바꿈이 이루어져 야 함.
가장 첫 번째 줄에는 Version과 사용자의 요청에 대한 서버의 상태 응답 코드인 Status code로 구성된다.
웹 해킹에서는 사용자의 입력에 의한 서버의 응답에 주목한다. 예를 들어 악의적인 입력을 보냈을 떄 500 Status code를 응답하면 해당 입력이 서버에 어떠한 영향을 끼쳤다고 짐작할 수 있고 취약점으로 도출 해낼 수 있다.
-Status Code
1. 200번 영역
-사용자의 요청에 대한 서버의 처리가 성공하였음을 나타낸다.
-200 OK
-201 Created
2. 300번 영역
-사용자가 요청한 리소스가 다른 경로로 변경된 경우를 나타내는 영역이다. 웹브라우저에서 300번 영역의 응답 상태 코드가 반환되면 Response Header에 포함되어 있는 Location 헤어틔 값으로 리다이렉션 한다.
-301 Moved Permanently
-302 Found
3. 400번 영역
-사용자가 서버에 요청하는 구조 또는 데이터가 잘못되었음을 나타내는 영역이다.
-400 Bad Request : 사용자가 전달한 데이터 또는 구조의 잘못된 문법으로 인해 서버가 요청을 이해할 수 없음
-403 Forbidden : 사용자가 해당 웹 리소스에 접근할 권리를 가지고 있지 않음을 의미
-404 Not Found: 사용자가 요청한 웹 리소스의 경로에 대해 응답할 데이터가 없음을 의미
-405 Method Not Allowsd : 사용자가 요청한 Method 가 서버에서는 허용되지 않는 Method 임을 나타낸다.
4.500번 영역
-서버의 에러와 관련된 영역
-500 Internal Server Error : 서버의 에러가 발생하였음을 의미
-503 Service Unacailable : 서버가 사용자의 요청을 처리할 준비가 되지 않았음을 나타낸다
(6)cookies
HTTP는 하나의 Request와 Response의 쌍이 독립적으로 구성되어 통신하는 conneciotnless, stateless프로토콜이다.
connectionless의 속성은 하나의 요청에 하나의 응답을 한 후 네트워크 연결을 끝맺는 것을 의미한다. 불특정 다수의 사용자에게 서비스 되어야 하는 웹의 특성상 계속해서 연결상태를 유지하는 것은 서버 부하로 이어질 가능성이 있어 connectionless를 갖게 되었다.
과거에는 네트워크, 서버 등의 부하로 인해 connetionless 속성이 강조되었지만 최근 네트워크, 서버 등의 성능 향상으로 HTTP/1.1부터 Kepp-Alive를 통해 일정시간 동안 사용자와 서버가 계속 연결을 맺고 있는 방식을 사용한다.
stateless 속성은 네트워크가 연결을 끝맺을 때 상태를 유지하지 않는 것을 의미한다. HTTP 요청마다 새로운 커넷견을 열기 때문에 사용자 인증을 계속해서 해야 한다는 단점이 있다. 이러한 단점 보안을 위해 Cookie가 탄생한다.
웹 브라우저는 HTTP Response의 Set-Cookie Header나 Javascript doument.cookie를 통해 데이터를 쿠키에 저장한다.
데이터를 key=value; 쌍으로 쿠키에 저장하고 ; 뒤에 쿠키의 만료시간, 접근할 수 있는 도메인 등 추가 옵션을 설정할 수 있다. 추후 HTTP 요청을 보낼 떄 웹 브라우저가 자동으로 헤더에 쿠키를 추가해 전송한다.
쿠키는 인증상태를 포함 할 수 있다. value에 guest를 넣어 전송하면 브라우저는 Cookie: id=guest; 를 서버에 보내고 서버는 해당 정보를 통해 인증된 사용자의 정보를 응답한다. value 값을 변경하면서 어떠한 응답 값을 반환하는지 확인한다.
쿠키는 사용자의 브라우저에 저장된다.
(7)Session
쿠키에 인증상태를 포함한 데이터를 저장하면 사용자가 임의 사용자로 인증된 것 처럼 요청을 조작할 수 있따. 따라서 서버에 데이터를 저장하기 위해 Session을 사용한다.
세션을 활용하면 데이터를 서버에 저장하고 해당 데이터에 접근할 수 있는 유추할 수 없는 랜덤한 문자열 키를 만들어 응답하며, 이를 보통 session ID라고 부른다. 브라우저는 해당 키를 쿠키에 저장하고 이후에 HTTP 요청을 보내면 서버에서 키에 해당하는 데이터를 가져와 인증상태를 확인한다.
쿠기는 데이터 자체를 사용자가 저장하며, 세션은 서버가 저장한다는 핵심적인 차이가 있다.
서버가 쿠키값만 믿고 사용자에게 원하는 데이터를 보여준다면, 악의적인 사용자에게 Cookie 값이 유출 될 시 악의적으로 이용될 가능성이 크다. Session은 랜덤한 문자열이기에 그 값을 파악하기 힘들고, 사용자의 cookie와 서버의 session값이일치해야 원하는 데이터를 제공하는 즉 이중 인증 장치라고 보여지기에 더 보안성이 강화된다.
(8)HTTP/HTTPS
웹은 업무, 은행, 쇼핑 등 다양한 분야에서 사용되고 있고 웹 서비스와 통신하는 요청과 응답에 개인정보 및 기업의 자산 등 민감한 정보들이 포함 될 수 있다.
HTTP는 모든 데이터를 암호화 되지 않은 평문으로 전송한다. 네트워크에서 전송된 데이터를 감청할 수 있다면 HTTP로 통신하는 데이터는 평문으로 노출되고 웹에서 민감한 정보를 다룰 때 문제가 될 수 있다.
HTTP는 네트워크 상에서 평문으로 통신을 하며 상위 네트워크 장비, 같은 네트워크 상의 *MITM 공격등에 의해 통신이 노출 될 경우 평문 정보를 그대로 출력하기에 민감한 정보가 노출되며 심각한 위험을 초래한다
*Man in te middle attack: 통신을 하는 두 컴퓨터 사이에 중간자가 침입해 통신 내용을 조작하거나 도청하는 공격기법
HTTPS는 Transport Layer Security(TLS), Secure Sockets Layer(SSL)을 사용해 암호화 한다. 공개키 암호화를 사용해 클라이언트와 서버가 키를 교환하기 때문에 비교적 안전하다. 이는 네트워크상에서 데이터들이 암호화되어 전달되기 때문에 일반적으로 어떤 내뇽의 통신을 하는지 알 수 없게 된다.
(9)Domain Name/Host Name
URI 구성 요소 중 Host는 웹 브라우저가 어디에 연결할지 정하게 된다.
DomainName이나 Internet Protocol(IP) Address가 Host에 사용된다.
e.g http://example.com/path1?serch=1#ragment => Host:example.com
IP Adress는 네트워크 상에서 통신이 이루어질 때 장치를 식별하기 위해 사용되는 주소이다. 불규칙한 숫자로 이루어진 IP Adress를 사람이 외우기 쉽고, 의므를 부여하기 위해 Domain Name을 사용한다.
Domain Name을 이용해 Host를 조회할 떄 Domain Name과 IP Adress 정보를 매핑해 저장하는 Domain name server(DNS)에서 조회해 등록된 IP Address를 가져와 사용한다. 웹브라우저에서 http://example.com/ 주소로 접속할 경우 DNS에서 exmaple.com(Domain Name)이 IP와 통신한다.
*nslookup 명령어를 사용해 Domain Name의 정보를 확인 할 수 있다.
*nslookup:DNS에 쿼리하는 프로그램
(10) 웹 서버 어플리케이션 -1
1.WebServer
웹 서버는 사용자의 HTTP 요청을 해석해 처리한 후 응답하여 주는 역할을 한다.
대표적으로 nginx, Apache, Tomcat, IIS 등이 있다.
웹 서버는 사용자로부터 받는 요청을 웹 서버 자체적을 처리할지 들어올 요청에 알맞은 내부 서비스로 연결할지를 정할 수 있다. 예를 들어 클라이언트가 접근한 URI가 .html 확장자를 가진 리소스라면 웹 서버에서 해당 경로의 html을 반환해주고, . php 확장자를 가진 리소스라면 php 엔진을 통해 해당 요청을 처리한다. 또한 /payment/ 경로로 시작하는 요청에 대해서는 payment 를 처리하기 위한 어플리케이션에 요청을 연결해주는 역할을 수행하는 것이 가능하다.
2.Web Application
웹 어플리케이션은 사용자의 요청을 동적으로 처리할 수 있도록 만들어진 어플리케이션이다.
웹 어플리케이션을 작성할 때는 사용자가 요청한 내용을 동적으로 처리하기 위해 Web Application Language가 사용되며 대표적으로 PHP, NodeJS, Python, Java 등이 존재한다 .
이 외에도 굉장히 많은 언어가 존재하며 Python의 django와 flask, Java의 sprint처럼 웹 개발을 편하게 해주는 프레임워크도 많이 존재한다.
또한 웹 어플리케이션은 서버에서 동작하기 때문에 웹 어플리케이션 구현체에서 취약점이 발생하ㅔ 되면 서버에 직접적인 영향을 미친다
(11)웹 서버 어플리케이션 -2
DataBase Management System
DataBase Management System(DBMS)은 데이터베이스 내의 데이터 조회/ 수정/ 삽입을 용이하게 할 수 있도록 도와주는 서버 어플리케이션입니다. MySQL, MS-SQL 등을 DBMS라 하며 해당 어플리ㅔ이션들이 관리하는 데이터를 데이터베이스라고 한다. 데이터 베이스에는 사용자의 인증, 상품, 문서 등 중요한 개인 정보가 포함된 여러가지 내용이 존재하기 때문에 보안에 각별히 신경쓸것을 요한다.
프로그래머는 데이터 베이스 내용을 조회/ 수정/ 삽입하기 위해 DBMS을 사용한다. DBMS은 SQl Query를 통해 제어하는데, 이 때 사용자의 입력값을 SQL Query에 필터링 없이 사용하게 되면 SQL Injuection 공격에 노출되게 된다.
3.웹 해킹 개요
웹 해킹은 해킹의 의미처럼 본래의 의도와 다른 동작을 일으키거나 주어진 권한 이상으로 정보를 열람, 복제, 벼경 가능한 행위가 웹에서 발생하는 것을 말한다.
기업의 업무, 금융, 쇼핑 등 다양한 분야를 웹으로 서비스하며 제공하는 서비스의 복잡도와 다양성이 증가하게 되었는데, 이로 인해 서버와 어플리케이션에서 처리하는 사용자의 입력 역시 다양해졌고 기능 구현의 복잡도로 인해 개발 당시에는 의도치 않았던 동작을 일으킬 수 있는 웹 해킹의 위협도 따라서 증가하게 된다.
기업에서 사용하는 웹에는 기어브이 내부 자료, 직원 정보 등이 있고 금융/쇼핑 분야는 사용자들의 개인정보, 금융 정보 등 서비스 형태에 따라 수많은 정ㅂ가 엡에 포함되어 있으며 공격자는 가치 있는 정보를 획득하기 위해 휍 해킹을 시도하고 있다.
또한 많은 기업들이 자산을 보호하기 위해 많은 서비스와 네트워크를 내부망으로 사용하지만, 기업의 대표 사이트 또는 제품 등과 같이 웹을 통해 서비스를 운영하는 경우가 많다. 이런 웹서비스 들은 내부망과 연결되어 있을 가능성이 높아 공격자들이 내부망 침투를 위해 가장 먼저 웹을 공격하기도 한다.
따라서 웹에서 발생할 수 있는 취약점에 대해 익히고 방어 대책을 연구하여 사전에 대응할 수 있는 역량을 키우는 것이 대두되고 있다.
(1)웹 해킹 공격 백터
웹 사이트 접속시, 사용자의 입력을 받고 웹 사이트와 통신을 하는 Client-side, 사용자의 입력을 처리하는 Sever-side로 크게 두가지 나뉜다.
웹 해킹을 할 때에도 Client-side, Server-side로 공격 대상을 나누어 볼 수 있따. 공격 대상에 따라 공격하는 방식, 형태가 달라지며 공격을 통해 가능한 행위가 달라진다.
(2)Client-Side Attack
서비스 사용자에 대한 공격을 의미한다
웹을 이용하는 사용자는 웹 브라우저를 통해 서비스를 제공받는데 웹 서버가 제공해주는 데이터가 공격자에 의해 변조되었을 경우 웹 브라우저에서 렌더 되는 과정에서 취약점이 발생하는 경우가 대표적이다.
예를 들어 게시판 서비스의 경우 사용자의 입력을 특별한 검증없이 출력하게 되면 사용자의 입력도 html 처럼 취급되며 스크립토 또한 삽입할 수 있다. 공격자는 이를 악용해 다른 사용자의 웹 브라우저에 원하는 행위를 수행할 수 있다.
(3) Server-Side Attack
서비스를 운용하는 서버에 대한 공격을 의미한다.
다양한 공격 형태가 존재하며, 공격자가 공격에 성공할 시 서버의 어플리케이션 코드 또는 다른 사용자의 정보 유출, 서버 탈취등으로 이어질 수 있다. 운영되는 서비스의 구조와 특징에 따라 위협의 형태가 달라진다.
또한 서비스이ㅡ 형태에 따라 가지게 되는 특별한 공격방법이 존재할 수도 있다. 예를 들어 송금 기능을 지원하는 서비스에서 자신이 가진 금액보다 더 큰 금액으로 요청하게 될 때 특별한 검증 절차 없이 기능이 수행된다면 공격자는 금전적인 이득을 취할 수 있게 된다.
REVIEW
나는 이 커리큘럼을 로드맵 webhacking1 이 거의 끝나갈 때 즈음에 듣게 되었다.
혹여나 나와 같은 상황에 공부를 시작하려 하시는 분이 있다면, 이 커리큘럼을 먼저 듣고 로드맵으로 나아가는 것이 더 효율 적일 것 같다
우선 Html, css, js를 조금 만져본 입장에서는 강의 내용이 이해하기 어려울 정도는 아니었으며 일반 대학교 기준의 교양 수준으로써 이해하는데 별 다른 어려움은 없었다.
강의에서 제공하는 여러가지 tool 또한 몇가지 장난을 쳐보기도 꽤나 유용했다.
오늘 이렇게 다시한번 더 정리하면서 까먹고 있던 개념이 몇개 보이기도 하였으며, 로드맵 1을 수행하면서 이건 뭐지 싶었떤 개념들이 어떻게 동작을 하는지 알 수 있게 해줘 이 강의 만큼은 꼭 심도 있게 보고 넘어가는 것을 추천한다.
<----인간은 추구하는 한 방황하는 법이다----> (신, 317)
'IT > 웹해킹' 카테고리의 다른 글
SQL injection -4 (2) | 2023.01.25 |
---|---|
SQL Injection -3 (0) | 2023.01.24 |
SQL injection-2 (0) | 2023.01.24 |
SQL injuection -1 (0) | 2023.01.24 |
무작정 웹해킹 공부해보기 (0) | 2023.01.10 |