본문 바로가기

전체 글

(33)
#1 스프링부트 공부 시작 스프링부트 핵심가이드 (장정우 지음) 참고하여 쓰는 글입니다. 주의: 개인적으로 공부하며 쓰는 글이라 중간에 느낀점 같은 첨언이 있을 수 있습니다. (쓸데없는말이좀많습니다.) 01 스프링 부트란? 스프링의 핵심 가치 "애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는것" 다음과 같은 방법으로 스프링의 핵심 가치를 구현한다. 1. 제어 역전(IoC) 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것 => 제어 역전을 통해 의존성 주입, 관점 지향 프로그래밍이 가능해짐 ==> 스프링을 사용하면 객체의 제어권을 컨테이너로 넘기기 때문에 개발자는 비즈니스 로직을 작성하는 데 더 집중할 수 있음 2. 의존성 주입(DI) 사용할 객체를 직접 생성하지 않고 외부 컨테이..
파일 취약점(File Vulnerability) 파일 취약점은 업로드할 때 발생하는 취약점과, 다운로드할 때 발생하는 취약점으로 나뉜다. 🤯 File Upload Vulnerability 공격자의 파일을 웹 서비스의 파일 시스템 상 임의 경로에 업로드하는 과정에서 발생하는 보안 취약점. CGI 로 실행되는 파일을 업로드해 시스템에 임의 명령어를 실행하거나, HTML 파일을 업로드하여 XSS 공격을 수행할 수 있다. Path Traversal 와 함께 쓰여 업로드 폴더를 벗어난 곳에 공격자의 파일을 저장하는 공격도 있다. 😱 File Download Vulnerability 웹 서비스의 파일 시스템에 존재하는 파일을 다운로드 하는 과정에서 발생하는 보안 취약점. 공격자는 웹 서비스의 파일 시스템에 존재하는 임의 파일(설정 파일, 패스워드 파일, 데이터 ..
Command Injection 서론 시스템 함수란? 시스템에 내장된 프로그램들을 호출할 수 있는 함수 다양한 웹 애플리케이션 제작용 언어는 시스템 함수를 지원한다. 예를 들어, PHP 의 system, NodeJS의 child_process, 파이썬의 os.system 이 있다. 시스템 함수를 사용하면 이미 설치된 소프트웨어들을 쉽게 이용할 수 있다는 장점이 있습니다. 시스템 함수는 전달된 인자를 셸 프로그램에 전달해 명령어를 실행한다. 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 취약점이 발생한다. 즉, 이용자의 입력을 시스템 명령어로 실행하게 하는 취약점을 command injection 이라고 한다. 따라서, 공격자는 메타 문자를 통해 임의 명령어를 실행하여 셸을 획득할 수 있습니다. 메타 문자 (특수한 ..
[dreamhack] Mango 문제 풀이 Description 이 문제는 데이터베이스에 저장된 플래그를 획득하는 문제입니다. 플래그는 admin 계정의 비밀번호 입니다. 플래그의 형식은 DH{…} 입니다. {‘uid’: ‘admin’, ‘upw’: ‘DH{32alphanumeric}’} 문제 파일 package.json { "name": "Web-C", "version": "1.0.0", "description": "Web-C", "main": "main.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { "express": "^4.17.1", "express-session": "^1.17.0", "mongoose": "^5.10...
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)를 저장한다. 스키마를 따로 ..
[dreamhack] simple_sqli 문제 풀이 문제파일 코드 #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassw..
[dreamhack] Exercise: SQL Injection 엔드포인트: /login Figure2는 로그인 페이지를 구성하는 코드입니다. 코드를 살펴보면, 메소드에 따른 요청마다 다른 기능을 수행하는 것을 알 수 있습니다. GET userid와 userpassword를 입력할 수 있는 로그인 페이지를 제공합니다. userid와 password 입력창에 guest를 입력하면 로그인을 수행할 수 있습니다. POST 이용자가 입력한 계정 정보가 데이터베이스에 존재하는지 확인합니다. 이때, 로그인 계정이 admin일 경우 FLAG를 출력합니다. login 페이지 코드 @app.route('/login', methods=['GET', 'POST']) # Login 기능에 대해 GET과 POST HTTP 요청을 받아 처리함 def login(): # login 함수 선언 ..