문제

문제 파일
풀이
1. 환경 설정 및 파일 준비
작업 표시줄에 있는 ubuntu 관리자 버전 클릭

폴더 입장(입력 후 프롬프트가 ~/Interlude_System_Study$ 로 바뀐다)
cd Interlude_System_Study

백신 프로그램 끄기 : 문제 파일이 악성파일이므로 그냥 다운받으면 바로 삭제됨. 백신 실시간 검사 끄고 다운받기

문제 파일 풀이 진행할 폴더로 옮기기

파일 존재 확인 및 권한 부여: ls -F로 파일 리스트를 확인한 뒤, 실행 파일인 shop에 실행 권한을 부여함.
chmod +x shop

2. 문제 분석
- 프로그램 실행: ./shop을 실행하여 상점 메뉴를 확인.
- 상태 파악: 현재 보유 잔액은 1836 coin이며, 목표인 The Flag의 가격은 36363636 coin으로, 정상적인 방법으로는 구매가 불가능함을 확인.

3. 취약점 탐색 및 공격 시나리오
- 취약점: [b]uy 메뉴에서 개수(Quantity)를 입력받을 때, 입력값에 대한 범위 제한(예: 음수 체크, 최대값 제한)이 존재하지 않음. 이는 전형적인 정수 오버플로우(Integer Overflow) 취약점임.
- 공격 논리: 32비트 signed integer의 범위(최대 2,147,483,647)를 초과하는 큰 수를 입력하여, 가격 * 개수 연산 결과가 음수로 변환되도록 유도.
- 36363636 * 60 = 2,181,818,160 (오버플로우 발생)
- 시스템 해석 결과: -2,113,149,136으로 인식

4. 공격 수행
- 구매 실행:
[b]uy Item index: 3 Quantity: 60 - 결과: Total cost가 음수로 계산되어, 오히려 잔액이 2,113,150,972 코인으로 증가하는 것을 확인. 이를 통해 정상적으로 플래그를 구매함.

5. 최종 결과
- Flag 획득: LYKNCTF{wr4p_wr4p_wr4p}
이번 문제는 사용자의 입력값(개수)이 연산 시 정수의 범위를 넘어서면 의도치 않은 값을 생성한다는 점을 활용한 것이 핵심이었음. 이를 통해 잔액을 음수에서 양수로 반전시켜 비싼 상품을 구매하는 정수 오버플로우의 전형적인 공격 패턴을 실습함.
성공

'CTF > Binary Exploitation (Pwnable)' 카테고리의 다른 글
| [LYKNCTF] Return-to-Lose (0) | 2026.07.07 |
|---|---|
| [Google ctf] The Classic Notes App (0) | 2026.04.30 |
| [picoCTF] PIE TIME (0) | 2026.04.30 |
| [picoCTF] heap 0 (0) | 2026.04.29 |