-
웹해킹 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