본문 바로가기

KERT/HackHeat

(10)
SSRF(Server-side Request Forgery) SSRF(Server-side Request Forgery) 공격자가 (웹 서비스의 권한으로) 웹 서비스의 요청을 변조하는 취약점 외부의 공격자가 내부망 서비스를 이용할 수 있게 된다 최근의 웹 서비스는 마이크로서비스로 구현하는 추세라서 SSRF 의 파급력이 높다 *마이크로서비스 란? 소프트웨어(애플리케이션)끼리 API 통신을 하는 소규모의 독립적인 서비스 사진을 보면, 사용자가 외부로 노출된 웹 애플리케이션에는 접근할 수 있지만, 웹 애플리케이션 내부의 서비스들에는 접근할 수 없게 되어 있다. 예시로, 백오피스 서비스(관리자 페이지)가 있다. 이러한 내부 서비스는 관리자만 이용할 수 있어야 하기 때문에, 외부에서 접근할 수 없는 내부망에 위치한다. 웹 서비스가 보내는 요청을 변조하기 위해서는, 요청 내..
파일 취약점(File Vulnerability) 파일 취약점은 업로드할 때 발생하는 취약점과, 다운로드할 때 발생하는 취약점으로 나뉜다. 🤯 File Upload Vulnerability 공격자의 파일을 웹 서비스의 파일 시스템 상 임의 경로에 업로드하는 과정에서 발생하는 보안 취약점. CGI 로 실행되는 파일을 업로드해 시스템에 임의 명령어를 실행하거나, HTML 파일을 업로드하여 XSS 공격을 수행할 수 있다. Path Traversal 와 함께 쓰여 업로드 폴더를 벗어난 곳에 공격자의 파일을 저장하는 공격도 있다. 😱 File Download Vulnerability 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드 하는 과정에서 발생하는 보안 취약점. 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일(설정 파일, 패스워드 파일, 데이터 ..
Command Injection 서론 시스템 함수란? 시스템에 내장된 프로그램들을 호출할 수 있는 함수 다양한 웹 애플리케이션 제작용 언어는 시스템 함수를 지원한다. 예를 들어, PHP 의 system, NodeJS의 child_process, 파이썬의 os.system 이 있다. 시스템 함수를 사용하면 이미 설치된 소프트웨어들을 쉽게 이용할 수 있다는 장점이 있습니다. 시스템 함수는 전달된 인자를 셸 프로그램에 전달해 명령어를 실행한다. 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 취약점이 발생한다. 즉, 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점을 command injection 이라고 한다. 따라서, 공격자는 메타 문자를 통해 임의 명령어를 실행하여 셸을 획득할 수 있습니다. 메타 문자 (특수한 ..
NoSQL Injection 키워드 NoSQL injection: 요청 구문에 이용자의 입력 값을 삽입해 이용자가 원하는 요청을 실행할 수 있는 취약점 Blind NoSQL Injection: 데이터 조회 후 결과를 직접적으로 확인할 수 없는 경우 사용될 수 있는 NoSQL Injection 공격 기법 이전에 학습한 SQL Injection 과 유사하다. 모든 DBMS를 다루지 않고, MongoDB 를 사용할 때 발생하는 NoSQL Injection에 대해서 알아봅시다. MongoDB 의 NoSQL Injection 취약점은 주로 이용자의 입력값에 대한 타입 검증이 불충분할 때 발생한다. MongoDB는 저장하는 데이터 자료형으로 문자열, 정수, 날짜, 실수 뿐만 아니라 오브젝트, 배열 타입을 사용 오브젝트 타입의 입력값을 처리할 ..
NoSQL 개념과 MongoDB 기본 문법 Non-Relational DBMS (NRDBMS, NoSQL(Not Only SQL) NoSQL은 SQL를 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간 그에 비해, RDMBS 는 용량이 많이 필요하다. NoSQL 또한 이용자의 입력값을 통해 동적으로 쿼리를 생성해 데이터를 저장하기 때문에 sql injection 문제 발생 NoSQL: Redis, Dynamo, CouchDB, MongoDB 등 다양한 DBMS가 존재 RDBMS: SQL (데이터를 저장하는 문법이 한 가지) NoSQL 은 각각의 구조와 사용 문법을 익혀야한다는 단점이 있다. MongoDB MongoDB는 JSON 형태인 도큐먼트(Document)를 저장한다. 스키마를 따로 ..
SQL Injection SQL Injection DBMS에서 사용하는 쿼리를 임의로 조작해 데이터베이스의 정보를 획득하는 것 *SQL이란? DBMS 에 데이터를 질의하는 쿼리 언어 Ex) 로그인 기능을 위한 쿼리 DBMS에 저장된 accounts 테이블에서 이용자의 아이디가 dreamhack이고, 비밀번호가 password인 데이터를 조회 SELECT * FROM accounts WHERE user_id='dreamhack' and user_pw='password' 더보기 - SELECT: 조회 명령어 - *: 테이블의 모든 컬럼 조회 - FROM accounts: accounts 테이블 에서 데이터를 조회할 것이라고 지정 - WHERE user_id='dreamhack' and user_pw='password': user_i..
DBMS 데이터베이스 (Database) 컴퓨터가 정보를 기록하는 곳 다수의 사람들이 데이터를 생성하고, 참조하고, 수정하는 웹 서버의 환경에 가장 적합한 자료구조 DataBase Management System (DBMS) 데이터베이스를 관리하는 애플리케이션 DBMS 종류 Relational (관계형) MySQL, MariaDB, PostgreSQL, SQLite Non-Relational (비관계형) MongoDB, CouchDB, Redis 두 DBMS 의 차이점: 데이터 저장 방식 관계형 - 행과 열의 집합인 테이블 형식으로 저장 비관계형 - Key-Value 형태로 저장 RDBMS (관계형 DBMS) RDBMS에서 관계 연산자는 SQL이라는 쿼리 언어를 사용하고, 쿼리를 통해 테이블 형식의 데이터를 조작..
ClientSide: XSS 클라이언트 사이드 취약점 웹 페이지의 이용자를 대상으로 공격할 수 있는 취약점. 대표적인 공격 중 하나로 XSS가 있다. Cross Site Scripting(XSS) 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있습니다. 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있습니다. 예를 들어, 드림핵 웹 페이지에서 XSS 취약점이 존재하면 https://dreamhack.io 내에서 오리진 권한으로 악성 스크립트를 삽입합니다. 이후에 이용자가 악성 스크립트가 포함된 페이지를 방문하면 공격자가 임의로 삽입한 스크립트가 실행되어 쿠키 및 세션이 탈취될 수 있습니다. 자바스크립트는 웹 문서의 동작을 정의합..