Dreamhack - Curling
·
DreamHack/CTF
1. 소스코드from flask import Flask, request # Flask 웹 프레임워크와 요청 처리를 위한 모듈from os import urandom # 안전한 랜덤 바이트 생성을 위한 모듈from subprocess import run, TimeoutExpired # 외부 명령어 실행 및 타임아웃 처리를 위한 모듈# Flask 애플리케이션 객체 생성app = Flask(__name__)# 세션 및 CSRF 보호를 위한 비밀 키 생성 (32바이트 랜덤 값)app.secret_key = urandom(32)# 플래그 값 로드 시도: 서버 환경에서 "/flag" 파일 읽기try: FLAG = open("/flag", "r").read().strip() # 파일에서 플래그를 읽어 공..
chockshop
·
DreamHack/CTF
문제 페이지를 들어가면 액세스를 위해서는 세션이 필요하다고 한다. Acquire Session을 눌러 들어가 보자.           들어가는 순간 SHOP, MYPAGE 가 나오는데 둘러보자.                    flag는 2000 파운드로 판매되고 있다. MYPAGE에 들어가 보자.         Coupon Claim을 누르면 쿠폰 값을 주고 그 밑에다가 제출하는 식인거 같다.           Claim 을 누르면 쿠폰 값이 뜨고            submit 하면 바로 1000파운드가 생긴다. flag는 2000파운드다. 힌트에서는 사용된 쿠폰을 검사하는 로직이 취약하다고 하니 그걸 중점으로 한번 보자.          # Redis와 Flask 라이브러리를 사용하여 웹 애플리케..
Secure Secret
·
DreamHack/CTF
#!/usr/bin/env python3import osimport stringfrom flask import Flask, request, abort, render_template, session# 비밀 파일을 저장할 경로와 허용할 문자 집합을 정의합니다.SECRETS_PATH = 'secrets/'ALLOWED_CHARACTERS = string.ascii_letters + string.digits + '/'#알파벳 대문자 소문자 숫자 슬래시만 허용 된다.# Flask 애플리케이션을 초기화합니다.app = Flask(__name__)# 세션 암호화에 사용할 비밀 키를 무작위로 생성합니다.app.secret_key = os.urandom(32)# 샘플 파일을 생성하여 기본 메시지를 씁니다.with ope..
php7cmp4re
·
DreamHack/WEB
php7cmp4re http://host3.dreamhack.games:10711/ Index page "7.9"){ if(strlen($input_2) 1){ if($input_2 "74"){ echo "FLAG\n"; echo $flag; echo ""; } else echo "Good try."; } else echo "Good try."; } else echo "Try again."; ..
blind sql injection advanced
·
DreamHack/WEB
나는 많이 어려웠는데 왜 이리 잘하는 사람들이 많은 거야         import osfrom flask import Flask, request, render_template_stringfrom flask_mysqldb import MySQLapp = Flask(__name__)app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost')app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user')app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass')app.config['MYSQL_DB'] = os.environ.get..
command-injection-chatgpt
·
DreamHack/WEB
#!/usr/bin/env python3import subprocessfrom flask import Flask, request, render_template, redirectfrom flag import FLAGAPP = Flask(__name__)@APP.route('/')def index(): return render_template('index.html')@APP.route('/ping', methods=['GET', 'POST'])def ping(): if request.method == 'POST': host = request.form.get('host') cmd = f'ping -c 3 {host}' try: output =..
error based sql injection
·
DreamHack/WEB
이게 왜 Simple이라는 거지             import osfrom flask import Flask, requestfrom flask_mysqldb import MySQLapp = Flask(__name__)app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost')app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user')app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass')app.config['MYSQL_DB'] = os.environ.get('MYSQL_DB', 'users')mysql = MySQL..
rev-basic-8
·
DreamHack/Reverising
IDA로 파일을 실행시켜 보자.          'Correct'가 출력돼야 하니 sub_14001000을 확인          unsigned __int8 : 0부터 255까지의 값을 갖는 부호 없는 8비트 정수 a1은 한정적이라고 할 수 있다. '(-5 * *(_byte *)(a1+i) =' a1[i] 의 값을 -5 곱한 후 byte_140003000[i] 와 비교          byte_140003000 배열이다. 종합적으로 uint8_t 은 0~255까지의 값 byte_140003000 배열 값들도 많지가 않다 식은 그대로 가되 unsigned 8-bit로 처리해주고 비교하면 된다. result = (-5 * a1) % 256 수식 : -5 * a1 연산 후에 256으로 나눈 나머지 값들을 쓴다..
simple_sqli_chatgpt
·
DreamHack/WEB
#!/usr/bin/python3from flask import Flask, request, render_template, gimport sqlite3import osimport binasciiapp = 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), userpassword ch..