CTF/Binary Exploitation (Pwnable)

[LYKNCTF] Shop

daaaay 2026. 7. 7. 16:38

문제

 

문제 파일

shop
0.02MB

 

 

풀이

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