<Homework>
2. bof_basic 폴더 안에 있는 bof_basic 바이너리를 익스플로잇하여 flag 출력하기
<Environment>
Macbook Air 15, Apple M2, 16GB ram, 1TB storage
MAC Sequoia 15.1 Beta (24B5070e)
Parallels Desktop 18 for Mac (Ubuntu 22.04 ARM 64)
IDA Freeware 8.2
제공된 file은 bof_basic이라는 binary file이다.
우선 우리의 만능 gdb로 먼저 살펴보면, stack에 0x20 size의 space를 allocate하는 것을 확인할 수 있고, 특정 string을 print하고 function scanf로 입력을 받아 비교하고 main+109로 jle하는 등의 process flow를 확인할 수 있다. 좀 더 자세히 보기 위해 IDA로 확인해보자.
보다시피 scanf 이후 0x13과 비교, jle 즉 작거나 같으면 jump 하는 것을 확인할 수 있다. scanf로 입력 받은 size 만큼 buffer에 입력할 수 있는데, buffer size는 0x20이기 때문에 이를 우회해야 bof를 일으킬 수 있다.
우선 해당 조건을 충족하기 위해서는 음수 이거나 0이어야 한다. 여기서 integer overflow를 생각할 수 있는데 function read의 원형을 살펴보면,
ssize_t read(int fd, void *buf, size_t count);
이렇게 구성되어 있는 것을 볼 수 있는데 assembly를 확인해보면 fd(file descriptor)에 0, buf에 buffer의 pointer가 들어가고, count에는 scanf로 입력받은 value가 들어가는 것을 확인할 수 있다. 이 부분에서 주목해야 할 점은 바로 size_t라는 자료형인데 size_t는 해당 system에서 어떤 object나 value가 포함할 수 있는 maximun size의 data를 표현하는 type로 반드시 unsigned type로 나타낸다.
즉 음수가 들어갈 경우, 예상치 못한 큰 value가 들어갈 수 있다는 것이다.
'Pay1oad > Pwnable Study' 카테고리의 다른 글
[Pay1oad] Pwnable Study Week 3 - 3week_HW: r2c (0) | 2024.11.11 |
---|---|
[Pay1oad] Pwnable Study Week 2 - mic_check (0) | 2024.11.09 |
[Pay1oad] Pwnable Study Week 1 - Pay1oad Welcome CTF Writeup (0) | 2024.10.01 |
[Pay1oad] Pwnable Study Week 1 - Handray (0) | 2024.09.28 |