1. URL (Uniform Resource Locator)
- 파일에 대한 인터넷 상의 고유 주소
- 프로토콜, 웹 서버, 경로, 파일 이름, 쿼리로 이루어짐
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument
① 프로토콜 : 브라우저가 어떤 프로토콜을 사용해야 하는 지 알려주며, 웹에서 페이지나 파일에 접근할 때
사용되는 메소드 (HTTP 메소드 안에 또 다른 메소드들 존재)
② 웹 서버 : 어떤 웹 서버가 요구되는 지 알려주며, 연결할 파일이 위치한 서버
IP adress를사용할 수도 있음
③ port : 웹 서버에서 자원을 접근하기 위해 사용되는 입구이며, ‘:’로 포트번호 구분은
표준 HTTP 포트 (HTTP는 80, HTTPS는 443) 를 사용하는 경우는 생략 가능!
④ 경로(PATH) : 웹 서버에서 자원에 대한 경로이며, 연결할 파일이 들어 있는 폴더 디렉토리
여러 개의 폴더들은 ‘/’ 로 구분하며, 요즘에는 물리적 주소가 아닌 웹서버에서 추상화해서 보여줌
+ 파일 이름 : 연결되어 보여줄 파일(페이지)의 실제 이름
⑤ 쿼리 : 웹 서버에 제공하는 추가 파라미터이며, 키/값으로 짝을 이룸 (URL에 전달할 문자열 지정)
경로 뒤 ‘?’ 이후 쿼리 세그먼트들로 구성되고, 여러 개의 쿼리 세그먼트는 ‘&’ 로 구분
⑥ Anchor : 자원 자체의 다른 부분에 대한 anchor이며, 브라우저에게 방향을 알려주는 역할
ex) #bottom이면 밑부터. #chapter11이면 chapter11부터 보여줌
2. HTML (HyperText Markup Language)
- 웹페이지를 기술하기 위한 언어
- 웹의 마크업 언어이며, 웹페이지의 내용과 구조를 담당
- HTML 태그를 통해 정보를 구조화
- HTML은 로직을 이용한 작업 (마우스 클릭, 입력, 조건문 등) 이 불가능하므로 동적인 웹 서비스를 위해 스크립트 언어
사용
* SSS ⊃ HTML ⊃ CSS
: SSS 언어 안에 HTML이 코딩되어 있으며, 사용자가 서버에 접속하면 HTML을 보내주고, 사용자는 HTML을 받아
웹 서비스를 이용. CSS는 HTML내에 포함됨
3. SSS (Server Side Script)
- CSS에서 받아온 정보 처리 후 DB에 저장하거나 삭제 등의 기능
- ASP, JSP, PHP와 같은 동적인 페이지를 제공하는 스크립트
언어 | 서버 | DBMS | |
Windows | ASP | IIS | MSSQL |
JAVA | JSP | TomCat | Oracle |
오픈소스 | PHP | Apach | MYSQL |
- 처리 과정
① 서버 스크립트가 포함된 페이지 코드 작성
② 클라이언트가 웹 페이지 요청
③ 웹 서버가 페이지 파일 검색
④ 웹 서버가 스크립트 엔진에 요청하여 스크립트와 일반HTML을 처리
⑤ HTML 스트림이 브라우저에 반환
⑥ 브라우저가 HTML을 처리
4. CSS (Client Side Script)
- 클라이언트의 웹 브라우저에 의해 해석되고 적용됨
- 서버에서 클라이언트가 요청하면 서버가 CSS로 만들어진 스크립트를 보내줌
- HTML, JavaScript, VisualBasic Script, Jscript (대부분 자바스크립트)
- 처리 과정
① 클라이언트 스크립트가 포함된 페이지 코드(HTML) 작성
② 클라이언트가 웹페이지 요청
③ 웹 서버가 페이지 파일 검색
④ HTML 스트림이 브라우저에 반환
⑤ 브라우저가 클라이언트 쪽 스크립트를 처리
⑥ 브라우저가HTML을 처리
* CSS와 SSS를 구분하는 이유
- CSS에서는 소스보기를 통해 소스가 공개되므로, 로그인과 같이 보안상의 취약점이 될 부분은 SSS를 사용
- CSS도 DB 연동이 되면, 사용자도 DB 접근이 가능해 취약점이 발생하므로, SSS에서만 DB와 연동이 가능해야 함
- 마우스 우 클릭 금지, 복사 방지 등과 같은 사용자 이벤트는 CSS에서만 관리함
- 서버와 연동시키지 않아도 될 작업을 CSS에서 하므로, 서버의 불필요한 트래픽 발생이 감소
5. HTTP (Hyper Text Transfer Protocol)
- 하이퍼 텍스트 트랜스터 프로토콜 : 웹을 구현하기 위한 네트워크 프로토콜
- http://www.naver.com에서 http:// 가 HTTP 프로토콜을 사용한다는 뜻 (기본 포트 80번)
- https://는 HTTPS로 접속한다는 뜻 (기본적으로 443번 포트 사용)
- 요청과 응답 두 가지로 구성
- 요청 : 클라이언트 영역에서 서버 영역으로 HTTP 요청을 전송
- 응답 : 웹 서버가 해당 요청을 처리한 후 HTTP 응답을 통해 결과 반환
요청 메시지
-메소드, 요청 URI, 버전이 표시됨
-둘째 줄부터 빈 줄까지 여러 개의 헤더로 구성됨
-바디를 통해 데이터가 전송됨
① 메소드(Method)
- 서버에게 어떤 명령을 실행할지 알려주는 역할
HTTP 메소드 | 설명 |
GET | 지정된 리소스 요청 |
POST | 클라이언트 데이터를 서버에 전달 |
PUT | 지정된 리소스에 데이터 저장 |
DELETE | 지정된 리소스 삭제 |
HEAD | 지정된 리소스의 응답 헤더만 요청 : 데이터는 전송 안되므로 데이터의 길이 확인하는 용도 |
OPTIONS | 지원되는 메소드 표시 |
② 요청 URI
- 특정 리소스의 위치를 표기
- 프로토콜과 호스트명을 모두 포함하여 표기한 완전한 URI 또는 상대적인 경로만 표시 가능
Ex) http://www.host.com/index.html - 완전한 URI
/index.html – 상대적 경로
- ? : 파라미터를 전달하는 경우 사용
/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit
- ‘?’ 뒷 부분을 쿼리스트링이라고 하며, 파라미터=값의 형태로 파라미터 전달
- & : 여러 개의 파라미터를 전달하는 경우 사용
③ 버전 (ex. HTTP/1.1)
- 요청 메시지가 사용하고 있는 HTTP 버전 표기
- 클라이언트와 서버가 프로토콜 버전 서로 확인 가능
④ 요청 헤더 (Header)
- 리스트의 형태로 여러 개 전송 가능
- 기본 형태 = 헤더이름 : 헤더 값
Host
서버의 도메인 이름과 포트 명시. 일반적으로 웹 서비스에서는 80번 포트 의미
Host.com:port(예. 192.618.56.106:433)
User-Agent
클라이언트 소프트웨어를 식별할 수 있는 헤더
User-Agent 헤더에 따라 서버의 동작이 달라지는 경우, User-Agent를 조작하는 것을 ‘유저 에이전트 스푸핑’ 이라고 함
Accept, Accept-Language, Accept-Encoding
Accept 헤더는 어떤 contents 타입을 처리할 수 있는지 서버에게 알려주며, 서버에서는 이 헤더에 지정된 타입 중에서 하나를 정하여 응답
Accept-Language 헤더는 클라이언트가 어떤 언어를 처리할 수 있는지, Accpet-Encoding 헤더는 클라이언트가 처리할 수 있는 인코딩 방식이나 압출 알고리즘 정보 알려줌
Referer
이전 웹 페이지의 주소를 알려줌. 링크를 제공한 페이지의 주소이며, 요청이 웹사이트 내부에서 요청된 것인지, 외부에서 요청된 것인지 알 수 있음
Content-Type, Content-Length
Content-Type은 바디가 존재하는 경우, 바디의 종류와 길이 알려줌
(application/x-www-form-urlencoded, multipart/form-data, application/json, text/xml 등)
Content-Length는 바디 전체 길이를 알려줌
Cookie
밑에서 설명!
⑤ 바디
- 데이터가 전송되는 부분
- Content-Type에 따라 형태 달라짐
응답 메시지
① 버전 (ex. HTTP/1.1)
- 응답 메시지의 HTTP 버전 알려줌
② 응답 코드/응답 코드 텍스트
- 숫자와 텍스트로 표시됨
- 숫자는 스테이터시 코드 (status code) 또는 응답 코드라고 하며,
요청이 성공된 것을 알려주거나, 에러가 발생하면 에러 종류 알려줌
- 텍스트는 사용자가 응답 코드를 좀 더 알아보기 쉽게 해줌
③ 응답 헤더
Server
웹 서버와 웹 프레임워크의 버전 등의 정보 알려줌
Set-Cookie
서버에서 클라이언트로 쿠키를 전달할 때 사용됨. 이렇게 전송 된 쿠키는 웹 브라우저에 저장되고, 정해진 유효기간 동안 이후 요청 메시지의 Cookie 헤더를 통해 다시 전송됨
Set-Cookie: <쿠키이름>=<쿠키값>;Expires=<날짜>; Path=<경로>; Security; HttpOnly
- Expires : 쿠키의 유효기간 설정
- Path : 쿠키를 전송할 리소스의 경로 지정
- Secure : HTTPS 프로토콜이 사용됨
- HttpOnly : 쿠키 값이 자바스크립트에 의해 접근되는 것 방지
X-Frame-Options
<frame>이나 <iframe> 등을 사용하여 웹 페이지가 출력되는 것 제어
X-Frame-Options:DENY
X-Frame-Options:SAMEORIGIN
- DENY : 어떠한 경우에도 프레임 내에서 웹 페이지를 표시하지 않도록
- SAMEORIGIN : 같은 도메인 안에서 요청된 웹 페이지만 프레임으로 표시
X-XSS-Protection
리플렉티드 크로스 사이트 스크립팅 공격이 탐지되었을 때, 웹 페이지가 로딩되는 것 막아줌
X-XSS-Protection: 1; mode-block
X-Content-Type-Options
MIME 스니핑 차단하기 위해 사용
Content-Type 헤더에 설정된 형식으로만 리소를 처리하게 됨
X-Content-Type-Options: nosniff
응답 메시지와 요청 메시지의 버전이 다를 경우에 오류가 생기는지 조사해봐야 할 것 같다..
6. Cookie와 Session
① Cookie
- 이전 상태를 저장하지 않는 (stateless : 페이지를 연결하고 나면 클라이언트와 서버 간의 통신이 끊김 -> 비연결적) 인
프로토콜인 HTTP를 보완
- 웹 사이트에 접속할 때 자동적으로 생성되는 임시 파일
- 변수와 값의 쌍으로 구성된 집합
- 여러 요청에 걸쳐 클라이언트에서 동일한 데이터를 전달할 필요가 있을 때 사용
- 4kb 이하의 파일용량
- 브라우저 종료해도 사용자의 HDD에 저장됨
ex) 자동 로그인, 팝업 창 하루동안 띄우지 않기
② Session (Session Cookie)
- 보안의 취약점을 보완하기 위해 SID(Session ID)를 식별자로 중요한 정보를 서버에 저장
- SID로는 쿠키나 도메인 파라미터를 사용
- 웹 클라이언트 캐시에 임시로 저장
- 서버에서 삭제하거나 로그아웃할 때 삭제됨
- 세션은 서버에 저장이 되고 로그아웃 시 삭제되므로 쿠키보다는 안전
ex) 일반적인 로그인
* Cookie vs Session
: 지속적인 쿠키, 지속적이지 않은 세션
'웹해킹' 카테고리의 다른 글
웹해킹 #6 크로스 사이트 요청 변조(CSRF) 공격 (1) | 2019.10.13 |
---|---|
웹해킹 #5 크로스 사이트 스크립팅 공격 (XSS) (1) | 2019.10.12 |
웹해킹 #4 커맨드 인젝션 (0) | 2019.09.29 |
웹해킹 #3 SQL 인젝션 (0) | 2019.09.29 |
웹해킹 #2 실습 환경 구축 및 버프스위트 사용법 (0) | 2019.09.29 |