본문 바로가기

분류 전체보기

(156)
[Dreamhack] web-deserialize-python write up 코드를 보면 몇줄 안된다. #!/usr/bin/env python3 from flask import Flask, request, render_template, redirect import os, pickle, base64 app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() # Flag is here!! except: FLAG = '[**FLAG**]' INFO = ['name', 'userid', 'password'] @app.route('/') def index(): return render_template('index.html') @app.route('/create_session'..
[Dreamhack] login-1 write up 코드를 보자 #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for, session, g import sqlite3 import hashlib import os import time, random app = Flask(__name__) app.secret_key = os.urandom(32) DATABASE = "database.db" userLevel = { 0 : 'guest', 1 : 'admin' } MAXRESETCOUNT = 5 try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' def mak..
[1-day] CVE-2019-11358 / Prototype pollution Description 해당 취약점인 오픈소스 자바스크립트 라이브러리인 jQuery에서 발견된 취약점입니다. 해당 CVE는 자바스크립트 protytype을 덮어쓸 수 있는 취약점으로 XSS 공격이 가능하며, 더 나아가 DoS, RCE, Property injection과 같은 공격으로 이어질 수 있습니다. 이 취약점은 jQuery의 extend() 함수에서 발생하며, extend()는 여러 객체들을 하나로 합쳐주는 함수입니다. 즉, 객체를 합치는 과정에서 부모 객체의 prototype을 오염시킬 경우 취약점이 발생합니다. CVSS 점수가 6.1로 측정되었으며 jQuery 버전 3.4.0 이전 버전에서 영향을 받는 걸로 나타났습니다. Prototype pollution prototype pollution을 ..
[Dreamhack] what-is-my-ip write up 으음.. 퍼블로 푸신분이 4분인데, 나 퍼블 먹었을지도? 내 아이피가 바로 나오고 있다. 코드를 살펴봅시다. user_ip라는 변수에 내 아이피를 담고, echo 해주고 그걸 화면에 보여주고 있다. flag는 /flag에 위치하니 command injection을 통해 가져오면 된다. 할 건 내 ip 변조.. 근데 사실 ip변조는 앱 계층 단에서는 불가능하지만, 코드를 보면 request.access_route 라는 게 존재한다. 뭔가 싶어서 찾아보니 forwarded 헤더가 존재하면 client ip부터 마지막 proxy ip까지 배열로 담고 있는 놈이다. X-Forwarded-For 라는 헤더는 만약 http request가 프록시 서버를 거칠 경우 원래 요청 ip주소를 담고 있는 헤더이다. 이 헤더..
[Dreamhack] out of money write up web + misc 드핵, 드냥, 드멍 코인이 있다. 드핵 코인을 통해 flag를 살 수 있지만, 드핵 코인을 빌린 빛이 없어야 flag를 살 수 있다. 각각의 코인은 상호 교환이 가능하다. 드림 유동성 풀로 이동하면 드냥 코인을 예금할 수도 있고, 담보로 교환이 가능하다. 여기서 코드를 보면 드냥 코인의 담보로 빌릴 수 있는 드멍 코인의 한도가 정해진다. 근데 드멍 코인을 빌린다고 해도 드냥 코인의 담보가 줄어들지 않기 때문에 드멍 코인을 빌릴 한도 역시 줄어들지도 않는다. 따라서 드멍 코인을 무한으로 즐길 수 있다 ㄷㄷ.. 드멍 코인은 드핵 코인으로 교환이 가능하다.
[Dreamhack] tmitter write up 문제 설명으론 테이블 생성 쿼리문 하나만 알려준다. 위 사진은 서버에 접속했을 때 index 화면이다. 로그인과 회원가입이 있다. 회원가입 창으로 이동 후 개발자 도구를 보면 admin으로 가입 하라는 힌트가 보인다. admin으로 가입 후 로그인 하면 flag가 출력될 것 같다. 일단 꽤 푸는데 고민을 많이 한 문제이다. 먼저, 1. char 특징 이용-1 char 특성상 char(32) 와 같이 선언할 경우 32바이트가 안 채워지면 문자열 뒤에를 공백으로 채워 32바이트를 만든다. 따라서 admin%20으로 우회를 시도했지만 실패했다. 2. 로직 버그 이용 백엔드 로직을 추측해보면 id가 있는지 확인한 다음에 insert문을 날릴 것이다. 때문에 select로 조회를 먼저 진행한다. 즉 %20admi..
[Dreamhack] [wargame.kr] login filtering write up 위는 문제 화면이다. 코드를 보면 위는 php 코드이다. 사용자 입력을 받아 두 번의 필터링을 거쳐 쿼리문을 DB에 날린다. 우선 주목해야할 부분이 몇 부분 있다. 1. 쿼리문의 문자열 인코딩을 utf8로 설정한 점 2. mysqli_real_escape_string() 함수를 통해 싱글쿼터를 이스케이프 하는 점 3. trim() 함수를 통해서 공백을 제거한 점 이제 플래그가 나오는 부분을 보자. 위 사진을 보면 flag는 쿼리의 반환 결과로 id라는 컬럼이 존재하며, 그 id 값이 guest, blueh4g가 아닐 때 echo 된다. mysql에서는 대소문자를 구분하지 않는다는 점이 하루가 지나고 보니 생각났다.. 하하...
[Dreamhack] simple_sqli_chatgpt write up 오호라 중요 코드 부분을 보면 if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid char(100), userpassword char(100), userlevel integer);') db.execute(f'insert into users(userid, userpassword, userlevel) values ("guest", "guest", 0), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}", 0);') db.commit() db.close() userid가 guest이고 admin인 user가 한 ..