목록INTERLUDE (111)
Information Security

Error based SQL Injection 임의로 에러를 발생시켜 데이터베이스 및 운영 체제의 정보를 획득하는 공격 기법 Error based SQLI 실습 예제 from flask import Flask, request import pymysql app = Flask(__name__) def getConnection(): return pymysql.connect(host='localhost', user='dream', password='hack', db='dreamhack', charset='utf8') @app.route('/' , methods=['GET']) def index(): username = request.args.get('username') sql = "select username ..

Blind SQL Injection을 통해 데이터베이스의 내용을 효율적으로 알아내기 위한 방법 Binary Search 이미 정렬된 리스트에서 임의의 값을 효율적으로 찾기 위한 알고리즘 1. 범위 지정 0부터 100 사이의 범위 내에 한 숫자만이 정답일 때 범위의 중간 값(50)을 지정 2. 범위 조절 정답이 50 보다 큰 값인지 확인 큰 값이라면 범위를 51 ~ 100으로 조절하고, 아니라면 0~49로 조절하여 검색 범위를 좁혀나감 이 과정을 반복하다보면 범위를 크게 좁힐 수 있고, 최종적으로 정답을 찾아낼 수 있음 Binary Search를 이용한 공격 substr 함수의 반환값을 비교하여 패스워드를 알아낼 수 있음 비밀번호에 포함될 수 있는 아스키에서 출력 가능한 문자의 범위는 32~126 패스워드..

Data Manipulation Language (DML): 데이터베이스에서 데이터를 조회, 추가, 삭제, 수정을 수행하는 구문 SELECT 데이터를 조회하는 구문 FROM 절을 사용해 board 테이블의 uid, title, boardcontent 데이터를 검색 WHERE 절을 사용해 boardcontent 데이터에 “abc” 문자가 포함되어 있는지 찾은 데이터를 ORDER BY 절을 통해 uid를 기준으로 내림차순 정렬한 후, 5 개의 행을 결과로 반환 INSERT 데이터를 추가하는 구문 INTO 절을 사용해 추가할 테이블과 컬럼을 각각 board와 title, boardcontent로 명시 VALUES 절을 통해 INTO 절에서 명시한 테이블의 각각의 컬럼에 “title 1”, “content 1”..

SQL에서 여러 개의 쿼리를 사용하여 데이터를 검색하는 방법과 애플리케이션이 반환하는 결과값을 통해 데이터를 유추하는 방법에 대해 알아보자 UNION 다수의 SELECT 구문의 결과를 결합하는 절 -> 다른 테이블에 접근하거나 원하는 쿼리 결과를 생성해 애플리케이션에서 처리하는 타 데이터를 조작할 수 있음 union을 사용하기 위한 필수 조건 1. 이전 SELECT 구문과 UNION을 사용한 구문의 실행 결과 중 컬럼의 갯수가 같아야 함 2.특정 DBMS에서는 이전 SELECT 구문과 UNION을 사용한 구문의 컬럼 타입이 같아야 함 서브 쿼리 한 쿼리 내에 또 다른 쿼리를 사용하는 것 쿼리 내에서 괄호 안에 구문을 삽입해야하며, SELECT 구문만 사용할 수 있음 공격자 공격 -> 서브 쿼리를 통해 쿼..

문제 파일 코드 #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" users = { 'guest': 'guest', 'admin': FLAG } session_storage = {} def read_url(url, cookie={"name": "name",..

Cross Site Request Forgery (CSRF) 사이트 간 요청 위조. 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격. 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점 ex) 이용자의 계정으로 임의 금액을 송금해 금전적인 이득을 취하거나 비밀번호를 변경해 계정을 탈취하고, 관리자 계정을 공격해 공지사항 작성 CSRF 공격에 성공하기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야 함 -> 격자가 이용자에게 메일을 보내거나 게시판에 글을 작성해 이용자가 이를 조회하도록 유도하는 방법 XSS와 CSRF의 차이 공통점 두 개의 취약점은 모두 클라이언트를 대상으로 하는 공격 이용자가 악성 스크립트가 포함된 페이지에 ..

문제 파일 코드를 확인해보자 #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: options = webdriver.ChromeO..

문제 파일 코드를 확인해보자 #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.update({"domain": "127.0.0.1"}) try: options = webdriver.ChromeO..