문제 확인
해당 문제는 버퍼 오버 플로우 취약점을 활용하여 flag파일을 읽어오는 문제이다.
서비스 분석
파일 실행 시 meow?라는 문자와 함께 입력을 받게 된다.
입력값을 입력 시 동일 경로에 저장되어 있는 cat.txt를 실행한 후 종료한다.
소스 코드
문제에서 제공되는 소스코드는 없지만 IDA를 사용하여 디컴파일하였다.
main 함수
코드 라인 | 설명 |
3~4 | 128크기의 변수와 16크기의 변수를 생성한다. |
7 | v5변수에 "./cat"이라는 문자열을 대입한다. |
8~9 | meow?를 화면에 출력한 후 144만큼의 데이터를 입력받아 v4에 저장한다. |
10 | read_cat이라는 함수를 "./cat"이라는 문자열을 사용하여 동작한다. |
11 | meow : {입력받은 값} 의 형태로 출력을 하고 프로그램을 종료한다. |
문제 해결
main 함수에서 문제점은 아래와 같다.
1. v4라는 변수 뒤에 곧바로 v5라는 변수가 생성된다.
2. scanf에서 최대로 받을 수 있는 값은 144이지만 v4의 크기는 128이다.
3. scanf를 통해 사용자의 입력값을 받고 난 후 read_cat함수가 실행된다.
위 3가지의 문제점으로 인해 v4의 값에 128 이상의 값을 넣게 되면 버퍼 오버플로우가 발생되어 v5변수의 값을 덮을 수 있게 된다.
v5변수에 flag가 저장되어 있는 경로로 값을 덮게 되면 read_cat함수가 실행될 때 cat.txt가 아닌 flag를 화면에 출력하게 될 것이다.
A라는 임의의 값을 128만큼 입력한 뒤 flag가 저장되어 있는 경로를 뒤에 붙여 입력을 하였다.
FLAG
'Hacking > DreamHack' 카테고리의 다른 글
[DreamHack] 드림핵 basic_exploit_003 (0) | 2024.10.31 |
---|---|
[DreamHack] 드림핵 baby-bof (0) | 2024.10.30 |
[DreamHack] 드림핵 shell_basic (0) | 2024.10.28 |
[DreamHack] 드림핵 Apache htaccess (0) | 2024.01.20 |
[DreamHack] 드림핵 out of money (0) | 2024.01.19 |