전체 글(21)
-
[Dreamhack WEB] LEVEL1 : Pearfect Markdown
문제 설명 문제 분석 VM을 활성화 시키고 방문시다음과 같은 마크다운 파일을 업로드하고, 업로드 된 파일을 볼 수 있는 구조이다. 문제 파일을 받아 upload.php 코드를 보자.if (pathinfo($name, PATHINFO_EXTENSION) === 'md') { move_uploaded_file($tmp_name, "$uploads_dir/$name"); 파일 이름의 끝 부분이 .md 인지만 확인한다.내용 검증이 부실하다. post_handler.php 코드를 보자. include($path); 부분에서 사용자가 입력한 파일경로를 검증없이 그대로 실행한다. Dockerfile 을 보면,RUN RANDOM_STR=$(head /dev/urandom | tr -dc A-Za-z..
2026.02.10 -
[Dreamhack WEB] LEVEL2 : LiteBoard
문제 설명문제 분석 VM을 활성화 시키고 접속하면 다음과 같은 간단한 방명록이 뜬다 hi를 입력하고 submit 한다 hi가 그대로 검색된다. 문제 제목에 Lite가 들어가기 때문에 왠지 SQLite, SQL 인젝션 문제 인 듯 하다. 공격을 하기위해 SQLite DB 구조를 알아야 한다https://www.sqlite.org/schematab.html The Schema Table1. Introduction Every SQLite database contains a single "schema table" that stores the schema for that database. The schema for a database is a description of all of the other tab..
2026.02.09 -
[Dreamhack WEB] LEVEL1 : call
문제 설명문제 분석 VM 활성화 후 웹에 들어가면 다음과 같은 로그인 화면이 보인다. app.py 코드를 보자. if username == 'guest' and password == 'guest': session = os.urandom(16).hex() sessions[session] = {'username': username, 'role': 'user'} resp = make_response(jsonify({'success': True, 'message': 'hello'})) resp.set_cookie('session', session) return resp return jsonify({'success':..
2026.02.04 -
[Dreamhack WEB] LEVEL1 : Type c-j
문제 설명 Type Juggling -> php가 상황에 맞춰 데이터 타입을 알아서 바꾸는 현상을 말한다. 문제 분석 index.php 코드를 보자. check.php로 데이터를 전송하는 것을 볼 수 있다. *input 태그가 text.. 로 되어있다 이렇게 하면 사용자가 비밀번호 입력시 글자가 그대로 화면에 노출된다 **** 처럼 가려져야 하므로type = "password" 처럼 변경하는 것이 권장된다 check.php 코드를 보자. $id = getRandStr(); id는 getRandStr()로 만들어진 랜덤한 문자열이다. if((int)$input_id == $id && strle..
2026.02.02 -
[Dreamhack WEB] LEVEL1 : type confusion
문제 설명 정답은 바로 이 제목 자체에 있다. 라고 되어있다.문제 분석VM 활성화 후 웹에 들어가면 다음과 같이 소스코드를 볼 수 있게 되어있다. 소스 코드를 보면 php로 작성되어 있다. if ($json->key == $key) { 부분을 보면 key == $key사용자 입력 == 서버 비밀번호가 문자열로서 똑같은지 확인을 하는데..==는 php에서 타입이 달라도 알아서 변환해서 비교해버린다. Boolean Bypass? php는 웹개발을 쉽고 빠르게 하기 위해 만들어졌다.따라서 형식에 얽매이지 말고 편하게 비교하라는 철학이 있다.보통 사용자가 입력창에 123을 문자로 넣든.. 숫자로 123넣든.. 그냥 같게 하자 피곤하니까! 하고 설계했지만이 때문에 보안 취약점이 생긴다. 1. 서버는 비밀..
2026.01.30 -
[Dreamhack WEB] LEVEL1 : What time is it?
문제설명문제 분석 vm을 활성화 하고 웹 접속시 다음과 같은 화면을 볼 수 있다. 아무 아이디 (guest) 로 가입하고 로그인하면 다음과 같은 화면이 보인다.저렇게 시간과 초가 다 나오는게 뭔가 수상하다. app.py 코드를 보자.resp.set_cookie("session", sess.make_session(username, created_at)) 세션 생성을 계정 생성 시간으로 하고 있다.admin의 계정 생성 시간을 알 수 있다면, 이 세션값을 가져와서 위조 가능하다. if "admin" not in users: add_user("admin", "**REDACTED**", int(time.time())) admin은 서버 실행 시 int (정수) 으로 생성된다. session.py..
2026.01.29