공부/웹

웹 취약점

B612 2024. 1. 21. 23:08

XSS

XSS(cross-site scripting) 취약점은 공격자가 악의적인 스크립트를 삽입해 피해자의 쿠키 혹은 세션을 탈취할 수 있는 취약점이다.

 

XSS 취약점의 종류는 아래와 같다.

Stored 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨옴
Reflected 악성 스크립트가 URL에 삽입 되고 서버의 응답에 담겨옴
DOM-based 악성 스크립트가 URL Fragment에 삽입
Universal SOP 정책을 우회

 

태그 삽입이 되지 않도록 함으로서 취약점을 막을 수 있다.

 

취약한 홈페이지의 경우 1이라는 내용이 담긴 메시지 창이 뜰 것이다.

하지만, 내가 입력한 것과는 달리 <script>alert("1")<%2Fscript> 을 확인할 수 있다.

이는 url 인코딩을 사용한 것으로 간단하지만 효과적인 방법이다.

 

CSRF

공격자가 피해자의 권한을 이용해 의도한 행위를 특정 웹사이트에 요청할 수 있는 취약점이다.

예를 들면, 피해자가 자신의 계정으로 공격자에게 송금할 수 있다.

 

XSS와 마찬가지로 공격자가 작성한 악성 스크립트를 피해자가 실행해야 한다.

하지만, XSS는 세션 및 쿠키 탈취가 목적이지만, CSRF는 이용자가 임의 페이지에 HTTP 요청 보내는 것이 목적이다.

 

SQL Injection

SQL 쿼리에 이용자의 입력 값을 삽입해 이용자가 원하는 쿼리를 실행할 수 있는 취약점이다.

웹에 대해 잘 모를때도 가장 많이 들어본 취약점이지만, 개인적으로는 다른 취약점에 비해 조금 더 어렵게 느껴졌다.

 

SQL Injection의 대표적인 종류는 아래와 같다.

Blind 불충분한 정보를 토대로 데이터베이스의 정보를 추측함
UNION-based UNION 연산자를 이용해 다른 테이블의 데이터를 가져옴
Error-Based 데이터베이스에서 발생한 오류 메시지를 통해 데이터베이스의 정보를 추출함
Time-Based 데이터베이스의 참이나 거짓에 따라 지연을 유발시킴으로서 정보를 추출함

 

이 중 특히 Error-Based는 유명한 공격기법인 것 같다.

SELECT * FROM Users WHERE id = 'id' AND password = 'password'로 데이터베이스를 조회할 때, id에 ' OR 1=1 --을 입력한다면, 최종 쿼리문은

SELECT * FROM Users WHERE id = ' ' OR 1=1 --' AND password = 'password'

이 되고, -- 뒤의 구문은 모두 주석 처리되어 항상 참인 구문이 된다.

 

RDBMS는 SQL 문법을 사용해 데이터를 저장하기 때문에 한 가지 언어로 다양한 DBMS를 사용할 수 있지만, NoSQL은 다양한 DBMS가 존재하기 때문에 각각의 구조와 사용 문법을 익혀야 한다.

 

Command Injection

이용자의 입력을 시스템 명령어로 실행할 수 있는 취약점이다.

 

웹쉘이라는 개념을 이해하기 어려웠지만, 개인적으로 가장 신기했던 취약점이다.

이 취약점에 대해 추후 새로운 글을 작성하고 싶다.

 

File Upload Vulnerability

이용자가 업로드 될 파일의 이름을 임의로 정할 수 있을 때 발생하는 취약점이다.

 

이 취약점은 두 가지 방법으로 트리거 될 수 있다.

  • Path Traversal : 임의 디렉터리에 파일을 업로드 할 수 있는 취약점
  • 악성 파일 업로드 : 이용자의 파일을 제대로 검사하지 않아 발생하는 취약점. 이를 방어하기 위해서 웹 서버는 .php, .jsp, .asp 와 같은 확장자의 파일을 CGI로 실행하고, 그 결과를 이용자에게 반환해야 한다.

 

SSRF

웹 서비스의 요청을 변조하는 취약점이다.

 

공격자가 웹 서비스의 권한으로 요청을 보낼 수 있다면 내부망 서비스를 이용할 수 있다.

웹 서비스의 요청을 변조하기 위해서는 요청 내에 이용자의 입력값이 포함되어야 한다.

 

SSRF는 웹 서비스의 권한으로 변조된 요청을 보내지만, CSRF는 브라우저가 변조된 요청을 보낸다는 차이점이 있다.

 

 

 

 

추후 내용이 늘어나, 취약점 별로 글을 하나씩 작성하고 싶다.

끝.

'공부 > ' 카테고리의 다른 글

XSS(Cross-Site Scripting)  (0) 2024.04.23
웹페이지 개발 (flask 설치, 폴더 생성)  (0) 2023.10.21