반응형
문제설명
아모카페에 오신 것을 환영합니다!
메뉴 번호를 입력하여 주문할 수 있는 웹 서비스가 작동하고 있습니다. 아모의 최애 메뉴를 대신 주문해 주면 아모가 플래그를 준다고 합니다. 첨부파일로 주어지는 웹 서비스의 코드를 분석하여 메뉴 번호를 알아 내세요! 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.
문제에서 주어진 flag.txt 파일에 적혀있는 플래그는 sample 플래그입니다.
플래그 형식은 DH{...} 입니다.
코드분석
@app.route('/', methods=['GET', 'POST'])
def index():
menu_str = ''
org = FLAG[10:29]
org = int(org)
st = ['' for i in range(16)]
- FLAG[10:29]: FLAG 문자열의 부분 문자열을 뽑는다.
- int(org): 그 부분 문자열을 10진수 정수로 변환한다.
- st: 길이 16짜리 리스트 생성
for i in range (0, 16):
res = (org >> (4 * i)) & 0xf
if 0 < res < 12:
if ~res & 0xf == 0x4:
st[16-i-1] = '_'
else:
st[16-i-1] = str(res)
else:
st[16-i-1] = format(res, 'x')
menu_str = menu_str.join(st)
- org >> (4*i) & 0xf : org를 오른쪽으로 4비트씩 밀고 마지막 4비트만 뽑음
- res가 0~12면서 ~res & 0xf == 0x4이면 _ 를 삽입
- 아니면 res를 그대로 숫자 문자열로 저장 "1" ~ "11"
- 둘 다 아니면 format(res, 'x')로 16진수 문자 (0, c, d, e, f)로 저장
익스플로잇

가장 좋아하는 메뉴가 1_c_3_c_0__ff_3e 라고 한다.
'_' 는 res=11 (0xb)를 의미한다.
- ~res & 0xf == 0x4 ⇒ 0xf ^ res = 0x4 ⇒ res = 0xb
따라서 1_c_3_c_0__ff_3e 는 1bcb3bcb0bbffb3e가 된다
그리고 원래 코드가 10진수라고 했으니 2002760202557848382를 입력해주면

반응형
'Dreamhack 워게임 > Lv.1' 카테고리의 다른 글
| Type c-j (0) | 2026.02.08 |
|---|---|
| baby-union (0) | 2026.02.08 |
| command-injection-chatgpt (0) | 2026.02.08 |
| Apache htaccess (0) | 2026.02.08 |
| File Vunleravility Advanced for Linux (0) | 2026.02.07 |