분류 전체보기

    Dreamhack - file-csp-1 (write-up)

    Dreamhack - file-csp-1 (write-up)

    오늘은 file-csp-1을 풀어볼 것이다. 이 문제는 csp를 이해하고, 어떻게 설정하는지 알면 된다. $사전 조사 일단은 주어진 파일들을 살펴보자. #!/usr/bin/env python3 import os import shutil from time import sleep from urllib.parse import quote from flask import Flask, request, render_template, redirect, make_response from selenium import webdriver from flag import FLAG APP = Flask(__name__) @APP.route('/') def index(): return render_template('index.htm..

    Dreamhack(Wargame.kr) - Login filtering

    Dreamhack(Wargame.kr) - Login filtering

    오늘은 드림핵의 login filtering문제를 풀어볼 것이다. $ 사전 조사 먼저 웹사이트를 확인 해보자. 그냥 id pw를 입력하는 칸이 나온다. get source로 php를 확인해보자. 위의 php는 로그인을 성공하면 flag를 준다. 밑에 주석에서 아래처럼 사용자 정보를 준다. $ 취약점 분석 이제 취약점을 찾아보자. 일단 로그인을 위 정보로 하면 flag를 주는데, id가 guest, blueh4g 이면 계정이 막혔다고 echo한다. 그런데 그 필터링을 하는 if에서 취약점이 발생한다. 만약 id를 guest가 아닌 GUEST처럼 대문자를 넣으면, if문을 통과하여 db에 guest로 들어간다.(여기서 php에 어떻게 들어가는지 몰라서 쓸데없이 삽질을.....ㅠㅠ) 그러면 아래처럼 넣으면 로..

    Dreamhack - simple-ssti(Write-up)

    Dreamhack - simple-ssti(Write-up)

    오늘은 드림핵의 simple-ssti라는 문제를 풀어볼 것이다. 문제는 2단계인데 굉장히 쉬운 문제이다. 정말 ssti의 기초만 알아도 풀수 있는 문제이다. 먼저 python코드를 살펴보자. #!/usr/bin/python3 from flask import Flask, request, render_template, render_template_string, make_response, redirect, url_for import socket app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' app.secret_key = FLAG @app.route('/') def index(): return..

    Cryptography(암호학) - Hash(해시)

    Cryptography(암호학) - Hash(해시)

    이번에는 Hash에 대해 알아볼 것이다. 해시 함수(Hash function)는 임의의 크기의 데이터를 받아서 고정된 크기의 데이터를 반환하는 함수이다. 이때 나온 값을 해시 값이라고 한다. 암호학적 해시 함수는 해시 함수 중 특정 성질을 만족하는 함수이다. 암호학적 해시 함수는 다음 성질을 만족한다. 1. 제 1 역상 저항성 2. 제 2 약상 저항성 3. 충돌 저항성 제1 역상 저항성은 해시 값이 y일때 y를 이용하여 평문 x를 찾는것은 어렵다는 성질이고, 제2 역상 저항성은 x를 해시화 했을때, 해시 값이 같은 x'를 찾기 어렵다는 성질이다. 마지막 충돌 저항성은 충돌(해시 값이 같은)이 일어나는 x, x'는 찾기 어렵다는 성질이다. 위 성질들은 해시를 많이 접해보면서 쉽게 이해할 수 있을 것이다. ..

    Cryptography(암호학) - RSA(공개키 암호)

    Cryptography(암호학) - RSA(공개키 암호)

    RSA 암호 알고리즘은 대표적인 공개키 암호 알고리즘이다.(공개키 알고리즘 : https://hackhijack64.tistory.com/60) RSA 암호 알고리즘은 아주 큰 두 소수의 곱으로 이루어진 합성수 인수분해 문제의 어려움을 이용한 암호이다. 따라서 RSA로 암호화할 때는 합성수의 소인수분해가 어려워지도록 각 인자를 적절히 설정 해야한다. RSA는 공개키와 개인키로 이루어져 있다. 공개키는 모두에게 공개되어 있고, 암호화에 사용된다. 개인키는 아무한테도 노출되면 안되고, 암호를 복호화 할때 사용된다. 먼저 RSA를 이해하려면 오일러 정리를 알아야한다. 오일러 정리는 n과 서로소인 양의 정수 m과 다음 식이 성립된다는 것이다. P(n)은 오일러 파이 함수라고 하며, n이하의 양의 정수중 서로소인..

    Cryptography(암호학) - DES(Data Encryption Standard)

    Cryptography(암호학) - DES(Data Encryption Standard)

    오늘은 대칭키 암호 중 하나인 DES 암호에 대해 알아볼 것이다.(드림핵 참고) DES는 NSA에서 IBM의 루시퍼 알고리즘을 개량하여 만든 것이다. DES는 56비트의 키를 이용하고, 8바이트 블록암호이다. 현대에는 DES 공격기법이 많이 연구되어 특별한 경우 아니면 잘 사용하지 않는다. DES는 IP(초기순열), FP(최종순열), Feistel 구조, 각 라운드에 사용되는 48비트의 키를 생성하는 키 생성 함수로 이루어져 있다. 1. DES의 원리 DES는 순열, 치환을 사용한다. DES는 순열과 치환을 여러 라운드에 거쳐 진행하는 곱 암호(Product Cipher)의 일종이다. DES 전체의 라운드 함수를 적용하는 과정은 Feistel 구조를 가진다. Feistel 구조는 다음과 같은 과정으로 진..

    Cryptography(암호학) - AES(블록암호)

    Cryptography(암호학) - AES(블록암호)

    오늘은 대칭키 암호 시스템에서 블록 암호인 AES를 알아볼 것이다.(드림핵 참고) AES는 연산 능력의 향상에 의해 다른 블록 암호인 DES가 안전해지지 않자, 새롭게 표준 된 암호이다. AES는 지금까지도 치명적인 취약점은 발견되지 않았다고 한다. 1. SPN AES는 SPN이라는 암호 구조를 가지고 있다. SPN은 곱 암호의 일종인데, S-box를 사용하는 치환, P-box를 사용하는 순열을 여러 과정에 걸쳐 반복한다. 그냥 치환, 순열(배열), 치환, 순열을 반복하는 구조이다. SPN은 Feistel과 달리 입력 전체에 라운드 함수를 적용하기 때문에, 같은 라운드를 사용할 경우 더욱 암호학적으로 안정성을 갖게 된다. 2. AES의 구조 AES는 기본적으로 라운드마다 128비트를 암호화하는 블록 암호..

    Cryptography(암호학) - 현대암호

    Cryptography(암호학) - 현대암호

    현대 암호는 안정성을 갖춘 암호화를 하기 위해 혼돈, 확산이라는 성질을 가져야한다. 혼돈은 암호문에서 평문이 특성을 알아내기 힘들다는 성질이고, 확산은 평문의 작은변화가 암호문에서는 큰 변화로 이어진다는 성질이다. 현대에는 대칭키 암호 시스템 즉 암호화, 복호화할때 사용하는 키가 같은 암호시스템이랑 키가 서로 다른 비대칭키(공개키) 암호 시스템이 있다. 1. 대칭키 암호 시스템 대표적으로 블록암호, 스트림 암호가 있다. 블록 암호는 정해진 블록 단위로 암호화 하는 것이다. 만약 블로의 크기가 4바이트라면 평문도 4바이트로 쪼개서 암호화를 진행 해야한다. 스트림 암호란 송신자와 수신자가 공유하는 데이터 스트림을 생성하고 이를 평문에 XOR하는 암호이다. 스트림 암호는 아래와 같이 암호화 할 수 있다. C(..