본문 바로가기

분류 전체보기

(156)
[Dreamhack] simple-ssti write up SSTI 취약점이 발생하는 문제이다. SSTI란 Server Side Template Injection의 약자로 사용자 입력값이 템플릿으로 해석되어 발생하는 오류이다. 코드를 보자. 코드를 보면 errorhandler가 존재한다. 404에러에 대한 로직을 처리하는 것 같다. 404 에러가 발생한 경로를 가져와 템플릿으로 정의한 변수에 넣고 있다. 이 변수는 render_template_string 함수의 인자로 넘어간다. render_template_string 함수는 템플릿 구문을 해석한다. flask는 기본적으로 Jinja2 템플릿 언어를 제공하기 때문에 그에 맞는 템플릿 인젝션을 해야 한다. 템플릿 언어에 따라 페이로드가 달라질 수 있다. 위 사진은 언어를 구분하는 방법을 도식화한 사진이다. {{7..
[Dreamhack] php-1 write up 문제 화면이다. 코드를 바로보면 index.php는 GET요청으로 받은 파라미터를 include 시키고 있다. 바로 LFI 취약점이 보인다. 그래도 양심상 view.php 까지 보면 flag가 파라미터로 넘어오면 Permission denied가 뜬다. 따라서 index.php에서 발생하는 LFI로 우회하라는 것 같다. 보니 flag echo가 안된다. php wrapper로 우회할 수 있다. 디코딩
[Dreamhack] proxy-1 write up Raw Socket Sender가 구현되어 있다고 한다. 음 위와 같이 되어 있다. 코드를 보면 위와 같이 되어 있고 raw socket 프로그래밍은 아니지만 그런 일반 소켓 프로그래밍으로 효과를 줄 수 있는 것 같다. 아무튼 내가 입력한 호스트와 포트에 데이터를 전송하고 있다. flag가 어디서 나오나 확인하니 admin 경로에 POST 요청을 보내면서 위의 조건들을 만족하면 flag가 응답된다. 즉 구현되어 있는 소켓 통신 서비스를 통해 admin ip로 POST요청을 보내면 된다. POST /admin HTTP/1.1Host: host3.dreamhack.games User-Agent: Admin Browser DreamhackUser: admin Cookie: admin=true Content-T..
[Dreamhack] random-test write up 드림이를 위해 문제를 풀어보자! 바로 코드를 보면 #!/usr/bin/python3 from flask import Flask, request, render_template import string import random app = Flask(__name__) try: FLAG = open("./flag.txt", "r").read() # flag is here! except: FLAG = "[**FLAG**]" rand_str = "" alphanumeric = string.ascii_lowercase + string.digits for i in range(4): rand_str += str(random.choice(alphanumeric)) rand_num = random.randint(100, 2..
[Dreamachk] mmapped write up 포너블 level1 정복 두 번째 문제 #include #include #include #include #include #define FLAG_SIZE 0x45 void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); } int main(int argc, char *argv[]) { int len; char * fake_flag_addr; char buf[0x20]; int fd; char * real_flag_addr; initialize(); fd = open("./flag", O_RDONLY); len = FLAG_SIZE; fake_flag_addr = "DH{**********************..
[Dreamhack] Type c-j write up 올바른 ip와 pw를 입력하면 flag가 나온다. Type c-j Index page 코드를 보게되면 사용자가 입력한 ip를 int로 형변환하여 랜덤 생성된 문자열과 비교를하고 있다. 직접 php로 문자열을 int로 형변환해보니 0이 나온다. 따라서 a 10개를 id에 입력하면 0이될거고 if문에서 길이비교는 통과할 것 같다. 입력해보니 ? 패스가 된다. 일단 비밀번호는 sha1함수를 통해 1을 해시화한 값이다. 해보니 위와 같은 값이 나온다. 마찬가지로 int로 형변환을 해본다. 356만 나온다. 뒤에 a값 5개를 넣으면 어차피 인식이 안될거니 자리수를 채워준다. ㄷㄷ if문에서 앞 조건이 형변환 하니 강제 형변환 돼서 뒤 조건도 int형이 되어 조건이 성립된 것 같다.
[Dreamhack] baby-union write up sqli 문제이다. 코드를 바로 보자! CREATE DATABASE secret_db; GRANT ALL PRIVILEGES ON secret_db.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass'; USE `secret_db`; CREATE TABLE users ( idx int auto_increment primary key, uid varchar(128) not null, upw varchar(128) not null, descr varchar(128) not null ); INSERT INTO users (uid, upw, descr) values ('admin', 'apple', 'For admin'); INSERT INTO users (uid, upw, d..
[Dreamhack] BypassIF write up 드림핵 웹해킹 워게임 level 1 다 풀어보자! 첫 문제 BypassIF 서버에 접속하자 입력폼이 하나 존재한다. 코드를 보자. #!/usr/bin/env python3 import subprocess from flask import Flask, request, render_template, redirect, url_for import string import os import hashlib app = Flask(__name__) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" KEY = hashlib.md5(FLAG.encode()).hexdigest() guest_key = hashlib.md5(b"guest").hexd..