[Dreamhack] Carve Party
들어가면 설명에 호박을 만번 클릭하라길래 클릭을 해보면 1씩 카운트가 줄어듦.
개발자 도구를 통해 코드를 확인해봄

출처 : https://mokpo.tistory.com/110

출처 : https://mokpo.tistory.com/110
처음에는 감을 못잡아서 counter랑 dashlen 등 건드려보다가 이런 그림이 나왔고, 호박을 계속 클릭하면 그림이 계속 바뀌는 걸 확인했다.

코드를 살펴보다 보니 일단 위의 그림이 나와야 함과 동시에 counter가 100으로 나누어지는 구간에서 그림이 바뀐다는 것을 확인할 수 있었다. 그래서 counter를 100씩 증가하도록 바꿔주고 0이 될 때까지 클릭을 해주니 아래와 같이 플래그를 구할 수 있었다..

[Dreamhack] Click me!

들어가면 위와 같은 화면이 나오고 버튼을 클릭하려고 하면 버튼이 다른 곳으로 이동한다.

개발자도구로 확인해주니 escapeButton의 상태를 가져와 랜덤값으로 위치 시키는 것 같아서 button의 id를 바꿔줬다,

그랬더니 위와 같이 버튼이 가운데 고정되었고 눌렀더니 플래그를 구할 수 있었다.

[Dreamhack] rev-basic-0

x64dbg로 문제 파일 열기

실행하면서 Input 뜨는 곳 찾아준다
해당 함수 내부로 들어오니까 correct, wrong 확인 가능

test eax, eax 로 correct / wrong 판별하는 듯
test eax, eax 바로 위에 있는 함수 내부로 들어가보면

정답처럼 보이는 애가 있다..
입력해보면

Correct !!
[Dreamhack] ROT128
https://dreamhack.io/wargame/challenges/852
ROT128
Descriptionrot128.py는 flag.png 파일을 암호화하여 encfile로 저장하는 프로그램의 소스 코드입니다. (풀이자가 프로그램을 직접 실행할 수는 없습니다.)주어진 encfile을 복호화하여 flag 파일 내용을 알아
dreamhack.io

일단 파일을 받아보면, 다음과 같은 파일들이 들어있다.

rot128.py 코드를 열어보자.
#!/usr/bin/env python3
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
with open('flag.png', 'rb') as f:
plain_s = f.read()
plain_list = [hex(i)[2:].zfill(2).upper() for i in plain_s]
enc_list = list(range(len(plain_list)))
for i in range(len(plain_list)):
hex_b = plain_list[i]
index = hex_list.index(hex_b)
enc_list[i] = hex_list[(index + 128) % len(hex_list)]
enc_list = ''.join(enc_list)
with open('encfile', 'w', encoding='utf-8') as f:
f.write(enc_list)
암호화하는 과정을 담은 코드다.
- 현재 바이트의 값(index)을 128 더하고 (+128)
- 256으로 나눈 나머지를 취한다 (% 256)
- 다시 그 값의 hex 문자열로 바꾼다
이 내용을 그대로 반대로 역연산하는 복호화 코드를 챗지피티한테 짜달라고 했다.
#!/usr/bin/env python3
# 복호화: rot128.py의 역연산 수행
hex_list = [(hex(i)[2:].zfill(2).upper()) for i in range(256)]
# encfile 읽기 (암호문)
with open('encfile', 'r', encoding='utf-8') as f:
enc_s = f.read().strip()
# 2글자씩 나누기 (각 바이트의 hex)
enc_list = [enc_s[i:i+2] for i in range(0, len(enc_s), 2)]
# 역연산 수행: (index - 128) % 256
dec_list = []
for hex_b in enc_list:
index = hex_list.index(hex_b)
dec_list.append(hex_list[(index - 128) % len(hex_list)])
# hex 문자열 → 바이트로 변환
dec_bytes = bytes.fromhex(''.join(dec_list))
# 복원된 이미지 저장
with open('flag_decrypted.png', 'wb') as f:
f.write(dec_bytes)
print("✅ 복호화 완료! → flag_decrypted.png 로 저장됨")
1. encfile 읽어서 2자리씩 자름 (['09', 'E0', ...])
2. 각 hex 값의 인덱스를 찾아서 -128만큼 되돌림
3. 원래 바이트 값을 복원
4. flag_decrypted.png로 저장

복호화 코드를 같은 폴더에 저장한 뒤, cmd로 실행시키면



flag가 있는, 복호화된 png 파일이 생긴다
[Dreamhack] simple_sqli_chatgpt
입력값이 query DB로 가고 쿼리문을 리턴해 준다.
userlevel을 입력하면 flag가 나오는것으로 보인다 userid= admin, userlevel이 0이 되도록 만들어야 한다.
user와 admin으로 입력이 가능한것이 보인다. 로그인 하고싶은 admin은 userlevel이 0이다.
userlevel이 0인 모든 행을 반환하고 userid 가 admin인 값을 반환하게하는 sql 인젝션 기반 우회 페이로드다 0'level userid ='admin

'4-1. 2025-2 심화 스터디 > 워게임 도장 깨기' 카테고리의 다른 글
| [5주차] 25.11.22 워게임 도장 깨기 (0) | 2025.11.27 |
|---|---|
| [2주차] 25.10.04 워게임 도장 깨기 (0) | 2025.11.15 |
| [3주차] 25.11.8 워게임 도장 깨기 (0) | 2025.11.14 |
| [1주차] 25.09.27 워게임 도장 깨기 (0) | 2025.09.27 |