1. Web 기본과 실습 환경
• HTTP 프로토콜과 HTML의 특징
1. HTTP(Hyper Text Tansfer Protocol)이란 웹 상에서 클라이언트와 서버가 서로 대화하기 위한 통신규약이다.
2. HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.
3. 계속 서버와 클라이언트의 연결 상태를 유지하는 게 아니기 때문에 클라이언트와 서버 간의 최대 연결수보다 많은 요청과 응답 처리가 가능하다.
4. 연결을 끊어버리기 때문에 클라이언트의 이전상황을 알 수 없다. (Stateless 상태 => Stateless 특징 때문에 정보를 유지하기 위해서 Cookie가 등장을 하였다.)
※ Cookie : HTTP의 일종으로서 인터넷 사용자가 어떠한 웹 사이트를 방문할 경우 사용자의 웹 브라우저를 통해 인터넷 사용자의 웹 브라우저를 통해 인터넷 사용자의 컴퓨터나 다른 기기에 설치되는 작은 기록 정보 파일을 일컫는다.
- 서버 : 어떠한 자료에 대한 접근을 관리하는 네트워크 상의 시스템 (요청에 대한 응답을 보내준다.)이고, HTTP를 사용하여 일반적으로 인터넷 브라우저를 통해 클라이언트 컴퓨터와 통신하는 서버이다.=> 웹서버(IIS, Apache2, Nginx 등)
- 클라이언트 : 사용자가 브라우저를 통해서 어떠한 서비스를 URL을 통하거나 다른 것을 통해 요청 (Request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(Response)하는 형태로 동작한다.=> 웹 브라우저, SSH Client, FTP Client
1. HTTP Method : GET, POST, PUT 등 요청 방식이 온다. 서버에게 요청의 종류를 알려주기 위해서 사용한다.
- GET : 정보를 요청하기 위해 사용한다. 2083 정도의 길이 데이터만을 처리한다.(게시판 글 입력 처리 불가)
- POST : 정보를 밀어넣기 위해 사용한다. 길이 제한이 없이 많은 입력 데이터를 처리( 게시판 입력 글 처리 가능)
- PUT : 정보를 업데이트하기 위해서 사용한다.
2. HOST : 요청이 전송되는 타켓의 Host URL 주소( 요청을 보내는 웹사이트의 기본 주소)이다.
3. User-Agent : 요청을 보내는 클라이언트의 대한 정보이다.
4. Referer : 현재 요청된 페이지 이전의 페이지 주소이다.
5. Cookie : 클라이언트에게 설정된 쿠키 정보이다.
6. Content-Length : Request에 실어 보내는 데이터의 길이이다.
상태 코드는 브라우저의 요청에 대해 서버가 수신한 응답이다. 브라우저는 웹 주소를 입력해서 특정 서버에 요청을 보내고 서버는 HTTP 상태 코드를 브라우저에 응답을 한다.
- 200 code(성공) : 서버가 요청한 페이지를 제대로 처리 했다는 뜻이다. - 301 code(영구 리디렉션) : 웹 페이지가 요청한 페이지를 새 위치로 영구적으로 이동했다. - 302 code(임시 리디렉션) : 웹 페이지에 대해 브라우저에서 보낸 요청을 발견되었지만 URL 또느 콘텐츠가 일시적으로 이동되었음을 나타낸다. - 401 code(권한 없음) : 로그인 실패 후에 권한이 없어 인증이 필요하다. - 403 code(Forbidden, 금지됨) : 접근하면 안되는 페이지 또는 디렉토리(서버가 요청을 거부) - 404 code(Not Found, 찾을 수 없음) : 서버가 요청한 페이지를 찾을 수 없다. - 500 code(내부 서버 오류) : 서버에 오류가 발생하여 요청을 수행할 수 없다. - 502 code(Bad Gateway) : 서버가 게이트웨이나 프록시 역할을 하고 있거나 업스트림 서버에서 잘못된 응답을 받았다. - 503 code(서비스를 사용할 수 없음) : 서버가 오버로드 되었거나 유지관리를 위해 다운되었기 때문에 현재 서버를 사용할 수 없다. |
• SSL/TLS
- SSL은 Secure Socket Layer의 약자로 Netscape에서 만든 웹 브라우저와 웹서버 간 암호화 방식이다. 취약점이 많아 SSL1.0과 SSL2.0은 취약점이 발견되어서 사용 중지, 현재는 사용하지 않는다.
- TLS 은 SSL을 표준화 하면서 TLS로 변경, 취약점이 대부분 보안되고 1999년 이후로는 계속 TLS만 사용했다.
1. 연결성을 먼저 수행한다.
2. 서버는 연결이 가능한지 응답해주고 연결 가능시 SYN/ACK 패킷을 보낸다.
3. 클라이언트는 서버에서 온 응답 패킷을 받고 ACK 패킷을 보내 연결을 완전하게 수행한다.
SSL/TLS를 사용하는 웹사이트의 URL에는 HTTP 대신에 HTTPS 가 있다.
• 실습 환경 준비
1. VMware 다운로드
VMware은 가상머신이다. 사용하는 컴퓨터는 한대이더라도 여러 대를 사용하는 효과를 가질 수 있으며 여러 운영체제를 동시에 다룰 수 있는 가상사의 공간을 만들어 주는 프로그램이다.
2. Ubuntu, Kali 설치
리눅스 커널을 기반으로 한 리눅스 배포판 이다.( 강사님이 제공해 주신 우분투 다운로드)
데비안 기반의 모의 침투 테스트용 운영체제이다. 모의 해킹 분야에서 최대 규모를 자랑하는 만큼 많은 툴과 응용할 수 있는 시스템이 기본적으로 제공된다.
3. 실습 환경 DVWA 설치
취약점 진단 및 모의해킹 공부/ 실습을 할 수 있도록 만들어진 취약한 웹 애플리케이션이다.
(우분투에 강사님이 설치하여 배포해 주었다.)
• SQL Injection
SQL 인젝션은 데이터베이스에 SQL 쿼리 문을 전송하여 공격자가 원하는 데이터베이스의 중요한 정보를 가져오는 해킹 기법이다. 공격 난이도가 쉬운 거에 비해 피해가 큰 기법이기도 한다.
애플리케이션이 인젝션에 취약한지 판별하기 위해서는 소스코드를 리뷰하고 모든 파라미터, 헤더, URL, 쿠키, JSON, SOAP, XML 데이터 입력에 대한 철저한 자동화 테스트가 가장 좋은 방법이다.
웹브라우저와 웹서버는 HTTP로 통신하고 웹서버와 데이터베이스에 SQL 문을 작성하는데 공격 구문이 따라붙게 되면서 SQL 공격 구문이 그대로 실행이 된다.
• SQL 인젝션 핵심 3요소
1. 주석 : 뒷부분을 무력화
오라클 DB, MS-SQL : --
MySQL, MariaDB : #
2. 로직 : 논리적으로 참이 되기만 하면 됨
'or 1=1 --
'or 2>1 --
'or 'a'='a' --
ex) select * from [테이블명] where id='admin' and pw='' or 1=1 --';
3. SQL 중첩 문 사용하기
1. 앞의 SQL 문을 마감하고 다른 SQL 문을 뒤에 붙여서 실행하도록 유도한다.
ex) select~~~~~; select * from [테이블명] where id = 'admin' and pw~~~~;
2. 앞의 select문을 뒤의 select문과 union으로 연결한다.
ex) select * from [테이블명] where id='admin' and pw='' union select ~~~~~~~~ ';
※ 앞의 select문에서 요청한 개수와 뒤의 select문에서 요청한 개수가 일치해야 함
•DVWA 실습
이번에 실습할 SQL 인젝션 문제이다.
user ID에 1~9번까지 넣으면 사용자 First name과 Surname 이 출력이 된다.
SQL 인젝션 로직인 'or 1=1#를 입력한 결과 밑에 사진처럼 결과가 출력이 되었다.
SQL 인젝션 공격이 되었다는 걸 확인할 수 있다.
• SQL 인젝션 대응 방법
Escape 처리 : 특수문자의 고유 기능을 하지 못하도록 처리한다.(\ 백 슬래시를 붙인다)
※ Secure Coding 함수를 사용해서 하는 게 좋다.
htmlspeciachars() : HTML 코드를 문자열 소스 그대로 출력한다. addslashes() : 작은 따옴표(') 와 큰 따옴표(") 역 슬래쉬(\) 와 같은 특수문자 앞에 역슬래쉬(\) 문자를 붙인다. stripslashes() : addslashes() 함수를 통해 역슬래쉬가 된 문자를 원상태로 돌린다. |
'Rookies 9기 > 애플리케이션 보안' 카테고리의 다른 글
애플리케이션 보안 6일차 (0) | 2022.09.13 |
---|---|
애플리케이션 보안 5일차 (0) | 2022.09.08 |
애플리케이션 보안4일차 (0) | 2022.09.07 |
애플리케이션 보안 3일차 (0) | 2022.09.06 |
애플리케이션 보안 2일차 (0) | 2022.09.05 |